本業終了後、夜な夜な得意先に導入されるEDIシステムへの対応プログラムを開発。
疲れたよ!
得意先から渡された仕様書を読むと
業界標準の流通BMIシステム
業界標準ってどういう意味かと思ったら、何のことは無い
全業種に対応するために無駄にたくさんの項目が用意されたテーブルを持つシステムでした!
水域・産地名・等級・養殖区分・解凍・部位・カラー名称・・・・
9割以上、加工食品卸業に関係ない項目。
すごくプログラムし難いんですけど、これ!
取り合えずEDIアップロード用「実出荷データ」を用意しcsvエクスポートテスト・・・
すると、見たことのないエラー
フィールドF134の開始位置32916が有効ではありません。
開始位置は32767以内で指定してください。
何これ?
原因究明の為、項目文字数・項目数を変えながら何度もテストしたら・・・・・・
エラー原因、わかりました!
項目数が多すぎてMS-Access君がエクスポート用定義を作れないみたい!
なんだ、そんな原因ならTextStreamを使えばいいじゃん!
select caseで項目ごとの固定値も簡単に指定できる。
流通BMI開発は、TextStreamで楽勝ね!
逆に言えば、項目がバカみたいに多い流通BMI、
TextStreamを知らないと開発出来ません。
Private Sub btnEDIexp_Click() Dim i As Integer Dim FnameS As String i = 0 FnameS = "C:\katabe\EDIupload.csv" Dim FSO As New FileSystemObject Dim f As File Dim st As TextStream Set st = FSO.CreateTextFile("C:\katabe\EDIupload.csv") Dim cn As ADODB.Connection Set cn = Application.CurrentProject.Connection Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Open "select * from QEDIエクスポートソース", cn, adOpenKeyset, adLockOptimistic Dim myTEXT As String myTEXT = "" '検証用ヘッダー部 For i = 1 To 188 If i = 188 Then myTEXT = myTEXT & "F" & i Else myTEXT = myTEXT & "F" & i & "," End If Next i st.WriteLine (myTEXT) Do While rs.EOF = False myTEXT = "" For i = 0 To 187 Select Case i Case 0 myTEXT = rs.Fields(i) Case 4, 8, 9, 13, 26, 39, 45, 98, 100, 111, 123, 132, 139, 142, 145, 153, 161 myTEXT = myTEXT & "," & rs.Fields(i) Case 5 myTEXT = myTEXT & ",00" '固定00 Case 19 myTEXT = myTEXT & ",03" '固定03 Case 33 myTEXT = myTEXT & ",02" '固定02 Case 66 myTEXT = myTEXT & ",999" '固定999 Case 84 myTEXT = myTEXT & ",00" '固定00 Case 89 myTEXT = myTEXT & ",01" '固定01 Case 133 myTEXT = myTEXT & "," & Date() Case 155 myTEXT = myTEXT & ",1" '固定1 Case Else myTEXT = myTEXT & "," End Select Next i st.WriteLine (myTEXT) rs.MoveNext Loop rs.Close cn.Close st.Close Call Shell("notepad.exe C:\katabe\EDIupdate.csv", 1) End Sub
これまでの物件は全てヘッダー・フッターが必要だった為、最初からTextStreamで開発してました。
その為、今回のエラーに遭遇しなかったのかな?
いつも興味深く拝読しております。
流通BMS、自分はインポートファイルの作成プログラムしか作ったことがありませんが、
仕様書を見ると毎回ため息が出ますね。
(A3で印刷してもとても字が小さい)