{~DoExportSubDohIst
  выгрузка КБК
  aBudgetID - бюджет
  aCfgOutListKbk - опция конфигурации: "выгружать в список"}
procedure DoExportSubDohIst( aBudgetID: string;
                        aCfgParamRef: boolean;
                        aCfgOutListKbk: boolean;
                        aMode: string);
var
  xSL: TStringList;
  xFileNameExport: string;
  xPacketNumber: integer;
begin

    try
      xSL:= TStringList.Create;
      try
        { значение даты последней выгрузки КБК для текущего бюджета.
          получаем его из файла Send.dat для текущего бюджета.
          загрузка параметра даты в файле Send.Dat для бюджета aBudgetID.
          если даты не будет (или такого бюджета), дата должны быть указана
          на 1990/1/1 0:0:0:0}
        vCfgSelectorKBK_LastDate := DateTimeFromStr_YYYYMMDD_HHMMSS(
                                        LoadFromSendDat(
                                            'ВЫГРУЗКА_'+IniSection,
                                            'БЮДЖЕТ_' + aBudgetID,
                                            '1990/01/01 00:00:00'));


        //Загрузка схемы
        // exchange #2542 - переход на тфф11 + переработка модуля проверки версий схем
        LoadSchema( GetFileNameSchemaTFF( 'wf_txwf*'));
///        LoadSchema(DirIni + 'Schems\wf_txwf100701.xml');
        // выгрузка КБК
        vExportListID_Action := '';
        if MakeFormatSubDohIst( aBudgetID, xSL, aCfgParamRef, aCfgOutListKbk, aMode) then begin
          //валидация схем.
          if param_CtlValidOn then
            if not ValidateFormat then
              if Not ShowMessageValid( FileValidate) then begin
                WriteLog('Выгрузка прервана пользователем');
                Exit;
              end;
          
          // имя файла экспорта XML
          WriteLog('Формирование имени выгружаемого файла', True);
          // Чтение номера посылки.
          xPacketNumber := LoadSendDatPacketNumber( IniSection);
          xFileNameExport :=
                DirOut + GetFileName( Fo.getAttribute('NAME'),
                                      'WF',
                                      Now,
                                      xPacketNumber,
                                      FileOutIsLocalNet,
                                      FileOutOrgCodeIsFk);
          
          // сохраняем XML в текстовом файле
          
          try
            WriteLog( FORMAT( 'Сохранение XML в файле "%s"...', [ xFileNameExport]), TRUE);
            XmlToTextFile( xFileNameExport);
            except
              ExceptionLog( 'Сбой сохранения XML');
          end;
          // фиксируем экспорт на сервере АЦК-финансы
          if (LENGTH( vExportListID_Action) <= 0)
            then Raise( 'Не указано значение в переменной vExportListID_Action.');
          FixedExportedListIDEx( xFileNameExport, xSL, vExportListID_Action);
          // сохраняем номер выгрузки
          SaveSendDatPacketNumber( IniSection, xPacketNumber);
          { сохраняем дату выполнения операции как дату выгрузки КБК
            сохранение параметра в файле Send.Dat }
          SaveToSendDat(  'ВЫГРУЗКА_'+IniSection,
                          'БЮДЖЕТ_' + aBudgetID,
                          DateTimeToStr_YYYYMMDD_HHMMSS( NOW));
        end;
        finally
          xSL.Free;
      end;
      except
        ExceptionLog( 'Сбой Un_Kbk7.DoExportSubDohIst;');
    end;

end;



function MakeFormatSubDohIst( aBudgetID: string;
                         aListID: TStringList;
                         aCfgParamRef: boolean;
                         aCfgOutListKbk: boolean;
                         aMode: string): Boolean;
var
  i: Integer;
  XmlListCodeforCds: Variant; //содержит перечень кодов для выбора из списка.
  xFormCaption: string;
