uses Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Messages, SysUtils, ToolWin, ImgList, dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid, StdCtrls, unMain,DB, IBQuery, IBDatabase, unDM, DBTables, cfdxUtils, Menus, System, Buttons, ExtCtrls, StdCtrls, cfSelectEdit, Math, gb_table, Grids, ClipBrd, DBGrids, unFrameCustomDict,ADODB,DB, cfWindows; function SafeString(ss: string):string; begin result:=StringReplace(ss, '''', '', 1); result:=StringReplace(result, '"', '', 1); result:=StringReplace(result, ':', '', 1); result:=StringReplace(result, '`', '', 1); end; procedure ExportOrder; var params,i: integer; q_work: TIBquery; trn: TIBTransaction; db: TIbDatabase; katalog,t,docnum,docdate,PHARM_SM_CODE, orig_code:String; con:TAdoConnection; query : TADOQuery; begin { вставить параметр - директорию выгрузки INSERT INTO PARAMS (PARENT_ID, PARAM_ID, PARAM_CAPTION, PARAM_TYPE, PARAM_VALUE, AUDIT_ID, IMAGEINDEX, STATUS, INSERTDT, SORTING, PARAM_TYPE_DATA, PACKET) VALUES (-30, 'EXPORT_DBF_PATH', 'Директория для выгрузки автозаказа', 10, 'C:\Standart-N\AutozakExport\', 958, -1, 0, '24-APR-2017 08:38:06.138', 3, 'InitialDir= Filter=*.txt Title=папка для выгрузки ofFileMustExist=0', 29217);} { триггер поправить ORDER_DATA и добавить колонки SIZG,SCOUNTRY,BARCODE select first 1 (select svalue from vals where id = w.IZG_ID), (select svalue from vals where id = w.COUNTRY_ID), w.BARCODE from WARES w where w.NAME_ID = (select first 1 id from vals where svalue = new.mgn_name order by id desc) order by id desc into new.sizg,new.scountry,new.barcode;} q_work:=TIBQuery.create(nil); db:=dm.FindComponent('db'); q_work.Database:=db; t:='select PARAM_VALUE from PARAMS where PARAM_ID=''EXPORT_DBF_PATH'''; q_work.Active:=false; q_work.SQL.Text:=t; q_work.Active:=true; if not q_work.Eof then katalog:=q_work.FieldByName('PARAM_VALUE').AsString else begin ShowMessage('Не указан путь выгрузки'); exit; end; if not DirectoryExists(katalog+'\') then CreateDir(katalog+'\'); con := TAdoConnection.Create(nil); with con do begin LoginPrompt := false; ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV;User ID=Admin;Password=;Data Source='+katalog; KeepConnection := true; Connected := true; end; query := TADOQuery.Create (nil); query.Connection := con; if not FileExists(katalog +'\'+ 'temp.dbf') then begin t:='CREATE TABLE temp (SNAME CHAR(250), SIZG CHAR(250),SCOUNTRY CHAR(250),BARCODE CHAR(250),QUANT NUMERIC(18,9), ORIG_CODE CHAR(250), PHARM_SM_CODE CHAR(20), PRICE_O NUMERIC(18,9), WARE_ID CHAR(250));'; query.SQL.Clear; query.SQL.Add (t); query.ExecSQL; end t:='select PARAM_VALUE from PARAMS where PARAM_ID=''PHARM_SM_CODE'''; q_work.Active:=false; q_work.SQL.Text:=t; q_work.Active:=true; if not q_work.Eof then PHARM_SM_CODE:=q_work.FieldByName('PARAM_VALUE').AsString; if PHARM_SM_CODE='' then PHARM_SM_CODE:='0'; t:='select od.mgn_name,od.sizg,od.scountry,od.barcode,iif(od.order_quant is not null,od.order_quant,od.optimal_order_quant) as quant ,coalesce(orig_code,'''') as orig_code, coalesce(price_o,0) as price_o, coalesce((select first 1 pharm_sm from wares w where w.barcode = od.barcode and pharm_sm is not null),0) as pharm_sm from ORDER_DATA od where iif(od.order_quant is not null,od.order_quant,od.optimal_order_quant) > 0;'; //frmmanagerxp2.Logit(t); q_work.Active:=false; q_work.SQL.Text:=t; q_work.Active:=true; while not q_work.Eof do begin //Добавлена проверка на значение выгрузки поля orig_code, выгружаем только числа orig_code := safestring(q_work.FieldByName('orig_code').AsString); if NOT TryStrToInt(orig_code,i) then begin orig_code := ''; //frmmanagerxp2.Logit('У товара "'+safestring(q_work.FieldByName('mgn_name').AsString)+'" не корректный orig_code "'+safestring(q_work.FieldByName('orig_code').AsString)+'" - который быз заменен на пустое значение'); end else orig_code := IntToStr(i); t:='insert into temp (SNAME,SIZG,SCOUNTRY,BARCODE,QUANT,ORIG_CODE,PHARM_SM_CODE,PRICE_O,WARE_ID) values ('''; t:=t+safestring(q_work.FieldByName('mgn_name').AsString)+''','''+safestring(q_work.FieldByName('sizg').AsString)+''','''+safestring(q_work.FieldByName('scountry').AsString)+''','''; t:=t+stringreplace(stringreplace(q_work.FieldByName('barcode').AsString,'''','',1),'"','',1)+''','+stringreplace(q_work.FieldByName('quant').AsString,',','.',1)+','''+orig_code+''','''+PHARM_SM_CODE+''','+stringreplace(q_work.FieldByName('price_o').AsString,',','.',1)+','''+safestring(q_work.FieldByName('pharm_sm').AsString)+''');' //frmmanagerxp2.Logit(t); query.SQL.Clear; query.SQL.Add (t); query.ExecSQL; q_work.Next; end query.Free; con.Free; if FileExists(katalog +'\Export_' + DateToStr(Now) + '.dbf') then DeleteFile(katalog +'\Export_' + DateToStr(Now) + '.dbf'); RenameFile(katalog +'\'+ 'temp.dbf',katalog +'\Export_' + DateToStr(Now) + '.dbf'); ShowMessage('Выгружено успешно!'+katalog +'\Export_' + DateToStr(Now) + '.dbf'); end; var t,barcode,inv_id: string; q_work,q_update,qParams: TIBquery; trn,trn_update : TIBTransaction db: TIbDatabase; begin ExportOrder; end;