// скрипт для импорта прайс-листа Гладилин. используется процедурой 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 :TTable; tmpDir :string; tmpfile :string; Mappings :string; begin table := ttable.create(selfscript); try tmpdir := includetrailingpathdelimiter(gettempdir+'tmpscriptimport-'+formatdatetime('dd-mm-yyyy-hh-nn-ss',now)); forcedirectories(tmpdir); tmpfile := tmpdir + 'tmpprice.dbf'; copyfile(filename,tmpfile); try table.tablename := tmpfile; table.tabletype := ttFoxpro; //SetTableLangDriver(table,'db866ru0'); //SetTableLangDriver(Table,'DBWINUS0'); table.open; //showmessage('1'); { Mappings := 'CODEPST=CODE_GOODS;'+ 'NAME=NAME_GOODS;'+ 'FIRM=NAME_PRODUCER;'+ 'CNTR=NAME_COUNTRY;'+ 'PRICE2=PRICE;'+ 'PRICEGR=PRICE_REGISTRY;'+ //'IZGPR=PRICE_FIRST;'+ 'QNT=AMOUNT;'+ //'GDATE=SHELF_LIFE;'+ ошибка при приеме 22.02.31. либо обрезать либо обходить 'EAN13=BARCODE;'+ 'QNTPACK=PLACE_CAP;'+ 'NDS=NDS;'+ 'GNVLS=ISLIVENEED'; } SElfLoader.InitFieldsToDefault; SelfLoader.InitImportCDS; table.first; while not table.eof do begin selfloader.importcds.append; selfloader.importcds.fieldbyname('code_goods').asstring := table.fieldbyname('codepst').asstring; selfloader.importcds.fieldbyname('name_goods').asstring := table.fieldbyname('name').asstring; selfloader.importcds.fieldbyname('name_producer').asstring := table.fieldbyname('firm').asstring; selfloader.importcds.fieldbyname('name_country').asstring := table.fieldbyname('cntr').asstring; selfloader.importcds.fieldbyname('price').asstring := table.fieldbyname('price2').asstring; if not table.fieldbyname('pricegr').isnull then selfloader.importcds.fieldbyname('price_registry').asstring := table.fieldbyname('pricegr').asstring; selfloader.importcds.fieldbyname('amount').asstring := table.fieldbyname('qnt').asstring; selfloader.importcds.fieldbyname('barcode').asstring := table.fieldbyname('ean13').asstring; selfloader.importcds.fieldbyname('place_cap').asstring := table.fieldbyname('qntpack').asstring; selfloader.importcds.fieldbyname('nds').asstring := table.fieldbyname('nds').asstring; selfloader.importcds.fieldbyname('isliveneed').asstring := table.fieldbyname('gnvls').asstring; try selfloader.importcds.fieldbyname('shelf_life').asstring := table.fieldbyname('gdate').asstring; except end; table.next; end; //TableAppend(selfloader.importcds,table,false,Mappings); //dataset.close; // чтобы не продолжился импорт finally table.close; cleardir(tmpdir); deletedir(tmpdir); end; finally //mappings.free; table.free end; end.