// скрипт для импорта прайс-листа Гладилин. используется процедурой 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;
begin
  table := ttable.create(selfscript);
  try
    tmpdir := includetrailingpathdelimiter(gettempdir+'tmpscriptimport-'+formatdatetime('dd-mm-yyyy-hh-nn-ss',now));
    forcedirectories(tmpdir);

    tmpfile := tmpdir + 'tmpprice.dbf';

    copyfile(filename,tmpfile);
    try
      table.tablename := tmpfile;

      table.tabletype := ttFoxpro;
      //SetTableLangDriver(table,'db866ru0');
      //SetTableLangDriver(Table,'DBWINUS0');

      table.open;

     //showmessage('1');

      {
      Mappings := 'CODEPST=CODE_GOODS;'+
                  'NAME=NAME_GOODS;'+
                  'FIRM=NAME_PRODUCER;'+
                  'CNTR=NAME_COUNTRY;'+
                  'PRICE2=PRICE;'+
                  'PRICEGR=PRICE_REGISTRY;'+
                  //'IZGPR=PRICE_FIRST;'+
                  'QNT=AMOUNT;'+
                  //'GDATE=SHELF_LIFE;'+  ошибка при приеме 22.02.31. либо обрезать либо обходить
                  'EAN13=BARCODE;'+

                  'QNTPACK=PLACE_CAP;'+
                  'NDS=NDS;'+
                  'GNVLS=ISLIVENEED';
      }

      SElfLoader.InitFieldsToDefault;
      SelfLoader.InitImportCDS;

      table.first;
      while not table.eof do begin

        selfloader.importcds.append;
        selfloader.importcds.fieldbyname('code_goods').asstring := table.fieldbyname('codepst').asstring;
        selfloader.importcds.fieldbyname('name_goods').asstring := table.fieldbyname('name').asstring;
        selfloader.importcds.fieldbyname('name_producer').asstring := table.fieldbyname('firm').asstring;
        selfloader.importcds.fieldbyname('name_country').asstring := table.fieldbyname('cntr').asstring;
        selfloader.importcds.fieldbyname('price').asstring := table.fieldbyname('price2').asstring;
        if not table.fieldbyname('pricegr').isnull
        then
          selfloader.importcds.fieldbyname('price_registry').asstring := table.fieldbyname('pricegr').asstring;


        selfloader.importcds.fieldbyname('amount').asstring := table.fieldbyname('qnt').asstring;

        selfloader.importcds.fieldbyname('barcode').asstring := table.fieldbyname('ean13').asstring;
        selfloader.importcds.fieldbyname('place_cap').asstring := table.fieldbyname('qntpack').asstring;
        selfloader.importcds.fieldbyname('nds').asstring := table.fieldbyname('nds').asstring;
        selfloader.importcds.fieldbyname('isliveneed').asstring := table.fieldbyname('gnvls').asstring;

        try
          selfloader.importcds.fieldbyname('shelf_life').asstring := table.fieldbyname('gdate').asstring;
        except
        end;

        table.next;
      end;

      //TableAppend(selfloader.importcds,table,false,Mappings);
      //dataset.close; // чтобы не продолжился импорт
    finally
      table.close;
      cleardir(tmpdir);
      deletedir(tmpdir);
    end;

  finally
    //mappings.free;
    table.free
  end;


end.
