// скрипт для импорта прайс-листа Роста. используется процедурой Loader.LoadFromFileWithScript // на вход подается открытый Dataset, который нужно заполнить в соответствии с полями: { add('code',ftstring,50); add('code_goods',ftstring,50); add('name_goods',ftstring,300); add('code_producer',ftstring,50); add('name_producer',ftstring,300); add('code_country',ftstring,50); add('name_country',ftstring,300); add('price',ftstring,50); add('price_without_nds',ftstring,50); add('price_first',ftstring,50); add('price_first_with_nds',ftstring,50); add('nds',ftstring,50); add('shelf_life',ftstring,50); add('ex_rate',ftstring,50); add('price_rtl',ftstring,50); add('amount',ftstring,50); add('id_valuta',ftstring,50); add('min_amount',ftstring,50); add('units',ftstring,50); add('place_cap',ftstring,50); add('isliveneed',ftstring,50); add('price_registry',ftstring,50); add('barcode',ftstring,50); } // если вернуть закрытый датасет, то операция не будет продолжена, и предполагается, что скрипт самостоятельно разобрался с прайсом. // для самостоятельности скрипту передается ID - идентификатор прайса, который сейчас заливается. // но в целом задача скрипта - транспортировать данные из файла Filename в Dataset var // предопределенные скриптом переменные Filename :string; // Файл импорта SelfLoader :TPriceLoader; // вызывающий объект // собственные объекты var Table :tclientdataset; DBF :TDBF; tmpDir :string; tmpfile :string; Mappings :string; strval :string; i :integer; begin table := tclientdataset.create(selfscript); try tmpdir := includetrailingpathdelimiter(gettempdir+'tmpscriptimport-'+formatdatetime('dd-mm-yyyy-hh-nn-ss',now)); forcedirectories(tmpdir); tmpfile := tmpdir + extractfilename(FileName); copyfile(filename,tmpfile); if uppercase(extractfileext(tmpfile))='.ZIP' then begin tmpfile := tmpdir + ZipExtractAll(tmpfile,tmpdir); end; try if uppercase(extractfileext(tmpfile))='.DBF' then begin DBF := TDBF.create(selfscript); try CheckDBFCP(tmpfile,$26); dbf.languageid := $26; //$26; $65 // - 866; $C9; - 1251 DBF.tablename := tmpfile; createhinti(DBF.languagestr+':'+inttostr(dbf.codepage)); dbf.open; createhinti(DBF.languagestr+':'+inttostr(dbf.codepage)); readdataset(table,dbf); finally DBF.free; DBF := nil; end; end else if uppercase(extractfileext(tmpfile))='.XLS' then ReadXLS(table,tmpfile); //,UseOLE :Boolean = false; UseFirstRowAsFieldNames :Boolean = true; MissRows :integer = 0;UseOLDMethodForOLE :boolean = false) if not table.active or table.isempty then exit; if uppercase(table.fields[0].fieldname)='TITEM_CODE' then begin Mappings := 'PI_ITEM_CODE=CODE_GOODS;'+ 'TITEM_CODE=CODE;'+ 'PI_NAME_IN_PRICE=NAME_GOODS;'+ 'PRODUCER=NAME_PRODUCER;'+ 'EXPDATE=SHELF_LIFE;'+ //'COUNTRY=NAME_COUNTRY;'+ 'ProducerPrice=PRICE_FIRST;'+ 'KI_PRICERUB=PRICE_REGISTRY;'+ 'PRICE1=PRICE;'+ 'ON_STOCK=AMOUNT;' ; SElfLoader.InitFieldsToDefault; SelfLoader.InitImportCDS; TableAppend(selfloader.importcds,table,false,Mappings); selfloader.importcds.first; while not selfloader.importcds.eof do begin strval := selfloader.importcds.fieldbyname('name_producer').asstring; i := pos(' / ',strval); if i<>0 then begin selfloader.importcds.edit; selfloader.importcds.fieldbyname('name_producer').asstring := trim(copy(strval,1,i-1)); selfloader.importcds.fieldbyname('name_country').asstring := trim(copy(strval,i+3,length(strval))); selfloader.importcds.post; end; selfloader.importcds.next; end; end else if uppercase(table.fields[0].fieldname)='CODEPST' then begin Mappings := 'CODEPST=CODE_GOODS;'+ 'TOVAR=NAME_GOODS;'+ 'FACTORY=NAME_PRODUCER;'+ //'COUNTRY=NAME_COUNTRY;'+ 'DATEV=SHELF_LIFE;'+ 'PRICE=PRICE;'; //'QUANTITY=AMOUNT;'+ //'MINZAKAZ=MIN_AMOUNT;'; SElfLoader.InitFieldsToDefault; SelfLoader.InitImportCDS; TableAppend(selfloader.importcds,table,false,Mappings); //dataset.close; // чтобы не продолжился импорт end else begin Mappings := 'ID=CODE_GOODS;'+ //'PART=CODE;'+ 'NAME=NAME_GOODS;'+ 'PRODUCER=NAME_PRODUCER;'+ 'COUNTRY=NAME_COUNTRY;'+ 'GDATE=SHELF_LIFE;'+ 'PRICE=PRICE;'+ 'QUANTITY=AMOUNT;'+ 'MINZAKAZ=MIN_AMOUNT;'; SElfLoader.InitFieldsToDefault; SelfLoader.InitImportCDS; TableAppend(selfloader.importcds,table,false,Mappings); //dataset.close; // чтобы не продолжился импорт end; finally table.close; cleardir(tmpdir); deletedir(tmpdir); end; finally //mappings.free; table.free end; end.