車検証管理システムを提供している、車検工場が俺の上得意先として、もう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を使わないっていうのは良いけど、独特過ぎるだろう。
こんなコードを書く連中がうじゃうじゃいるのでシステム屋にソフトを依頼するときはご注意あれ。
コメント