
// Экспорт в народную. Подстраиваемся под их формат приема.
// DATE,D	ВРЕМЯ,C,11	NOMERN,N,11,0	NOMER,C,50	ОСН,C,2	SUMMA,N,20,4	SUMMAPR,N,20,4	СУММА_НАЦ_,N,20,4	NAME,C,100	СКЛАД,C,100	ОСНОВАНИЕ,C,30	СРОК,D	НАЦ_,N,20,4	Х,N,11,0	ДОП_НАЦ_СК,N,20,4	ДОП_НАЦ__С,N,20,4	В_Т_Ч__НДС,N,20,4	НДС_10_,N,20,4	НДС_20_,N,20,4	ЗАКУП_НДС_,N,20,4	ЗАКУП_НД_1,N,20,4	ЗАКУП_НД_2,N,20,4	ОТГРУЖЕНО,D	Х__НАЛОГ__,N,20,4	НАЛОГ_5__,N,20,4	ИНН_СКЛАДА,C,15	ОКПО_СКЛАД,C,30	ОКОНХ_СКЛА,C,30	ИНН_КОНТРА,C,30	ОКПО_КОНТР,C,30	ОКОНХ_КОНТ,C,30	Х_К_АГЕНТА,N,11,0	КОНТРАГ__С,C,20	Х_СКЛАДА,N,11,0	ИТОГО_,N,20,4	Х_СЧЕТ_ФАК,N,11,0	ОФОРМИЛ,C,100	Ч_З_КОГО,N,11,0	Ч_З_КОГО__,C,100	SUMMANOT5,N,20,4	SUMMA5,N,20,4	ОБОРОТ__,N,20,4	ОБОРОТ_5__,N,20,4	ИСТ_ФИН_,N,11,0	ИСТОЧНИК_Ф,C,100	ДАТА_ПЕ,D	ДАТА_ПО,D	SUMMAP,N,20,4	SUMMAP0,N,20,4	SUMMAP10,N,20,4	SUMMAP20,N,20,4	SUMMAP18,N,20,4	SUMMA50,N,20,4	SUMMA510,N,20,4	SUMMAP520,N,20,4	SUMMAP518,N,20,4	SUMMANOT50,N,20,4	SUMMANOT51,N,20,4	SUMMANOT52,N,20,4	SUMMANOT_1,N,20,4
// используется только список приходных накладных

const ExportDir = 'c:\temp\1C\'; // каталог экспорта файлов


var // предопределенные программой переменные

  DATASET :TTable; // таблица с шапками накладных ,которую собирает вызывающая форма. Из нее формируем выходной файл
  MinDate :tDateTime; // Первая из дат в диапазоне
  MaxDate :tDateTime; // Вторая (максимальная) дата в диапазоне
  CheckOutput :boolean; // True, если запрос осуществлялся по расходным документам
  CheckInput  :boolean; // True, если запрос осуществлялся по приходным документам
  CheckInputMoney :boolean; // True, если запрос осуществлялся по выплатам от покупателей


var
  TaPR :TTable;
  TaRS :TTAble;
  //TAPRNakl :TTAble;
  //tarsNakl :TTAble;
  SaveDialog :TSaveDialog;
  FileName :string;

  QueryPR,QueryRS :tQuery;
  thdate :tdatetime;
  thvar :variant;
