// скрипт для импорта прайс-листа. используется процедурой 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 MissStrings :integer; var // предопределенные скриптом переменные Filename :string; // Файл импорта SelfLoader :TPriceLoader; // вызывающий объект // собственные объекты var tmpDir :string; tmpfile :string; Mappings :string; dt :tdatetime; table :ttable; AdoTable :TAdoTable; begin try tmpdir := includetrailingpathdelimiter(gettempdir+'tmpscriptimport-'+formatdatetime('dd-mm-yyyy-hh-nn-ss',now)); forcedirectories(tmpdir); tmpfile := tmpdir + extractfilename(FileName); copyfile(filename,tmpfile); try if uppercase(extractfileext(tmpfile))='.ZIP' then begin tmpfile := tmpdir+ZipExtractAll(tmpfile,tmpdir); end; if uppercase(extractfileext(tmpfile))='.XLS' then begin selfloader.Field_Name_Goods := 'Наименование'; SelfLoader.Field_Code_Goods := 'Код'; SelfLoader.Field_Shelf_Life := 'Годен до'; SelfLoader.Field_Name_Producer := 'Производитель'; SElfLoader.Field_place_cap := 'Упаковка'; readxls(selfloader.importcds, tmpfile,false,false,0); selfloader.importcds.first; dt := strtodateprotected(selfloader.importcds.fields[0].asstring); if dt<>0 then selfloader.dt_update := dt; missstrings := 0; selfloader.importcds.first; while not selfloader.importcds.eof and (selfloader.importcds.fields[2].asstring<>selfloader.field_name_goods) do begin inc(MissStrings); selfloader.importcds.next; end; //selfloader.importcds.savetofile('c:\temp\1.cds'); //createhinti(inttostr(missstrings)); // считаем, сколько строк пропустить readxls(selfloader.importcds, tmpfile,false,true,MissStrings); if selfloader.importcds.findfield('ЦЕНА')<>nil then selfloader.field_price := 'ЦЕНА' else selfloader.field_price := 'ЦЕНА,р'; end else begin // DBF-формат selfloader.Field_Name_Goods := 'uname'; SelfLoader.Field_Code_Goods := 'ID'; SelfLoader.Field_Shelf_Life := 'UUBF'; SelfLoader.Field_Name_Producer := 'UPROD'; SelfLoader.Field_Name_Country := 'ULAND'; SelfLoader.Field_units := 'U1PCK'; SElfLoader.Field_place_cap := 'upack'; SElfLoader.Field_Quantity := 'uwhq'; SElfLoader.Field_NDS := 'NDS'; SElfLoader.Field_barcode := 'EAN13'; SElfLoader.Field_isliveneed := 'jnsv'; SElfLoader.Field_Price_registry := 'upricz'; selfloader.field_price := 'UPRICE'; { table := ttable.create(selfscript); try table.tablename := tmpfile; table.open; selfloader.loadfromdataset(Table); finally table.free; end; } Adotable := tAdotable.create(selfscript); try AdoTable.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "'+extractfilepath(tmpfile)+'";Extended Properties="Driver={Microsoft dbase Driver};UID=;SourceDB=;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=RUSSIAN;Null=Yes;Deleted=Yes";Persist Security Info=False;Jet OLEDB:Engine Type=17;OLE DB Services=-2'; AdoTable.tableName := '['+extractfilename(tmpfile)+']'; //table.tablename := tmpfile; adotable.open; selfloader.loadfromdataset(AdoTable); finally Adotable.free; end; end; //selfloader.importcds.savetofile('c:\temp\1.cds'); finally cleardir(tmpdir); deletedir(tmpdir); end; finally end; end.