{~DoExportKCSR
  выгрузка КБК
  aBudgetID - бюджет
  aCfgOutListKbk - опция конфигурации: "выгружать из списка"}
procedure DoExportKCSR( aBudgetID: string;
                        aCfgParamRef: boolean;
                        aCfgOutListKbk: boolean);
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( 'fc_txfc*'));
//        LoadSchema(DirIni + 'Schems\fc_txfc090925.xml');
        // выгрузка КБК
        if MakeFormatKCSR( aBudgetID, xSL, aCfgParamRef, aCfgOutListKbk) 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'),
                                      'FC',
                                      Now,
                                      xPacketNumber,
                                      FileOutIsLocalNet,
                                      FileOutOrgCodeIsFk);
          
          // сохраняем XML в текстовом файле
          
          try
            WriteLog( FORMAT( 'Сохранение XML в файле "%s"...', [ xFileNameExport]), TRUE);
            XmlToTextFile( xFileNameExport);
            except
              ExceptionLog( 'Сбой сохранения XML');
          end;
          // фиксируем экспорт на сервере АЦК-финансы
          FixedExportedListIDEx( xFileNameExport, xSL, 'kcsr');
          // сохраняем номер выгрузки
          SaveSendDatPacketNumber( IniSection, xPacketNumber);
          { сохраняем дату выполнения операции как дату выгрузки КБК
            сохранение параметра в файле Send.Dat }
          SaveToSendDat(  'ВЫГРУЗКА_' + IniSection,
                          'БЮДЖЕТ_' + aBudgetID,
                          DateTimeToStr_YYYYMMDD_HHMMSS( NOW));
        end;
        finally
          xSL.Free;
      end;
      except
        ExceptionLog( 'Сбой Un_Kbk3.Export_KBK_KCSR;');
    end;

end;



function MakeFormatKcsr( aBudgetID: string;
                         aListID: TStringList;
                         aCfgParamRef: boolean;
                         aCfgOutListKbk: boolean): Boolean;
var
  i: Integer;
  XmlListCodeforCds: Variant; //содержит перечень кодов для выбора из списка.
begin
  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\fc_txfc090925.xml');
  LoadSchema( GetFileNameSchemaTFF( 'fc_txfc*'));

  WriteLog('Формирование имени выгружаемого файла', True);
  FileOut := GetFileName(Fo.getAttribute('NAME'), 'FC', 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('KCSR'));
  //ищем node KCSR
  NodeXmlList := OldKbk.selectNodes('KCSR');
  if NodeXmlList.Length = 0 then
    OldKbk := OldKbk.appendChild(OldKbk.ownerDocument.createElement('KCSR'))
  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, 'FC'));
  Data.setAttribute('NAME_BUD', QueryField(sqlBudgId, [BudgetId], 'CAPTION'));
  Data.setAttribute('DATE_FORM', FormatDateTime('dd.mm.yyyy', Now));
  Data.setAttribute('DOL_ISP', DolIsp);
  Data.setAttribute('NAME_ISP', FioIsp);
  Data.setAttribute('TEL_ISP', TelIsp);
  Data := Data.parentNode;

  WriteLog('Получение данных по КЦСР...', True);
  CodeXmlList := null;

  // exchange #3102
  // учитывать дату окончания при выгрузке из списка относительно рабочей даты
  XmlListCodeforCds := Bk_Kcsr_Ex( aBudgetID,
                                   StatusBar,
                                   ProgressBar,
                                   aCfgParamRef,
                                   0,
                                   aCfgOutListKbk,
                                   Work_Date);
  if (XmlListCodeforCds.documentElement.ChildNodes.Length <= 0)
    then EXIT;


  if NOT BuildFormSelectCodes( 'Список выгружаемых кодов КЦСР',
                                XmlListCodeforCds.documentElement,
                                aListID,
                                aCfgOutListKbk,
                                'FCST',
                                'FC',
                                aBudgetID)
    then EXIT;

  Result := TRUE;
end;

begin
end.