begin

  SaveDialog := TSaveDialog.create(nil);
  try
     SaveDialog.Title := 'Укажите файл';
     SaveDialog.FileName  := AppIniFile.readstring('plugin_export1c','filename','');
     SaveDialog.defaultext := 'DBF';
     SaveDialog.Filter := 'DBF-файлы(*.dbf)|*.dbf';

     SaveDialog.filter := SaveDialog.Filter + '|Все файлы(*.*)|*.*';

     if  SaveDialog.execute then
     begin
         Filename := SaveDialog.FileName;
         AppIniFile.writestring('plugin_export1c','filename',SaveDialog.filename);
     end;
  finally
    SaveDialog.free;
  end;


  // Судя по всему, нам дали отбой, уходим, понурив голову...
  if filename = '' then exit;



  QueryPR := TQuery.create(nil);
  QueryRS := TQuery.create(QueryPR);
  TAPR := TTable.create(QueryPR);
  taRS := TtAble.create(QueryPR);
  //taPRNakl := TTable.create(TAPR);
  //taRSNakl := TTAble.create(tapr);
  with TMyWait.create('Идет экспорт накладных') do
  try

      (*
      taprnakl.databasename := 'dbkassa';
      taprnakl.tablename := 'pr_nakl';
      taprnakl.open;

      taprnakl.databasename := 'dbkassa';
      taprnakl.tablename := 'rs_nakl';
      taprnakl.open;
      *)

      QueryPR.databasename := 'dbkassa';
      QueryRS.databasename := 'dbkassa';
      //tars.TableName := includetrailingpathdelimiter(ExportDir)+'out_docs.dbf';
      //if fileexists(tars.tablename) then deletefile(tars.tablename);
      tapr.TableName := filename;
      if fileexists(tapr.tablename) then deletefile(tapr.tablename);


      with tapr do
      begin
        with fielddefs do begin
          clear;
          add('PO',ftstring,1,false); 
          add('DATE',ftdate,0,false);
          add('DATEPOST',ftdate,0,false);
          add('NOMER',ftInteger,0,false);
          add('ID_DOC',ftstring,50,false);
          add('NAME',ftstring,100,false);

          add('SUMMA',ftCurrency,0,false);
          add('SUMMAP',ftCurrency,0,false);

          
          add('SUMMAP0',ftCurrency,0,false);
          add('SUMMAP10',ftCurrency,0,false);
          add('SUMMAP20',ftCurrency,0,false);
          add('SUMMAP18',ftCurrency,0,false);

          add('SUMMA0',ftCurrency,0,false);
          add('SUMMA10',ftCurrency,0,false);
          add('SUMMA20',ftCurrency,0,false);
          add('SUMMA18',ftCurrency,0,false);


        end;

        createtable;
        Open;
      end;


      dataset.first;

      while not dataset.eof do
      begin
        if dataset.fieldbyname('nomer').asinteger <>0 // пустая строка вылазит, гасим
        then begin

            if (dataset.fieldbyname('po').asstring = '+') and CheckInput
            then begin


                  taPR.append;

                  
                  tapr.fieldbyname('PO').asstring := dataset.fieldbyname('PO').asstring;
                  tapr.fieldbyname('DATE').asdatetime := dataset.fieldbyname('data').asdatetime;
                  tapr.fieldbyname('DATEPOST').asdatetime := dataset.fieldbyname('datEPOST').asdatetime;
                  tapr.fieldbyname('NOMER').asinteger := dataset.fieldbyname('nomer').asinteger;
                  tapr.fieldbyname('ID_DOC').asstring := dataset.fieldbyname('id_doc').asstring;
                  tapr.fieldbyname('NAME').asstring := dataset.fieldbyname('agentname').asstring;

                  tapr.fieldbyname('SUMMAP').asfloat := dataset.fieldbyname('summa').asfloat;
                  tapr.fieldbyname('SUMMAP0').asfloat := dataset.fieldbyname('summa0').asfloat;
                  tapr.fieldbyname('SUMMAP10').asfloat := dataset.fieldbyname('summa10').asfloat;
                  tapr.fieldbyname('SUMMAP20').asfloat := dataset.fieldbyname('summa20').asfloat;
                  tapr.fieldbyname('SUMMAP18').asfloat := dataset.fieldbyname('summa18').asfloat;

                  tapr.fieldbyname('SUMMA').asfloat := dataset.fieldbyname('summaz').asfloat;
                  tapr.fieldbyname('SUMMA0').asfloat := dataset.fieldbyname('summa0z').asfloat;
                  tapr.fieldbyname('SUMMA10').asfloat := dataset.fieldbyname('summa10z').asfloat;
                  tapr.fieldbyname('SUMMA20').asfloat := dataset.fieldbyname('summa20z').asfloat;
                  tapr.fieldbyname('SUMMA18').asfloat := dataset.fieldbyname('summa18z').asfloat;

                  tapr.post;
            end
            else
            if (dataset.fieldbyname('po').asstring = '-') and CheckOutput
            then begin
              (*
                  taRS.append;

                  tapr.fieldbyname('DATE').asdatetime := dataset.fieldbyname('data').asdatetime;
                  tapr.fieldbyname('NOMER').asinteger := dataset.fieldbyname('nomer').asinteger;
                  tapr.fieldbyname('IDDOK').asstring := dataset.fieldbyname('id_doc').asstring;
                  tapr.fieldbyname('NAME').asstring := dataset.fieldbyname('agentname').asstring;

                  tapr.fieldbyname('SUMMAP').asfloat := dataset.fieldbyname('summa').asfloat;
                  tapr.fieldbyname('SUMMAP0').asfloat := dataset.fieldbyname('summa0').asfloat;
                  tapr.fieldbyname('SUMMAP10').asfloat := dataset.fieldbyname('summa10').asfloat;
                  tapr.fieldbyname('SUMMAP20').asfloat := dataset.fieldbyname('summa20').asfloat;
                  tapr.fieldbyname('SUMMAP18').asfloat := dataset.fieldbyname('summa18').asfloat;

                  tapr.fieldbyname('SUMMA').asfloat := dataset.fieldbyname('summawithnacenka').asfloat;
                  tapr.fieldbyname('SUMMA0').asfloat := dataset.fieldbyname('summa0withnacenka').asfloat;
                  tapr.fieldbyname('SUMMA10').asfloat := dataset.fieldbyname('summa10withnacenka').asfloat;
                  tapr.fieldbyname('SUMMA20').asfloat := dataset.fieldbyname('summa20withnacenka').asfloat;
                  tapr.fieldbyname('SUMMA18').asfloat := dataset.fieldbyname('summa18withnacenka').asfloat;

                  tapr.post;

              *)
            end
            else
            if (dataset.fieldbyname('po').asstring = '1') and CheckInputMoney
            then begin
              // do nothing за ненадобностью
            end;
        end;


        dataset.next;
      end;

      TAPR.close;
      tars.close;

      CreateHintI('Операция экспорта данных завершена');
  finally
    free;
    QueryPR.free;
  end;

end.

