const
  // значения параметра "Вариант выгрузки КБК" из конфигурации
  cnCfgSelectorKBK_All     = 'все строки';
  cnCfgSelectorKBK_Changes = 'только измененные строки';
  cnCfgSelectorKBK_Last    = 'все последние строки';

  // префиксы идентификаторов при выгрузке справочников КБК
//  cnPrefixID_KCSR          = '$C';
//  cnPrefixID_KVR           = '$V';
  cnPrefixID_KSI           = '$i';
  cnPrefixID_KSD           = '$d';
//  cnPrefixID_KADM          = '$A';

  // неопределенная операция при передачи кодов на сервер для обновления
  // дат выгрузки. в этом случае операция определяется по списку префиксов
  // идентификаторов.
  cnExportActionUndefined  = '?';


var
  Form, Fm_ParamUnloadKbk: TFormCustom;//TForm;
  Fm_KbkList: TFormCustomList;
  PacketNumber, BudgIndx, i, idx, j: Integer;
  IniSection, DolIsp, FioIsp, TelIsp, BudgetId, param_VariantUnloadKBK,
  param_ModeSubDohIst, KbkIdList: String;
  UnloadKbk, UnloadGlava, UnloadKcsr, UnloadKvr, param_ref, UnloadSubDohIst,
  UnloadGrantInvestment, param_UnloadKbkFromAllBudget, EmptySysParam, param_NameKBK,
  param_ChangePrevYear, param_ShowFormParam, fm_ModalResultOk,
  param_OutListKbk: Boolean;
  Fo, Ufk, Kbk, BudgXml, OldKbk, SysParam, CurrHistory, NodeXmlList,
  CodeXmlList, MappBudgXml, Uchr: Variant;
  UnloadKbk_Chbx, UnloadKcsr_Chbx, UnloadKvr_Chbx, UnloadPodvid_Chbx,
  UnloadGlava_Chbx, UnloadGrantInvestment_Chbx: TCheckBox;
  OkBtn, CancelBtn: TBitBtn;
  CdsList: TClientDataSet;
  DbGrid: TDBGridEh;
  EdtCdsId, edKesCode, edKadmCode: TEdit;
  tlbFilterClear, tlbFilter, tlbRefresh: TToolButton;
  PanelFilter: TPanel;
  RadioTypeKbk, rgFilterKBK: TRadioGroup;
  spbKesCode, spbKadmCode: TSpeedButton;
  vFilterGrandInvesment: string;

  // exchange #2473 - выгрузка целевых назначений
  vUnloadPurposefulgrant_Chbx: TCheckBox;
  vUnloadPurposefulgrant: boolean;

  { фильтр КБК из опции конфигурации "Вариант выгрузки КБК"
    значением является строка в нижнем регистре из значения этого парамера в cfg.
    значения вариантов - константы: cnCfgSelectorKBK_XXX}
  vCfgSelectorKBK: string;

  { выгружать КБК из списка}
  vCfgOutListKbk: boolean;

  { значение даты последней выгрузки КБК для текущего бюджета.}
  vCfgSelectorKBK_LastDate: TDateTime;

  { дата запуска операции }
//  vDate_Actionstart: TDateTime;

  { фильтр КБК }
  vFilterKBK_TypeKBK: string;
  vFilterKBK_KadmCode: string;
  vFilterKBK_KesCode: string;

  { обозначение списка ID для передачи выбранных кодов данных на сервер для
    изменения даты выгрузки. }
  vExportListID_Action: string;

  { exchange #2417
    опция конфигурации Выгрузку поля DKST.LIMIT справочников Коды расходов
    бюджета. значение:
      =1 - =1
      =2 - Признак использования для лимитуемых расходов}
  vCfg_KBK_DKST_LIMIT_Option: integer;

//  vFilterCodes_Function: string;
{
  vFilterCodes_Ref: boolean;
  vFilterCodes_BudgetID: string;
  vFilterCodes_StatusBar: TStatusBar;
  vFilterCodes_ProgressBar: TProgressBar;
  }
//  vFilterCodes_Selector: integer;

  // exchange #2596
  // параметр Выгружать только «Утвержден на уровне субъекта (муниципального образования)»»
  vCfg_2596: boolean;

  // exchange #2591
  // при переходе на символьные КБК, нулевые коды КБК <>0.
  // их нужно форматировать с учетом масок БК.
  // для оптимизации производительности коды определяем один раз в начале
  // выгрузки КБК и будем хранить их в глобальных переменных.
  vKBK0_KADM: string;
  vKBK0_KD: string;
  vKBK0_KES: string;
  vKBK0_KI: string;
  vKBK0_KFSR: string;
  vKBK0_KCSR: string;
  vKBK0_KVR: string;

  // exchange #2820
  // ид.организации учредителя из конфига
  // совместимо с эксчем сборки не ниже 191
  vCfg_OrgID_Uchr: string;

  // exchange #2851
  // параметр конфига: Формировать KD по всем кодам цели
  vCfg_2851: boolean;

  // exchange #3049
  // параметр конфига: Выгружать по требованиям Приказа 90н
  vCfg_3049: boolean;

  // Exchange, #3217
  // параметр конфига: Формирование блока TO (id организации органа ФК)
  vCfg_OrgID_FK: string;
  // параметр конфига: Формирование блока TO (код и наименование организации органа ФК)
  vCfg_Org_FK: string;
  
function FileNameSendDat: string;
begin
  Result := DirIni + 'Schems\Send.dat';
end;

{~SaveToSendDat
  сохранение параметра в файле Send.Dat }
procedure SaveToSendDat( aSection, aParam, aValue: string);
begin
  SaveToIni( FileNameSendDat, aSection, aParam, aValue);
end;

{~LoadFromSendDat
}
function LoadFromSendDat( aSection, aParam: string; aDefault: string = ''): string;
begin
  Result := LoadFromIni( FileNameSendDat, aSection, aParam, aDefault);
end;

{~SaveSendDatPacketNumber
  Запись номера посылки в течении дня}
procedure SaveSendDatPacketNumber( aSection: string; aPacketNumber: integer);
begin
  SaveToSendDat( aSection, FormatDateTime('yyyymmdd', Now), IntToStr( aPacketNumber));
end;

{~LoadSendDatPacketNumber
  }
function LoadSendDatPacketNumber( aSection: string): integer;
begin
  try
    Result := StrToInt( LoadFromSendDat( aSection, FormatDateTime('yyyymmdd', Now), '0')) + 1;
    except
      ExceptionLog( 'Сбой скрипта: "Un_Kbk1.LoadPacketNumber".');
  end;
end;

begin
end.
