// скрипт для импорта прайс-листа ИП Куклин. используется процедурой Loader.LoadFromFileWithScript { 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; tmpDir :string; tmpfile :string; Mappings :string; strval :string; missstrings :integer; i :integer; isFound :boolean; Field :TField; DBFTable :ttable; tempdir :string; tmpfile :string; begin table := tclientdataset.create(selfscript); //mappings := tstringlist.create; try if uppercase(extractfileext(filename))='.XLS' then begin readxls(table, filename,false,false,0); missstrings := 0; table.first; isFound := false; while not table.eof do begin for i := 0 to table.fieldcount-1 do if (table.fields[i].asstring='Наименование') then begin isfound := true; break; end; if not isfound then begin inc(MissStrings); table.next; end else break end; if missstrings>= table.recordcount then RaiseException('Не найдены нужные поля в таблице'); // считаем, сколько строк пропустить readxls(table, filename,false,true,MissStrings); //table.savetofile('c:\temp\1.cds'); SElfLoader.InitFieldsToDefault; SelfLoader.InitImportCDS; table.first; while not table.eof do begin if trim(table.fieldbyname('Наименование').asstring)>'' then begin selfloader.importcds.append; //selfloader.importcds.fieldbyname('CODE_GOODS').asstring := table.fieldbyname('Код препарата').asstring; //if pos(table.Fieldbyname('Наименование').asstring,table.Fieldbyname('Форма').asstring)=1 //then selfloader.importcds.fieldbyname('NAME_GOODS').asstring := table.Fieldbyname('Наименование').asstring; //else // selfloader.importcds.fieldbyname('NAME_GOODS').asstring := // table.Fieldbyname('Наименование').asstring + ' ' + // table.Fieldbyname('Форма').asstring; selfloader.importcds.fieldbyname('PRICE').asstring := table.fieldbyname('Цена').asstring; selfloader.importcds.fieldbyname('NAME_PRODUCER').asstring := table.fieldbyname('Производитель').asstring; { Field := table.findfield('СрокГодности'); if field=nil then Field := table.findfield('Годен до'); if field = nil then raiseexception('Поле "срок годности" не найдено ни в одном из вариантов написания'); selfloader.importcds.fieldbyname('SHELF_LIFE').asstring := Field.asstring; selfloader.importcds.fieldbyname('AMOUNT').asstring := table.fieldbyname('Остаток').asstring; Field := table.findfield('В кор'); if field=nil then Field := table.findfield('Шт в кор'); if field = nil then raiseexception('Поле "емкость места" не найдено ни в одном из вариантов написания'); selfloader.importcds.fieldbyname('place_cap').asstring := Field.asstring; } selfloader.importcds.post; end; table.next end; TableAppend(SelfLoader.ImportCDS,table,false,Mappings); //dataset.close; // чтобы не продолжился импорт end else begin dbftable := ttable.create(selfscript); tmpdir := includetrailingpathdelimiter(gettempdir+'tmpscriptimport-'+formatdatetime('dd-mm-yyyy-hh-nn-ss',now)); forcedirectories(tmpdir); tmpfile := tmpdir + 'tmpprice.dbf'; copyfile(filename,tmpfile); try DBFtable.tablename := tmpfile; DBFtable.tabletype := ttFoxpro; //SetTableLangDriver(table,'DBWINUS0'); //SetTableLangDriver(Table,'db866ru0'); //CheckDBFCP(Table.TableName,87); //866DOS - 38 dbftable.open; Mappings := 'CODE=CODE_GOODS;'+ 'NAME=NAME_GOODS;'+ 'MANUFAC=NAME_PRODUCER;'+ // 'COUNTRY=NAME_COUNTRY;'+ 'PRICE=PRICE;'+ // 'PRICER=PRICE_REGISTRY;'+ // 'PRICEPR=PRICE_FIRST;'+ 'BALANCE=AMOUNT;'+ 'EXPDATE=SHELF_LIFE;'+ 'MINORDER=MIN_AMOUNT'; //'EAN13=BARCODE;'+ // 'PACK=PLACE_CAP;'+ // 'NDS=NDS;'+ // 'LIFE=ISLIVENEED'; SElfLoader.InitFieldsToDefault; SelfLoader.InitImportCDS; TableAppend(selfloader.importcds,dbftable,false,Mappings); //dataset.close; // чтобы не продолжился импорт finally dbftable.close; cleardir(tmpdir); deletedir(tmpdir); end; end; finally //mappings.free; table.free end; end.