// скрипт для импорта прайс-листа. используется процедурой 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; cds :tclientdataset; missstrings:integer; isfound :boolean; i :integer; begin table := ttable.create(selfscript); try tmpdir := includetrailingpathdelimiter(gettempdir+'tmpscriptimport-'+formatdatetime('dd-mm-yyyy-hh-nn-ss',now)); forcedirectories(tmpdir); try begin // Новый заказ //( Мк Компани ООО Архангельск ; Основной ; 20бд ; Склад ) // Код Наименование Производитель Тип товара Кол-во Цена Сумма cds := tclientdataset.create(selfscript); readxls(cds, filename,false,false,-1); missstrings := 0; cds.first; isFound := false; while not cds.eof do begin for i := 0 to cds.fieldcount-1 do if (cds.fields[i].asstring='Наименование') then begin isfound := true; break; end; if not isfound then begin inc(MissStrings); cds.next; end else break end; if missstrings>= cds.recordcount then RaiseException('Не найдены нужные поля в таблице'); // считаем, сколько строк пропустить readxls(cds, filename,false,true,MissStrings); Mappings := 'Код=CODE_GOODS;'+ 'Наименование=NAME_GOODS;'+ 'Производитель=NAME_PRODUCER;'+ //'COUNTRY=NAME_COUNTRY;'+ 'Кол_во=AMOUNT;'+ 'Цена=PRICE;'; //+ //'ЖНВЛС=ISLIVENEED;'+ //'Цена изготовителя_ руб=PRICE_FIRST;'; SElfLoader.InitFieldsToDefault; SelfLoader.InitImportCDS; TableAppend(selfloader.importcds,cds,false,Mappings); end; finally cleardir(tmpdir); deletedir(tmpdir); end; finally //mappings.free; table.free end; end.