unit u_op_seae_edi_cma; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, BusinessSkinForm, bsSkinCtrls, StdCtrls,inifiles, DB, ADODB; type Tfrm_op_seae_edi_cma = class(TForm) Label2: TLabel; Label1: TLabel; Edit2: TEdit; Edit1: TEdit; bsSkinButton1: TbsSkinButton; bsSkinButton2: TbsSkinButton; bsBusinessSkinForm1: TbsBusinessSkinForm; SaveDialog1: TSaveDialog; Label3: TLabel; Label4: TLabel; Edit3: TEdit; Edit4: TEdit; t_op_ctn: TADOQuery; bsSkinCheckRadioBox1: TbsSkinCheckRadioBox; bsSkinCheckRadioBox2: TbsSkinCheckRadioBox; procedure bsSkinButton1Click(Sender: TObject); procedure FormShow(Sender: TObject); function get_txt(str:Tstringlist):integer; function get_goods(str:widestring):widestring; private { Private declarations } public { Public declarations } end; var frm_op_seae_edi_cma: Tfrm_op_seae_edi_cma; implementation uses u_op_seae, my_sys_function, u_main, u_data_share; {$R *.dfm} function Tfrm_op_seae_edi_cma.get_goods(str:widestring):widestring; var str_all:Tstringlist; r_str:widestring; i:integer; begin str:=Changestr(trim(str)); str_all:=Tstringlist.Create; str_all.Text:=str; for i:=0 to str_all.Count-1 do begin r_str:=r_str+' '+str_all[i]; end; result:=trim(r_str); end; function Tfrm_op_seae_edi_cma.get_txt(str:Tstringlist):integer; var str_all:Tstringlist; j,Count:integer; str_guodu:widestring; str_pay:string; begin str_all:=Tstringlist.Create; count:=0; str.Add('UNB+UNOC:2+'+Edit1.TEXT+':ZZZ+'+Edit3.TEXT +':ZZZ+'+GetDatetime(datetimetostr(now),2)+'+' +frm_op_seae.t_op_seae.fieldbyname('业务编号').asstring+#39); count:=count+1; str.Add('UNH+'+frm_op_seae.t_op_seae.fieldbyname('业务编号').asstring+'+IFTMBF:D:99B:UN'+#39); count:=count+1; str.Add('BGM+335+'+frm_op_seae.t_op_seae.fieldbyname('主提单号').asstring+'+9'+#39); count:=count+1; str.Add('CTA+IC+:'+employee+#39); count:=count+1; str.Add('COM+'+frm_data_share.t_load_employee.fieldbyname('固定电话').asstring+':TE'+#39); count:=count+1; str.Add('DTM+137:'+GetDatetime(datetimetostr(now),1)+':203'+#39); count:=count+1; if trim(frm_op_seae.t_op_seae.fieldbyname('运输条款').asstring)='' then begin showmessage('业务编号为:'+frm_op_seae.t_op_seae.fieldbyname('业务编号').asstring +'的运输条款没有输入!!'); result:=-1; exit; end; if trim(frm_op_seae.t_op_seae.fieldbyname('运输条款').asstring)='DOOR-DOOR' then begin str.Add('TSR+27+2'+#39); end else if trim(frm_op_seae.t_op_seae.fieldbyname('运输条款').asstring)='DOOR-CY' then begin str.Add('TSR+28+2'+#39); end else if trim(frm_op_seae.t_op_seae.fieldbyname('运输条款').asstring)='CY-DOOR' then begin str.Add('TSR+29+2'+#39); end else if trim(frm_op_seae.t_op_seae.fieldbyname('运输条款').asstring)='CY-CY' then begin str.Add('TSR+30+2'+#39); end else begin str.Add('TSR+30+2'+#39); end; if trim(frm_op_seae.t_op_seae.fieldbyname('预付地点').asstring)<>'' then str_pay:=trim(frm_op_seae.t_op_seae.fieldbyname('预付地点').asstring); if trim(frm_op_seae.t_op_seae.fieldbyname('到付地点').asstring)<>'' then str_pay:=trim(frm_op_seae.t_op_seae.fieldbyname('到付地点').asstring); count:=count+1; str.Add('FTX+AAI+++'+frm_op_seae.t_op_seae.fieldbyname('付费方式').asstring +' Payable at '+str_pay+' '+ frm_op_seae.t_op_seae.fieldbyname('运输条款').asstring+#39); count:=count+1; str.Add('RFF+BM:'+frm_op_seae.t_op_seae.fieldbyname('主提单号').asstring+#39); count:=count+1; str.Add('RFF+ON:###NAD-CZ-ZZZ-['+frm_op_seae.t_op_seae.fieldbyname('发货人编号').asstring+']'+#39); count:=count+1; str.Add('RFF+CT:'+frm_op_seae.t_op_seae.fieldbyname('运费协议号').asstring+#39); // count:=count+1; str.Add('TDT+20+'+frm_op_seae.t_op_seae.fieldbyname('航次').asstring +'+1+++++:::'+frm_op_seae.t_op_seae.fieldbyname('船名').asstring+#39); count:=count+1; str.Add('LOC+88+'+trim(frm_op_seae.t_op_seae.fieldbyname('交货代码').asstring) +':139:6:'+trim(frm_op_seae.t_op_seae.fieldbyname('交货地点').asstring)+#39); count:=count+1; str.Add('LOC+9+'+trim(frm_op_seae.t_op_seae.fieldbyname('装港代码').asstring) +':139:6:'+trim(frm_op_seae.t_op_seae.fieldbyname('装货港').asstring)+#39); count:=count+1; str.Add('LOC+11+'+trim(frm_op_seae.t_op_seae.fieldbyname('卸货代码').asstring) +':139:6:'+trim(frm_op_seae.t_op_seae.fieldbyname('卸货港').asstring)+#39); count:=count+1; str.Add('LOC+7+'+trim(frm_op_seae.t_op_seae.fieldbyname('目的地代码').asstring) //? +':139:6:'+trim(frm_op_seae.t_op_seae.fieldbyname('目的地').asstring)+#39); count:=count+1; str.Add('NAD+CA+CMDU:160:86++CMA-CGM'+#39); count:=count+1; str.Add('NAD+ZZZ+'+Edit1.TEXT+':160:86++'+Edit2.TEXT+#39); count:=count+1; str.Add('CTA+NT+'+employee+#39); count:=count+1; str.Add('COM+'+frm_data_share.t_load_employee.fieldbyname('邮箱').asstring+':EM'+#39); count:=count+1; str_all.Clear; str_all.Text:=Changestr(frm_op_seae.t_op_seae.fieldbyname('发货人代码').asstring); str_guodu:='NAD+CZ+++'+str_all[0]+'+'; if str_all.Count>=2 then str_guodu:=str_guodu+str_all[1]; if (str_all.Count>=3) and (str_all.Count<=5) then begin for j:=2 to str_all.Count-1 do begin str_guodu:=str_guodu+':'+str_all[j] end; end; if str_all.Count>5 then begin for j:=2 to 4 do begin str_guodu:=str_guodu+':'+str_all[j] end; end; str_guodu:=str_guodu+#39; str.Add(str_guodu); count:=count+1; str_all.Clear; str_all.Text:=Changestr(frm_op_seae.t_op_seae.fieldbyname('收货人代码').asstring); str_guodu:='NAD+CN+++'+str_all[0]+'+'; if str_all.Count>=2 then str_guodu:=str_guodu+str_all[1]; if (str_all.Count>=3) and (str_all.Count<=5) then begin for j:=2 to str_all.Count-1 do begin str_guodu:=str_guodu+':'+str_all[j] end; end; if str_all.Count>5 then begin for j:=2 to 4 do begin str_guodu:=str_guodu+':'+str_all[j] end; end; str_guodu:=str_guodu+#39; str.Add(str_guodu); count:=count+1; str_all.Clear; str_all.Text:=Changestr(frm_op_seae.t_op_seae.fieldbyname('通知人代码').asstring); str_guodu:='NAD+NI+++'+str_all[0]+'+'; if str_all.Count>=2 then str_guodu:=str_guodu+str_all[1]; if (str_all.Count>=3) and (str_all.Count<=5) then begin for j:=2 to str_all.Count-1 do begin str_guodu:=str_guodu+':'+str_all[j] end; end; if str_all.Count>5 then begin for j:=2 to 4 do begin str_guodu:=str_guodu+':'+str_all[j] end; end; str_guodu:=str_guodu+#39; str.Add(str_guodu); count:=count+1; str.Add('GID+1+'+frm_op_seae.t_op_seae.fieldbyname('件数').asstring+':'+ frm_op_seae.t_op_seae.fieldbyname('包装代码').asstring+#39); //? count:=count+1; if bsSkinCheckRadioBox1.checked then str.Add('FTX+AAA+++'+ frm_op_seae_edi_cma.get_goods(frm_op_seae.t_op_seae.fieldbyname('货物描述').asstring)+#39); count:=count+1; str.Add('MEA+AAE+WT+KGM:'+frm_op_seae.t_op_seae.fieldbyname('重量').asstring+#39); count:=count+1; if frm_op_seae.t_op_seae.FieldByName('货物标识').asstring='D' then begin str.Add('DGS+IMD+'+frm_op_seae.t_op_seae.fieldbyname('危险品分类').asstring +'+'+frm_op_seae.t_op_seae.fieldbyname('危险品编号').asstring+#39); count:=count+1; str.Add('CTA+HG+:'+frm_data_share.t_load_employee.fieldbyname('固定电话').asstring+#39); count:=count+1; end; t_op_ctn.close; t_op_ctn.Parameters.ParamByName('编号').Value:=frm_op_seae.t_op_seae.fieldbyname('编号').asstring; t_op_ctn.open; t_op_ctn.first; while not t_op_ctn.eof do begin if frm_op_seae.t_op_seae.fieldbyname('是否自有箱').asboolean then str.Add('EQD+CN++'+t_op_ctn.fieldbyname('EDI代码').asstring+'+1'+#39) else str.Add('EQD+CN++'+t_op_ctn.fieldbyname('EDI代码').asstring+'+2'+#39); //箱型 多箱型 count:=count+1; str.Add('EQN+'+t_op_ctn.fieldbyname('数量').asstring+#39); //数量 count:=count+1; if frm_op_seae.t_op_seae.FieldByName('货物标识').asstring='R' then begin str.Add('TMP+2+'+frm_op_seae.t_op_seae.fieldbyname('设置温度').asstring+':CEL'+#39); count:=count+1; end; t_op_ctn.next; end; if trim(frm_op_seae.t_op_seae.fieldbyname('运输方式').asstring)='DOOR-DOOR' then begin str.Add('NAD+SF+++'+Edit2.text+'+.'+#39); count:=count+1; str.Add('CTA+IC+:'+employee+#39); count:=count+1; str.Add('COM+'+frm_data_share.t_load_employee.fieldbyname('固定电话').asstring+':TE'+#39); count:=count+1; str.Add('NAD+ST+++'+Edit2.text+'+.'+#39); count:=count+1; str.Add('CTA+IC+:'+employee+#39); count:=count+1; str.Add('COM+'+frm_data_share.t_load_employee.fieldbyname('固定电话').asstring+':TE'+#39); count:=count+1; end; if trim(frm_op_seae.t_op_seae.fieldbyname('运输方式').asstring)='DOOR-CY' then begin str.Add('NAD+SF+++'+Edit2.text+'+.'+#39); count:=count+1; str.Add('CTA+IC+:'+employee+#39); count:=count+1; str.Add('COM+'+frm_data_share.t_load_employee.fieldbyname('固定电话').asstring+':TE'+#39); count:=count+1; end; if trim(frm_op_seae.t_op_seae.fieldbyname('运输方式').asstring)='CY-DOOR' then begin str.Add('NAD+ST+++'+Edit2.text+'+.'+#39); count:=count+1; str.Add('CTA+IC+:'+employee+#39); count:=count+1; str.Add('COM+'+frm_data_share.t_load_employee.fieldbyname('固定电话').asstring+':TE'+#39); count:=count+1; end; result:=count; end; procedure Tfrm_op_seae_edi_cma.bsSkinButton1Click(Sender: TObject); var str:Tstringlist; i,Count,get_Count,bill_count:integer; inifile1:Tinifile; begin str:=Tstringlist.Create; str.Clear; count:=0; bill_count:=0; if frm_op_seae.dxdbgrid1.SelectedCount>1 then begin for i:=0 to frm_op_seae.dxdbgrid1.SelectedCount-1 do begin frm_op_seae.t_op_seae.GotoBookmark(pointer(frm_op_seae.dxdbgrid1.selectedrows[i])); get_Count:=frm_op_seae_edi_cma.get_txt(str); if get_Count=-1 then exit else count:=count+get_Count; bill_count:=bill_count+1; end; str.Add('UNT+'+INTTOSTR(count)+'+1'+#39); str.Add('UNZ+'+inttostr(bill_count)+'+100'+#39); end else begin get_Count:=frm_op_seae_edi_cma.get_txt(str); if get_Count=-1 then exit else count:=count+get_Count; str.Add('UNT+'+INTTOSTR(count)+'+1'+#39); str.Add('UNZ+1+100'+#39); end; SaveDialog1.FileName:=frm_op_seae.t_op_seae.fieldbyname('主提单号').asstring; if SaveDialog1.Execute then begin str.SaveToFile(SaveDialog1.FileName+'.txt'); showmessage('文件生成成功!'); end else begin showmessage('文件生成失败!'); exit; end; inifile1:=Tinifile.Create(ExtractFilePath(application.ExeName)+'main.ini'); inifile1.WriteString('CMA','SEND_CODE',edit1.text); inifile1.WriteString('CMA','SEND_NAME',edit2.text); inifile1.WriteString('CMA','RECEIVE_CODE',edit3.text); inifile1.WriteString('CMA','RECEIVE_NAME',edit4.text); inifile1.free; close; end; procedure Tfrm_op_seae_edi_cma.FormShow(Sender: TObject); var inifile1:Tinifile; begin inifile1:=Tinifile.Create(ExtractFilePath(application.ExeName)+'main.ini'); edit1.text:=inifile1.ReadString('CMA','SEND_CODE',''); edit2.text:=inifile1.ReadString('CMA','SEND_NAME',''); edit3.text:=inifile1.ReadString('CMA','RECEIVE_CODE',''); edit4.text:=inifile1.ReadString('CMA','RECEIVE_NAME',''); inifile1.free; end; end.