// скрипт для импорта прайс-листа. используется процедурой 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.
