// скрипт загрузки заявки от Риглы. Файл выбирается из каталога

// предопределены переменные:

VAR
 VariantName :string; // имя варианта в программе
 VariantFile :string; // файл-скрипт
 Dataset :tdataset; // формируемый файл заявки, уже открыт, нужно заполнить. Структуру можно изучить непосредственно в окне импорта, он и есть таблица, отображаемая на экране
 DateDoc :tdatetime;  // дата документа, будет сохранено в накладной
 numberdoc :string;  // номер документа
 id_org :integer;  // код организации-заказчика в нашей базе
 id_org1 :integer;  // код подразделения в нашей базе
 name_org :string;  // наименование организации-заказчика
 name_org1 :string;  // наименование подразделения
 Info :string; // Дополнительная информация


var
  iPos :integer;

  ds :TDatasource;

  List :TSTringList;
  List1 :tStringList;
  i,k :integer;

  StrValue :string;

  Query :TQuery;

  Quantity :double;

  CODE_GOODS :string;
  CODE_PRODUCER :integer;
  Price :currency;
  Name_goods :string;

  TableGOods, TableProducer :ttable;

  FileName :string;
  OpenDialog :TOpenDialog;

  CDS :TClientdataset;

begin
  try

     FileName := '';
     OpenDialog := TOpenDialog.create(nil);
     try
       OpenDialog.Title := 'Укажите файл';
       OpenDialog.FileName  := AppIniFile.readstring('plugins_rigla_preq','filename','');
       OpenDialog.Filter := 'Файлы-накладные(*.csv)|*.csv|Все файлы(*.*)|*.*';
       while  OpenDialog.execute do begin
         if not fileexists(OpenDialog.FileName) then CreateHint('Укажите правильно файл ')
         else begin
           Filename := OpenDialog.FileName;
           AppIniFile.writestring('plugins_rigla_preq','filename',OpenDialog.filename);
           break;
         end;
       end;
     finally
       OpenDialog.free;
     end;

     if FileName = '' then exit;


     CDS := TClientDataset.create(SelfScript);

     ReadTXT(CDS,Filename,','); // const FieldNames: boolean = True;const MissStrings: string = '';const Conversion: ConversionTypes = ctNone;const NullF: Boolean = false;const NullFNum

    //while form.Showmodal = mrOk do
    begin
      //exit;


      name_org := trim(cds.fieldbyname('storename').asstring);

      if StrValue>'' then begin
        StrVAlue := ansiUppercase(name_org);

        Query := tQuery.create(nil);
        try
          query.databasename := 'dbkassa';
          Query.sql.text := 'select * from agents where upper(name) = :p_name or upper(smallname) = :p_name ';
          Query.parambyname('p_name').asstring := StrValue;
          Query.open;
          if Query.isempty
             and  (GetConfirm('Не найден заказчик с таким именем или укороченным именем: '+StrValue+'. Вы хотите продолжить?','','Продолжить','Отмена') <> mrOk)
          then continue;

          (*
          if (Query.fieldbyname('id').asinteger <> bonum_id)
             and  (GetConfirm('Код найденного заказчика: '+StrValue+'='+Query.fieldbyname('id').asstring+' и он не совпадает с ожидаемым для Бонума. Вы хотите продолжить?','','Продолжить','Отмена') <> mrOk)
          then continue;
          *)

          id_org := Query.fieldbyname('id').asinteger;
          Query.close;

        finally
          Query.free;
        end;

      end;


      (*
      StrValue := List[1];
      if (pos('КОММЕНТАРИЙ К ЗАЯВКЕ',ansiuppercase(StrValue))<>1)
         and  (GetConfirm('Вторая строка имеет неожиданный формат: '+StrValue+'. Вы хотите продолжить?','','Продолжить','Отмена') <> mrOk)
      then Continue;

      StrVAlue := copy(StrValue,pos(':',StrValue)+1,length(STrVAlue));
      if (StrVAlue ='')
         and  (GetConfirm('Первая строка имеет неожиданный формат: не найден символ ":". Вы хотите продолжить?','','Продолжить','Отмена') <> mrOk)
      then Continue;

      name_org1 := trim(StrValue);
      *)

      (*
      if StrValue>'' then begin
        StrVAlue := ansiUppercase(name_org1);

        Query := tQuery.create(nil);
        try
          query.databasename := 'dbkassa';
          Query.sql.text := 'select * from agents where upper(name) = :p_name or upper(smallname) = :p_name ';
          Query.parambyname('p_name').asstring := StrValue;
          Query.open;
          if Query.isempty
             and  (GetConfirm('Не найден грузополучатель с таким именем или укороченным именем: '+StrValue+'. Вы хотите продолжить?','','Продолжить','Отмена') <> mrOk)
          then continue;

          id_org1 := Query.fieldbyname('id').asinteger;

          Query.close;
        finally
          Query.free;
        end;
      end;
      *)

      List1 :=TStringList.create;
      TableGoods := TTAble.create(nil);
      TableProducer := TTAble.create(nil);
      try

        TAbleGoods.databasename := 'dbkassa';
        tableProducer.databasename := 'dbkassa';

        tablegoods.tablename := 'tovar.db';
        tableproducer.tablename := 'producer.db';

        TableGoods.Open;
        //tablegoods.indexfieldnames := 'ID';
        TableProducer.Open;

        while not dataset.isempty do dataset.delete;


        // парсим состав документа
        cds.first;
        while not cds.eof do
        begin

           Quantity := cds.fieldbyname('QNT').asfloat;
           Code_goods := cds.fieldbyname('supcode').asstring;
           name_goods := cds.fieldbyname('namefull').asstring;
           price := cds.fieldbyname('cena').asfloat;

           //code_producer := '';// strtointprotected( List1[1]) mod 1000 ;

           dataset.append;

           if name_goods <> ''
           then
             dataset.fieldbyname('name').asstring := name_goods;
             dataset.fieldbyname('name_my').asstring := name_goods;

           if (code_goods <> '')
              and TableGoods.findkey([code_goods])
           then
             dataset.fieldbyname('id_tovar').asstring := tablegoods.fieldbyname('NN').asstring;

           if (code_producer <> 0)
              and tableProducer.findkey([code_producer])
           then begin
             dataset.fieldbyname('id_producer').asstring := inttostr(code_producer);
             dataset.fieldbyname('name_producer').asstring := tableproducer.fieldbyname('name').asstring;
             dataset.fieldbyname('name_producer_my').asstring := tableproducer.fieldbyname('name').asstring;
           end;

           dataset.fieldbyname('price').asfloat := price;
           dataset.fieldbyname('quantity').asfloat := quantity;

           dataset.post;

           cds.next;
        end;

      finally
        TableProducer.free;
        TAbleGoods.free;
        List1.free;
      end;


      createhint('Процедура окончена');
      break;
    end
  finally
  end;


end.
