unit u_op_seae_edi_custom_zt; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,IdFTP,IdFTPCommon, Dialogs, BusinessSkinForm, StdCtrls, bsSkinCtrls,inifiles, DB, ADODB; type Tfrm_op_seae_custom_edi_zt = class(TForm) bsBusinessSkinForm1: TbsBusinessSkinForm; Label2: TLabel; Edit2: TEdit; Edit1: TEdit; Label1: TLabel; SaveDialog1: TSaveDialog; bsSkinButton1: TbsSkinButton; bsSkinButton2: TbsSkinButton; bsSkinButton3: TbsSkinButton; t_op_ctn: TADOQuery; t_op_ctn1: TDataSource; bsSkinRadioGroup1: TbsSkinRadioGroup; Label3: TLabel; Edit3: TEdit; bsSkinGroupBox1: TbsSkinGroupBox; bsSkinButton4: TbsSkinButton; Label4: TLabel; Edit4: TEdit; Edit5: TEdit; Label5: TLabel; Label6: TLabel; Edit6: TEdit; Label7: TLabel; Edit7: TEdit; bsSkinCheckRadioBox1: TbsSkinCheckRadioBox; bsSkinCheckRadioBox2: TbsSkinCheckRadioBox; Label8: TLabel; Edit8: TEdit; Label9: TLabel; Edit9: TEdit; Label10: TLabel; Edit10: TEdit; procedure bsSkinButton2Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure bsSkinButton1Click(Sender: TObject); procedure bsSkinButton3Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure bsSkinButton4Click(Sender: TObject); private function isEditrue(DataSet:TDataSet): boolean; function GetStrNum(str:String):integer; function FormatListString(Old:TStrings;mCount,Strlength:integer):String; function FormatEdiString(old:String;Strlength:integer):String; function CreateEdiFile:TStrings; function GetCntrEdi(cntrsize: String):String; function GetCntrkgs(cntrsize: String):String; function GetpkgsEdi(pkgs:String):String; function GetlineEdi(aline:String):String; function GetclientEdi(aline:String):String; procedure GetLengthTString(var sl: TStringList; l: integer); function GetLengthword(var s: String; l: Integer;str:String): String; function GetcustEdi(cust: String): String; function GetFieldName(aField:string): String; function GetPortEdiID(Port:String): String; { Private declarations } public { Public declarations } end; var frm_op_seae_custom_edi_zt: Tfrm_op_seae_custom_edi_zt; implementation uses u_op_seae_edi_data, u_main, my_sys_function, u_data_share; {$R *.dfm} function Tfrm_op_seae_custom_edi_zt.GetFieldName(aField:string): String; var aQuery:TADOQuery; begin result:=''; aQuery:=CreateAdoQuery; with aQuery do try Close; SQL.Add('Select '+aField +' From t_op_seae'); SQL.Add('where 编号=:编号'); Parameters.ParamByName('编号').Value:=frm_op_seae_edi_data.t_op_seae.fieldbyname('主编号').AsString; Open; result:=fieldbyname(aField).AsString; finally FreeAndNil(aQuery); end; end; function Tfrm_op_seae_custom_edi_zt.GetPortEdiID(Port:String): String; var aQuery:TADOQuery; begin aQuery:=CreateAdoQuery; try with aQuery do begin Close;SQL.Clear; SQL.Add('Select EDI代码 from t_code_disport where 英文名='''+Port+''''); Open; if not IsEmpty then Result:=Trim(FieldByName('EDI代码').asstring) else Result:=''; end; finally FreeAndNil(aQuery); end; end; procedure Tfrm_op_seae_custom_edi_zt.GetLengthTString(var sl: TStringList; l: integer); var i:integer; str_head,S:String; Stemp:TStrings; begin Stemp:=TStringList.Create; try str_head:=''; S:=''; for i:=0 to sl.Count-1 do begin if sl[i]<>'' then stemp.add(GetLengthword(str_head,l,s+sl[i])); S:=Str_head; end; while S<>'' do begin stemp.add(GetLengthword(str_head,l,s)); S:=Str_head; end; SL.Assign(Stemp); finally FreeAndNil(Stemp); end; end; function Tfrm_op_seae_custom_edi_zt.GetLengthword(var s: String; l: Integer;str:String): String; var i:Integer; b:Boolean; begin s:=''; if Length(str)'') and (Trim(old.Strings[i])<>#10) then NewStrs.Add(old.Strings[i]); end else begin mStr:=old.Strings[i]; while length(mStr)>Strlength do begin newStrs.Add(copy(mStr,1,Strlength)); system.Delete(mStr,1,Strlength); end; newStrs.Add(mStr); end; end; try for i:=0 to mCount-1 do begin if i1 then begin for i:=0 to frm_op_seae_edi_data.dxdbgrid1.SelectedCount-1 do begin frm_op_seae_edi_data.t_op_seae.GotoBookmark(pointer(frm_op_seae_edi_data.dxdbgrid1.selectedrows[i])); if not isEditrue(frm_op_seae_edi_data.t_op_seae) then exit; end; end else begin if not isEditrue(frm_op_seae_edi_data.t_op_seae) then exit; end; str:=Tstringlist.Create; try SenderCode:=trim(edit1.Text) ; ReciverCode:=trim(edit2.Text) ; if bsSkinRadioGroup1.ItemIndex=0 then strType:='9' else if bsSkinRadioGroup1.ItemIndex=1 then strType:='5' else if bsSkinRadioGroup1.ItemIndex=2 then strType:='6' else strType:='9'; str.Add('00:KMST:MANIFEST:'+trim(strType)+':'+ Edit3.text+':'+ReciverCode+':'+GetDatetime(datetimetostr(now),1)+#39); if frm_op_seae_edi_data.dxdbgrid1.SelectedCount>1 then begin for i:=0 to frm_op_seae_edi_data.dxdbgrid1.SelectedCount-1 do begin frm_op_seae_edi_data.t_op_seae.GotoBookmark(pointer(frm_op_seae_edi_data.dxdbgrid1.selectedrows[i])); Str.AddStrings(CreateEdiFile) end; end else begin Str.AddStrings(CreateEdiFile) end; I:=str.Count; str.Add('99:'+intToStr(i+1)+''''); SaveDialog1.FileName:=frm_op_seae_edi_data.t_op_seae.fieldbyname('主提单号').asstring; if SaveDialog1.Execute then begin str.SaveToFile(SaveDialog1.FileName+'.txt'); showmessage('文件生成成功!'); end else begin showmessage('文件生成失败!'); exit; end; finally FreeAndNil(Str); end; close; end; function Tfrm_op_seae_custom_edi_zt.isEditrue(DataSet:TDataSet): boolean; var cntrs:String; begin result:=true; { if trim(t_op_seae.fieldbyname('付费方式').asstring)='' then begin s:=s+' 付费方式'; end; if trim(t_op_seae.fieldbyname('发货人编号').asstring)='' then begin s:=s+' EDI业务状态'; end; if GetlineEdi(t_op_seae.fieldbyname('航线').asstring)='' then begin s:=s+' 航线代码'; end; if trim(t_op_seae.fieldbyname('开船日期').asstring)='' then begin s:=s+' 开船日期'; end; if trim(t_op_seae.fieldbyname('货物描述').asstring)='' then begin s:=s+' 货物描述'; end; if trim(t_op_seae.fieldbyname('唛头').asstring)='' then begin s:=s+' 唛头'; end; if t_op_seae.fieldbyname('件数').asinteger=0 then begin s:=s+' 件数'; end; if trim(t_op_seae.fieldbyname('货物标识').asstring)='' then begin s:=s+' 货物标识'; end; if Trim(s)<>'' then begin MessageDlg(s+#13#10+'不能为空',mtWarning,[mbOk],0); result:=false; end; } end; function Tfrm_op_seae_custom_edi_zt.CreateEdiFile:TStrings; var str,sl1:Tstringlist; sl:TStrings; i,j,Count,l,M:integer; strsql,strRmain,strtemp,S:string; rs,aQuery2:Tadoquery; wide_str:widestring; k:integer; strType:string; strDatetime:string; SenderCode,ReciverCode:string; function GetRemarksString:String; var TempStr:TStrings; begin TempStr:=TStringList.Create; try TempStr.Text:=GetFieldName('EDI备注'); Result:='71:'; Result:=Result+FormatListString(TempStr,10,70)+''''; finally FreeAndNil(TempStr); end; end; function GetShipperString:String; var TempStr:TStringlist; aQuery:TADOQuery; M,L:integer; S:String; begin TempStr:=TStringList.Create; aQuery:=CreateAdoQuery; try if bsSkinCheckRadioBox2.Checked then begin with aQuery do begin Close; SQL.Clear; SQL.Add('select 发货人代码 from t_op_seae_assistant where 编号='''+frm_op_seae_edi_data.t_op_seae.fieldbyname('编号').AsString+''''); open; if not IsEmpty then TempStr.Text:=fieldbyname('发货人代码').AsString else TempStr.Text:=frm_op_seae_edi_data.t_op_seae.fieldbyname('发货人代码').AsString; end; end else TempStr.Text:=frm_op_seae_edi_data.t_op_seae.fieldbyname('发货人代码').AsString; GetLengthTString(TempStr,70); if Tempstr.Count<=9 then begin Result:='16:'; Result:=Result+edit1.text+':'+edit3.Text+':'; Result:=Result+FormatListString(TempStr,9,70)+''''; end else begin M:=1; for L:=0 to Tempstr.Count-1 do begin if M<=9 then begin if M=1 then begin s:='16:'+edit1.text+':'+edit3.Text+':'+FormatEdiString(Tempstr.Strings[L],0)+':'; end else begin if M=9 then s:=s+FormatEdiString(Tempstr.Strings[L],0) else s:=s+FormatEdiString(Tempstr.Strings[L],0)+':'; end; end else begin S:=S+''''; Str.Add(S); M:=1; s:='16:'+edit1.text+':'+edit3.Text+':'+FormatEdiString(Tempstr.Strings[L],0)+':'; end; M:=M+1; end; S:=S+''''; Str.Add(S); result:=''; end; finally FreeAndNil(TempStr); end; end; function GetConsigneString:String; var TempStr:TStringlist; aQuery:TADOQuery; M,L:integer; S:String; begin TempStr:=TStringList.Create; aQuery:=CreateAdoQuery; try if bsSkinCheckRadioBox2.Checked then begin with aQuery do begin Close; SQL.Clear; SQL.Add('select 收货人代码 from t_op_seae_assistant where 编号='''+frm_op_seae_edi_data.t_op_seae.fieldbyname('编号').AsString+''''); open; if not IsEmpty then TempStr.Text:=fieldbyname('收货人代码').AsString else TempStr.Text:=frm_op_seae_edi_data.t_op_seae.fieldbyname('收货人代码').AsString; end; end else TempStr.Text:=frm_op_seae_edi_data.t_op_seae.fieldbyname('收货人代码').AsString; GetLengthTString(TempStr,70); if Tempstr.Count<=9 then begin Result:='17:'; Result:=Result+'::'; Result:=Result+FormatListString(TempStr,9,70)+''''; end else begin M:=1; for L:=0 to Tempstr.Count-1 do begin if M<=9 then begin if M=1 then begin s:='17:::'+FormatEdiString(Tempstr.Strings[L],0)+':'; end else begin if M=9 then s:=s+FormatEdiString(Tempstr.Strings[L],0) else s:=s+FormatEdiString(Tempstr.Strings[L],0)+':'; end; end else begin S:=S+''''; Str.Add(S); M:=1; s:='17:::'+FormatEdiString(Tempstr.Strings[L],0)+':'; end; M:=M+1; end; S:=S+''''; Str.Add(S); result:=''; end; finally FreeAndNil(TempStr); end; end; function GetNOTIFYString:String; var TempStr:TStringlist; aQuery:TADOQuery; M,L:integer; S:String; begin TempStr:=TStringList.Create; aQuery:=CreateAdoQuery; try if bsSkinCheckRadioBox2.Checked then begin with aQuery do begin Close; SQL.Clear; SQL.Add('select 通知人代码 from t_op_seae_assistant where 编号='''+frm_op_seae_edi_data.t_op_seae.fieldbyname('编号').AsString+''''); open; if not IsEmpty then TempStr.Text:=fieldbyname('通知人代码').AsString else TempStr.Text:=frm_op_seae_edi_data.t_op_seae.fieldbyname('通知人代码').AsString; end; end else TempStr.Text:=frm_op_seae_edi_data.t_op_seae.fieldbyname('通知人代码').AsString; GetLengthTString(TempStr,70); if Tempstr.Count<=9 then begin Result:='18::'; Result:=Result+':'; Result:=Result+FormatListString(TempStr,9,70)+''''; end else begin M:=1; for L:=0 to Tempstr.Count-1 do begin if M<=9 then begin if M=1 then begin s:='18:::'+FormatEdiString(Tempstr.Strings[L],0)+':'; end else begin if M=9 then s:=s+FormatEdiString(Tempstr.Strings[L],0) else s:=s+FormatEdiString(Tempstr.Strings[L],0)+':'; end; end else begin S:=S+''''; Str.Add(S); M:=1; s:='18:::'+FormatEdiString(Tempstr.Strings[L],0)+':'; end; M:=M+1; end; S:=S+''''; Str.Add(S); result:=''; end; finally FreeAndNil(TempStr); end; end; function GetDAgentString:String; var TempStr:TStringlist; aQuery:TADOQuery; M,L:integer; S,Agent:String; begin TempStr:=TStringList.Create; aQuery:=CreateAdoQuery; try TempStr.Text:=GetFieldName('代理内容'); GetLengthTString(TempStr,70); Agent:=GetFieldName('代理'); if Tempstr.Count<=9 then begin Result:='20:'+GetclientEdi(Agent)+':'; Result:=Result+Agent+':'; Result:=Result+FormatListString(TempStr,9,70)+''''; end else begin M:=1; for L:=0 to Tempstr.Count-1 do begin if M<=9 then begin if M=1 then begin S:='20:'+GetclientEdi(Agent)+':'; S:=S+Agent+':'; s:=S+FormatEdiString(Tempstr.Strings[L],0)+':'; end else begin if M=9 then s:=s+FormatEdiString(Tempstr.Strings[L],0) else s:=s+FormatEdiString(Tempstr.Strings[L],0)+':'; end; end else begin S:=S+''''; Str.Add(S); M:=1; S:='20:'+GetclientEdi(Agent)+':'; S:=S+Agent+':'; s:=S+FormatEdiString(Tempstr.Strings[L],0)+':'; end; M:=M+1; end; S:=S+''''; Str.Add(S); result:=''; end; finally FreeAndNil(TempStr); end; end; begin SenderCode:=trim(edit1.Text) ; ReciverCode:=trim(edit2.Text) ; str:=Tstringlist.Create; sl:=Tstringlist.Create; sl1:=Tstringlist.Create; if bsSkinCheckRadioBox2.Checked then begin aQuery2:=CreateAdoQuery; with aQuery2 do begin Close; SQL.Clear; SQL.Add('select * from t_op_seae_assistant where 编号='''+frm_op_seae_edi_data.t_op_seae.fieldbyname('编号').AsString+''''); open; end; end; { if bsSkinCheckRadioBox1.Checked then if not frm_op_seae.t_op_ams.Active then frm_op_seae.t_op_ams.open; } str.Clear; Count:=0; if frm_data_share.t_code_free.locate('代码',frm_op_seae_edi_data.t_op_seae.fieldbyname('付费方式').asstring,[]) then begin strtemp:=copy(frm_data_share.t_code_free.fieldbyname('代码').asstring,1,1); end else begin strtemp:='P'; end; str.Add('12:' + trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('主提单号').asstring) +':::' + trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('船名').asstring) +':' + trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('航次').asstring)+':' + trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('运输条款').asstring) +'::' + FormatDateTime('YYYYMMDD',frm_op_seae_edi_data.t_op_seae.fieldbyname('开船日期').asdatetime)+':' + trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('运输条款').asstring) +':'+strtemp+':' +':' // + GetDatetime(trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('签单日期').asstring),0)+':' +'CCL:CCL:' +'3'+#39); //船舶经营人 str.Add ('13:'+trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('装港代码').asstring)+':' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('装货港').asstring)+':' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('装港代码').asstring)+':' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('装货港').asstring)+':' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('卸货代码').asstring) +':' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('卸货港').asstring) +':'+trim(GetFieldName('交货代码')) +':'+trim(GetFieldName('交货地点')) +':::' { +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('交货代码').asstring) +':' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('交货地点').asstring) +':::' //交货地点 } +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('目的代码').asstring) +':' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('目的地').asstring) +':'+GetPortEdiID(frm_op_seae_edi_data.t_op_seae.fieldbyname('签单地点').asstring) +':'+trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('签单地点').asstring)+#39); str.add('14:'+GetlineEdi(trim(GetFieldName('航线')))+':'+edit9.text+':'+edit8.text+':'+edit10.text+':'+GetclientEdi(trim(trim(GetFieldName('场站')))) +':ZLH:F:'+trim(GetFieldName('发货人编号')) +':3:'+edit1.text +':'+edit3.text +':'+GetFieldName('分提单号') +#39); strtemp:=GetShipperString; if strtemp<>'' then Str.Add(strtemp); strtemp:=GetConsigneString; if strtemp<>'' then Str.Add(strtemp); strtemp:=GetNOTIFYString; if strtemp<>'' then Str.Add(strtemp); strtemp:=GetDAgentString; if strtemp<>'' then Str.Add(strtemp); str.add('23:' +':' //2 发货人代码 +':'+ Changestr(frm_op_seae_edi_data.t_op_seae.fieldbyname('发货人名称').AsString) //3发货人名称 +':'+ Changestr(frm_op_seae_edi_data.t_op_seae.fieldbyname('发货人地址1').AsString) //4 发货人详细地址 +':'+ Changestr(frm_op_seae_edi_data.t_op_seae.fieldbyname('发货人电话').AsString) // +#39); str.add('24:' +':' //2 发货人代码 +':'+ Changestr(frm_op_seae_edi_data.t_op_seae.fieldbyname('收货人名称').AsString) //3收货人名称 +':'+ Changestr(frm_op_seae_edi_data.t_op_seae.fieldbyname('收货人地址1').AsString) //4 收货人详细地址 +':'+ Changestr(frm_op_seae_edi_data.t_op_seae.fieldbyname('收货人电话').AsString) // +#39); str.add('25:' +':' //2 通知人代码 +':'+ Changestr(frm_op_seae_edi_data.t_op_seae.fieldbyname('通知人名称').AsString) //3通知人名称 +':'+ Changestr(frm_op_seae_edi_data.t_op_seae.fieldbyname('通知人地址1').AsString) //4 通知人详细地址 +':'+ Changestr(frm_op_seae_edi_data.t_op_seae.fieldbyname('通知人电话').AsString) // +#39); strsql:='select 编号,代码,sum(数量) as 数量 from t_op_ctn_edi group by 编号,代码 having 编号=' +#39+frm_op_seae_edi_data.t_op_seae.fieldbyname('编号').asstring+#39; try rs:=Tadoquery.Create(application); rs.Connection := frm_main.db; rs.sql.clear; rs.sql.add(strsql); rs.Open; rs.First; while not rs.Eof do begin str.Add ('31:'+Trim(GetCntrEdi(rs.fieldbyname('代码').asstring))+':'+ trim(rs.fieldbyname('数量').asstring)+':'+ 'F'); Count:=Count+1; rs.Next; end; finally freeandnil(rs); end; str.Add ('41:1::'+trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('件数').asstring) +':' +trim(GetpkgsEdi(frm_op_seae_edi_data.t_op_seae.fieldbyname('包装').asstring))+':' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('包装').asstring) +':' //第一层包装说明 +trim(floattostr(frm_op_seae_edi_data.t_op_seae.fieldbyname('重量').asfloat))+':' //第一层包装说明 +trim(floattostr(frm_op_seae_edi_data.t_op_seae.fieldbyname('尺码').asfloat)) +':'+GetFieldName('运输方式') +#39); IF trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('货物标识').asstring)='R' THEN BEGIN str.Add ('43:' // 危险品、冷冻 +':' +':' +':' +':' +':' +':' +':' +':' +'C:' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('最低温度').asstring) +':' +trim(frm_op_seae_edi_data.t_op_seae.fieldbyname('最高温度').asstring) +':' +'::' +#39); END; if bsSkinCheckRadioBox2.Checked then sl1.Text:=aQuery2.fieldbyname('唛头').AsString else sl1.Text:=frm_op_seae_edi_data.t_op_seae.fieldbyname('唛头').AsString; GetLengthTString(sl1,70); sl.text:=''; for L:=0 to sl1.Count-1 do begin if Trim(sl1.Strings[L])<>'' then sl.Add(sl1.Strings[L]); end; M:=1; for L:=0 to sl.Count-1 do begin if M<=10 then begin if M=1 then begin s:='44:1:'+FormatEdiString(sl.Strings[L],0)+':'; end else begin if M=10 then s:=s+FormatEdiString(sl.Strings[L],0) else s:=s+FormatEdiString(sl.Strings[L],0)+':'; end; end else begin S:=S+''''; Str.Add(S); M:=1; s:='44:1:'+FormatEdiString(sl.Strings[L],0)+':'; end; M:=M+1; end; S:=S+''''; Str.Add(S); if bsSkinCheckRadioBox2.Checked then sl1.Text:=aQuery2.fieldbyname('货物描述').AsString else sl1.Text:=frm_op_seae_edi_data.t_op_seae.fieldbyname('货物描述').AsString; GetLengthTString(sl1,70); sl.text:=''; for L:=0 to sl1.Count-1 do begin if Trim(sl1.Strings[L])<>'' then sl.Add(sl1.Strings[L]); end; M:=1; for L:=0 to sl.Count-1 do begin if M<=5 then begin if M=1 then begin s:='47:1:'+FormatEdiString(sl.Strings[L],0)+':'; end else begin if M=5 then s:=s+FormatEdiString(sl.Strings[L],0) else s:=s+FormatEdiString(sl.Strings[L],0)+':'; end; end else begin S:=S+''''; Str.Add(S); M:=1; s:='47:1:'+FormatEdiString(sl.Strings[L],0)+':'; end; M:=M+1; end; S:=S+''''; Str.Add(S); // Str.Add(GetCARGODESCRIPTIONString); Count:=Count+11; strRmain:=''; strsql:='select * from t_op_ctn_edi where 编号=' +#39+frm_op_seae_edi_data.t_op_seae.fieldbyname('编号').asstring+#39; try rs:=Tadoquery.Create(application); rs.Connection := frm_main.db; rs.sql.clear; rs.sql.add(strsql); rs.Open; rs.First; if not rs.IsEmpty then begin if rs.FieldByName('箱号').Asstring<>'' then begin rs.First; while not rs.Eof do begin str.Add ('51:1:'+trim(rs.fieldbyname('箱号').asstring)+':'+trim(rs.fieldbyname('封号').asstring)+':'+Trim(GetCntrEdi(rs.fieldbyname('代码').asstring))+':F:' +trim(IntToStr(rs.fieldbyname('件数').AsInteger))+':'+GetpkgsEdi(rs.fieldbyname('包装').asstring)+':'+trim(rs.fieldbyname('包装').asstring)+':'+trim(FloatToStr(rs.fieldbyname('重量').AsFloat)) +':'+GetCntrKGS(rs.fieldbyname('代码').asstring)+':'+trim(floattostr(rs.fieldbyname('尺码').asfloat))+''''); rs.Next; end; end; end; finally freeandnil(rs); end; if trim(GetFieldName('EDI备注'))<>'' then Str.Add(GetRemarksString); if bsSkinCheckRadioBox2.Checked then begin FreeAndNil(aQuery2); end; frm_op_seae_edi_data.t_op_seae.Edit; frm_op_seae_edi_data.t_op_seae.FieldByName('EDI状态').AsString:='已发送'; frm_op_seae_edi_data.t_op_seae.Post; Result:=str; end; function Tfrm_op_seae_custom_edi_zt.GetCntrEdi(cntrsize: String):String; var aQuery:TADOQuery; begin aQuery:=CreateAdoQuery; try with aQuery do begin Close;SQL.Clear; SQL.Add('Select Edi代码 from t_code_ctn where 代码='''+cntrsize+''''); Open; if IsEmpty then Result:='' else Result:=FieldByName('Edi代码').AsString; end; finally FreeAndNil(aQuery); end; end; function Tfrm_op_seae_custom_edi_zt.GetCntrKGS(cntrsize: String):String; var aQuery:TADOQuery; begin aQuery:=CreateAdoQuery; try with aQuery do begin Close;SQL.Clear; SQL.Add('Select 箱皮重 from t_code_ctn where 代码='''+cntrsize+''''); Open; if IsEmpty then Result:='' else Result:=floattostr(FieldByName('箱皮重').AsFloat*10); end; finally FreeAndNil(aQuery); end; end; function Tfrm_op_seae_custom_edi_zt.GetpkgsEdi(pkgs: String): String; var aQuery:TADOQuery; begin aQuery:=CreateAdoQuery; try with aQuery do begin Close;SQL.Clear; SQL.Add('Select Edi代码 from t_code_package where 代码='''+pkgs+''''); Open; if IsEmpty then Result:='' else Result:=FieldByName('Edi代码').AsString; end; finally FreeAndNil(aQuery); end; end; function Tfrm_op_seae_custom_edi_zt.GetlineEdi(aline: String): String; var aQuery:TADOQuery; begin aQuery:=CreateAdoQuery; try with aQuery do begin Close;SQL.Clear; SQL.Add('Select Edi代码 from t_code_trade where 航线='''+aline+''''); Open; if IsEmpty then Result:='' else Result:=FieldByName('Edi代码').AsString; end; finally FreeAndNil(aQuery); end; end; function Tfrm_op_seae_custom_edi_zt.GetclientEdi(aline: String): String; var aQuery:TADOQuery; begin aQuery:=CreateAdoQuery; try with aQuery do begin Close;SQL.Clear; SQL.Add('Select Edi代码 from t_crm_client where 客户简称='''+aline+''''); Open; if IsEmpty then Result:='' else Result:=FieldByName('Edi代码').AsString; end; finally FreeAndNil(aQuery); end; end; procedure Tfrm_op_seae_custom_edi_zt.bsSkinButton3Click(Sender: TObject); var IdFTP1:TIdFTP; str:widestring; str_file:widestring; ftpar,ftpname,ftppass,ftppath,ScriptPath:String; StrL:TStrings; i:integer; SenderCode,ReciverCode,strType:String; begin if frm_op_seae_edi_data.dxdbgrid1.SelectedCount>1 then begin for i:=0 to frm_op_seae_edi_data.dxdbgrid1.SelectedCount-1 do begin frm_op_seae_edi_data.t_op_seae.GotoBookmark(pointer(frm_op_seae_edi_data.dxdbgrid1.selectedrows[i])); if not isEditrue(frm_op_seae_edi_data.t_op_seae) then exit; end; end else begin if not isEditrue(frm_op_seae_edi_data.t_op_seae) then exit; end; ScriptPath:=ExtractFilePath(ParamStr(0))+'EDIFILE\'; if not DirectoryExists(ScriptPath) then CreateDir(ScriptPath); ftpar:=Trim(edit4.Text); if ftpar='' then begin MessageDlg('请设置FTP地址!',mtWarning,[mbOk],0); exit; end; ftpname:=Trim(edit6.Text); if ftpar='' then begin MessageDlg('请设置FTP用户名!',mtWarning,[mbOk],0); exit; end; ftppass:=Trim(edit7.Text); if ftpar='' then begin MessageDlg('请设置FTP密码!',mtWarning,[mbOk],0); exit; end; ftppath:=Trim(edit5.Text); str:=ScriptPath +frm_op_seae_edi_data.t_op_seae.fieldbyname('主提单号').asstring +FormatDateTime('yyyy',now) +FormatDateTime('mm',now) +FormatDateTime('dd',now) +FormatDateTime('hh',now) +FormatDateTime('nn',now)+'.txt'; str_file:=frm_op_seae_edi_data.t_op_seae.fieldbyname('主提单号').asstring +FormatDateTime('yyyy',now) +FormatDateTime('mm',now) +FormatDateTime('dd',now) +FormatDateTime('hh',now) +FormatDateTime('nn',now)+'.txt'; strL:=Tstringlist.Create; try SenderCode:=trim(edit1.Text) ; ReciverCode:=trim(edit2.Text) ; if bsSkinRadioGroup1.ItemIndex=0 then strType:='9' else if bsSkinRadioGroup1.ItemIndex=1 then strType:='2' else if bsSkinRadioGroup1.ItemIndex=2 then strType:='3' else if bsSkinRadioGroup1.ItemIndex=3 then strType:='4' else strType:='9'; strL.Add('00:KMST:MANIFEST:'+trim(strType)+':'+ SenderCode+':'+ReciverCode+':'+formatdatetime('YYMMDDHHMM',now)+#39); if frm_op_seae_edi_data.dxdbgrid1.SelectedCount>1 then begin for i:=0 to frm_op_seae_edi_data.dxdbgrid1.SelectedCount-1 do begin frm_op_seae_edi_data.t_op_seae.GotoBookmark(pointer(frm_op_seae_edi_data.dxdbgrid1.selectedrows[i])); // if Trim(frm_op_seae.t_op_seae.fieldbyname('装运方式').asstring)='整箱' then StrL.AddStrings(CreateEdiFile) // else if Pos('主票',(frm_op_seae.t_op_seae.fieldbyname('装运方式').asstring))>0 then // StrL:=CreateZHUEdiFile // else begin // Exit; // end; end; end else begin // if Trim(frm_op_seae.t_op_seae.fieldbyname('装运方式').asstring)='整箱' then StrL.AddStrings(CreateEdiFile) // else if Pos('主票',(frm_op_seae.t_op_seae.fieldbyname('装运方式').asstring))>0 then // StrL:=CreateZHUEdiFile // else begin // Exit; // end; end; I:=strL.Count; strL.Add('99:'+intToStr(i+1)+''''); { for i:=0 to StrL.Count-1 do begin if IsZhongwen(StrL[i]) then begin MessageDlg('此票业务有中文字符或TAB等不规范字符,请去除字符后重试!',mtWarning,[mbYes],0); exit; end; end; } strL.SaveToFile(str); finally FreeAndNil(StrL) end; try IdFTP1:=TIdFTP.Create(application); with idftp1 do begin Username:=ftpname; Password:=ftppass; Host:=ftpar; Connect; end; idftp1.ChangeDir(ftppath); idftp1.TransferType:=ftBinary; idftp1.Put(str,str_file); idftp1.Disconnect; showmessage('文件上传成功!'); except deletefile(str); showmessage('文件上传错误!'); end; idftp1.Free; end; procedure Tfrm_op_seae_custom_edi_zt.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var inifile1:Tinifile; begin inifile1:=Tinifile.Create(ExtractFilePath(application.ExeName)+'main.ini'); inifile1.WriteString('ZTCUSTOMEDI','SEND',edit1.text); inifile1.WriteString('ZTCUSTOMEDI','RECIEVE',edit2.text); inifile1.WriteString('ZTCUSTOMEDI','SENDNAME',edit3.text); inifile1.WriteString('ZTCUSTOMEDI','FTPSERVER',edit4.text); inifile1.WriteString('ZTCUSTOMEDI','FTPPATH',edit5.text); inifile1.WriteString('ZTCUSTOMEDI','FTPNAME',edit6.text); inifile1.WriteString('ZTCUSTOMEDI','FTPPASS',edit7.text); inifile1.WriteString('ZTCUSTOMEDI','RECIEVEOP',edit8.text); inifile1.WriteString('ZTCUSTOMEDI','RECIEVESALE',edit9.text); inifile1.WriteString('ZTCUSTOMEDI','RECIEVEDEPT',edit10.text); inifile1.free; end; procedure Tfrm_op_seae_custom_edi_zt.bsSkinButton4Click(Sender: TObject); begin if frm_op_seae_custom_edi_zt.Height=301 then frm_op_seae_custom_edi_zt.Height:=162 else frm_op_seae_custom_edi_zt.Height:=301; end; function Tfrm_op_seae_custom_edi_zt.GetcustEdi(cust: String): String; var aQuery:TADOQuery; begin aQuery:=CreateAdoQuery; try with aQuery do begin Close;SQL.CLEAR; SQL.Add('Select EDI代码 from t_crm_client where 客户简称='''+Cust+''''); Open; if not IsEmpty then result:=fieldbyname('EDI代码').AsString; end; finally FreeAndNil(aQuery); end; end; end.