begin

    try
      Result := False;
      Data := CreateOleObject('Microsoft.XmlDom');
      Data.appendChild(Data.createElement('FORMAT'));
      // Чтение номера посылки.
      with TIniFile.Create(DirIni + 'Schems\Send.dat') do
      begin
        PacketNumber := StrToInt(ReadString(IniSection,
          FormatDateTime('yyyymmdd', Now), '0')) + 1;
        Free;
      end;
      //Загрузка схемы
//      LoadSchema(DirIni + 'Schems\wf_txwf100701.xml');
      LoadSchema( GetFileNameSchemaTFF( 'wf_txwf*'));

      WriteLog('Формирование имени выгружаемого файла', True);
      FileOut := GetFileName(Fo.getAttribute('NAME'), 'WF', Now, PacketNumber,
        FileOutIsLocalNet, FileOutOrgCodeIsFk);
      Data := Data.documentElement;
      //создаем xml c текущей историей из базы
      CurrHistory := CreateOleObject('Microsoft.XmlDom');
      CurrHistory := CurrHistory.appendChild(CurrHistory.createElement('HISTORY'));
      CurrHistory := CurrHistory.appendChild(CurrHistory.ownerDocument.createElement('KSDI'));
      //ищем node KSDI
      NodeXmlList := OldKbk.selectNodes('KSDI');
      if NodeXmlList.Length = 0 then
        OldKbk := OldKbk.appendChild(OldKbk.ownerDocument.createElement('KSDI'))
      else
        OldKbk := NodeXmlList.Item[0];
      WriteLog('Заполнение данных файла: ' + FileOut, True);
      Data := Data.appendChild(FillElementBySchema(Fo, 'FK'));
      Data.setAttribute('FORM_VER', AppVersion);
      Data := Data.parentNode;
      Data := Data.appendChild(FillElementBySchema(Fo, 'FROM'));
      Data.setAttribute('BUDG_LEVEL', GetBudgLevel(BudgetId));
      Data := Data.parentNode;
      Data.appendChild(FillElementBySchema(Ufk, 'TO'));
      Data := Data.appendChild(FillElementBySchema(Fo, 'WF'));
      Data.setAttribute('NAME_BUD', QueryField(sqlBudgId, [BudgetId], 'CAPTION'));
      Data.setAttribute('DATE_FORM', FormatDateTime('dd.mm.yyyy', Work_Date));
      Data.setAttribute('DOL_ISP', DolIsp);
      Data.setAttribute('NAME_ISP', FioIsp);
      Data.setAttribute('TEL_ISP', TelIsp);
      Data := Data.parentNode;
      WriteLog('Получение данных по кодам подвидов доходов, видов источников...', True);

      CodeXmlList := null;

      if aMode = 'коды подвидов доходов и коды видов источников'
        then
          begin
            xFormCaption := 'Список выгружаемых кодов подвидов доходов и коды видов источников';
            XmlListCodeforCds := Bk_Ksdi_Ex1(aBudgetID, StatusBar, ProgressBar, aCfgParamRef, 0)
          end
        else
      if aMode = 'коды подвидов доходов'
        then
          begin
            xFormCaption := 'Список выгружаемых кодов подвидов доходов';
            XmlListCodeforCds := Bk_Ksdi_Ex2(aBudgetID, StatusBar, ProgressBar, aCfgParamRef, 0)
          end
        else
      if aMode = 'коды видов источников'
        then
          begin
            xFormCaption := 'Список выгружаемых кодов видов источников';
            XmlListCodeforCds := Bk_Ksdi_Ex3(aBudgetID, StatusBar, ProgressBar, aCfgParamRef, 0)
          end
        else begin
          ShowMessage( 'Неопределенный параметр "'+aMode+'".');
          exit;
        end;

      if (XmlListCodeforCds.documentElement.ChildNodes.Length <= 0)
        then EXIT;

      if NOT BuildFormSelectCodes( xFormCaption,
                                   XmlListCodeforCds.documentElement,
                                   aListID,
                                   aCfgOutListKbk,
                                   'WFST',
                                   'WF',
                                   aBudgetID)
        then EXIT;

      Result := TRUE;
      except
        ExceptionLog( 'Сбой Un_Kbk7.MakeFormatSubDohIst');
    end;

end;

begin
end.
