// скрипт для импорта прайс-листа Фармцентр. используется процедурой 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 const //unpackcmd =' "c:\program files\winrar\unrar.exe" e -y "%s" "%s"'; unpackcmd =' "c:\program files\7-zip\7z.exe" e -y "%s" -o"%s"'; var // предопределенные скриптом переменные Filename :string; // Файл импорта SelfLoader :TPriceLoader; // вызывающий объект // собственные объекты var Table :tclientdataset; tmpDir :string; tmpfile :string; Mappings :string; strval :string; 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 := ZipExtractAll(tmpfile,tmpdir); tmpfile := tmpdir + tmpfile; end else if uppercase(Extractfileext(tmpfile)) = '.RAR' then begin FileExecuteWait(format(unpackcmd,[tmpfile,tmpdir]), esNormal); tmpfile := tmpdir + 'прайс.xls'; end; try if not readxls(table,tmpfile) then RaiseException('Не могу прочесть файл: '+tmpfile); table.open; Mappings := 'ID_GOODS=CODE_GOODS;'+ 'Наименован=NAME_GOODS;'+ 'Производит=NAME_PRODUCER;'+ 'Страна_про=NAME_COUNTRY;'+ 'Код_произв=CODE_PRODUCER;'+ 'Прод_Цена=PRICE;'+ //'AMOUNT=AMOUNT;'+ //'REESTR=PRICE_REGISTRY;'+ //'PRICEPR=PRICE_FIRST;'+ 'Срок_хран_=SHELF_LIFE;'+ //'EAN13=BARCODE;'+ //'QNTPACK=PLACE_CAP;'+ //'NDS=NDS;'+ 'GNVLS=ISLIVENEED'; SElfLoader.InitFieldsToDefault; SelfLoader.InitImportCDS; TableAppend(selfloader.importcds,table,false,Mappings); //dataset.close; // чтобы не продолжился импорт finally table.close; cleardir(tmpdir); deletedir(tmpdir); end; finally //mappings.free; table.free end; end.