継続車検申請書フォーマット変更

車検証管理システムを提供している、車検工場が俺の上得意先として、もう10年は付き合っているだろうか。

そもそも、オフコンのシステムをダウンサイジングした際に、前任のシステム屋が飛んでも無い組み方をやっていて、イベントドリブンをわかって無いし、しかもDBシステムじゃなくて、ファイルシステムで、付け合わせにシーク番号とか使ってて、一つずれると中身のデータが狂ってくると言う脆弱さで、印刷ロジックもPrinter.printとtabやフォントサイズで調整していると言う極め物。

今回、しょうがないのでとうとう、印刷ロジックの見直しを迫られたわけで、これは、ちょっと大げさにして費用発生する様にもって行くしかなさそうだ。

さすがに、この変更は保守範囲外と言った所で納得してくれるだろう。

国土交通省にありがとうと言えば良いのか、元々のシステムを作ったへっぽこシステム屋にありがとうと言えば良いのか、今年は年初からさい先良さそうだ。

なんだこれって言いたくなる印刷ロジック....馬鹿か!


For i = 1 To 3
If Mid(bmn2, i, 1) >= "0" And Mid(bmn2, i, 1) <= "9" Then
bmn4 = bmn4 + Mid(bmn2, i, 1)
End If
Next i
For i = 1 To 5
If Mid(bmn2, i, 1) >= "あ" And Mid(bmn2, i, 1) <= "ん" Then
bmn5 = Mid(bmn2, i, 1)
nw = i
End If
Next i
For i = nw To Len(bmn2)
If Mid(bmn2, i, 1) >= "0" And Mid(bmn2, i, 1) <= "9" Then
bmn6 = bmn6 + Mid(bmn2, i, 1)
End If
Next i
Printer.FontSize = 3
Printer.Print
Printer.FontSize = 10 'def=14
Printer.Print " "; 'def=" "
For i = 0 To 3
Printer.FontSize = 21 '
Printer.Print Mid(bmn1, i + 1, 1); '京都 陸運局
Printer.FontSize = 16
Printer.Print " ";
Next i
Printer.FontSize = 21

'For i = 0 To 3
'Printer.Print Tab((0 + 2) + (i * 3)); Mid(bmn1, i + 1, 1);
'Next i
Printer.FontSize = 20 '
Printer.Print Tab(20 + 2); 'def=1
Printer.FontSize = 21
Printer.Print bmn5; 'あいうえお 等
Printer.FontSize = 3
Printer.Print
Printer.FontSize = 16

'For i = 0 To 2 '1⇒2
Printer.Print Tab(17 + 2); StrConv(Format(bmn4, "@@@"), 4); '333 502 とか...
'Next i


Printer.FontSize = 15
Printer.Print Tab(31 + 2); '1⇒2
Printer.FontSize = 16
'For i = 0 To 3
Printer.Print StrConv(Format(bmn6, "@@@@"), 4); '車番 2416とか
'Next i
Printer.FontSize = 17
For i = 0 To 6
Printer.Print Tab((38 + 1) + (i * 2)); " " & Mid(nn2, i + 1, 1); '車体番号 スペース追加
Next i
If usr2 = 1 Then
Printer.Print Tab(73); " 6 2 3 7 6"; '工場コード
End If

Printer.FontSize = 4
Printer.Print
Printer.FontSize = 10.5

全編こんなロジックの塊で、見るだけでうんざりするわけで、良くこれで金とったわ

この馬鹿みたいなロジックを敬称しつつ、普通はプロシージャを作って、座標を設定してやれば簡単に済むのでメインロジックも数行で済んでしまう。


Public Sub XY_print(X As Integer, y As Integer, myStr As String, myFsize As Integer)
With Printer
.ScaleMode = vbMillimeters 'ミリモードに設定
.FontSize = myFsize
.CurrentX = X '水平座標の設定
.CurrentY = y '垂直座標の設定
End With
Printer.Print myStr '指定位置に文字列を印刷(表示
End Sub

まぁサードパーティーのAPIを使わないっていうのは良いけど、独特過ぎるだろう。

こんなコードを書く連中がうじゃうじゃいるのでシステム屋にソフトを依頼するときはご注意あれ。