{~DoFill2616_ZR_OKPO_FO
  exchange #2616 - ТФФ 12
  если заполняется поле ZR.NAME_FO, то заполнять OKPO_FO из поля
  ОКПО карточки организации, наименование которой выгружается в ZR.NAME_FO.

  exchange #2703
  переход на ТФФ 12.2.
  ТФФ 11 и 11.2 не используются больше, поэтому проверка ТФФ 12 исключается.}
procedure DoFill2616_ZR_OKPO_FO( aDocNodeXml, aDataXml: Variant);
begin

    try
      //if IsVersionSupport( cnVersionTFF_12) then
        if ( aDocNodeXml.getAttribute('DOCUMENTCLASS_ID')
             in [ '11','75','195','118']) then
          if ( LENGTH( VarToStr( aDataXml.GetAttribute('NAME_FO'))) > 0)
            then begin
              aDataXml.SetAttribute(
                          'OKPO_FO',
                          QueryField( sqlFoNameByBudg,
                                      [ aDocNodeXml.getAttribute('BUDGET_ID')],
                                      'OKPO'));

            end;

      except
        ExceptionLog( 'Сбой Un_Exch2616_ExpZR.DoFill2616_ZR_OKPO_FO');
    end;

end;


{~DoFill2616_ZRST_KBK_RCP
  exchange #2616 - ТФФ 12
  При выгрузке 11, 195, 118 по формату ZR реализовать заполнение поля
  ZRST.KBK_RCP в каждой строке ZRST из поля «Классификация получателя для ФК»,
  если оно заполнено.

  Если длина выгружаемого значения меньше 20 знаков, дополнять впереди нулями.
  Поле TYPE_KBK_RCP заполнять в каждой строке из нового поля системы,
  если заполняется ZRST. KBK_RCP:
•	10 – для вида «Классификации получателя для ФК» «расходы»;
•	20 - для вида «Классификации получателя для ФК» «доходы»;
•	31 - для вида «Классификации получателя для ФК» «источники».

  Если поле «Классификация получателя для ФК» не заполнено, выгружать,
  как и раньше:
    Заполняется классификацией и типом классификации
    (расходы - 10, доходы - 20, источники - 31) из ИДП,
    если  счет организации получателя есть в справочнике
    и тип у счета '5', '7', '8', '9'.

  При любом варианте заполнения выгружать значения в ZRST.KBK_RCP
  и TYPE_KBK_RCP, если только «TYPE»=1.
  TYPE - поле ZR.TYPE

  fk_anal_kind - вид классификации  - 1-значное  число
      1 - доходы
      2 - расходы
      3 - источники
  fk_budget_code - 20 символов классификации

  exchange #2703
  переход на ТФФ 12.2.
  ТФФ 11 и 11.2 не используются больше, поэтому проверка ТФФ 12 исключается.


  exchange #2760
    проверяем, если КБК получателя выгружается 20ть нулей,
    то само поле КБК при этом очищаем и тип КБК тоже.

  exchange #2784
      ФТ-1: Требуется при выгрузке  ЭД класса 11, 195, 118 по формату ZR
    реализовать заполнение поля ZRST.KBK_RCP из поля «Классификация получателя
    для ФК», если оно заполнено и ZR.TYPE=1 (поле SIGN_VALUE - тип заявки).
    Если поле «Классификация получателя для ФК» не заполнено, то поле ZRST.
    KBK_RCP не заполнять.
      ФТ-2: Требуется поле ZRST.TYPE_KBK_RCP заполнять из  поля системы
    «Классификация получателя для ФК», если ZRST.KBK_RCP непустое,
    следующими значениями:
      • 10 – для вида «Классификации получателя для ФК» «расходы»;
      • 20 - для вида «Классификации получателя для ФК» «доходы»;
      • 31 - для вида «Классификации получателя для ФК» «источники».
    Если ZRST. KBK_RCP пустое, то ZRST.TYPE_KBK_RCP не заполнять.

    т.е. по дополнительному комменту АО:
    поле  ZRST. KBK_RCP заполнялось из ИДП, теперь его из ИДП заполнять не нужно.
    в результате, проверяем, если класс ЭД: 11,195,118, то сразу чистим
    поля ZRST.KBK_RCP и ZRST.TYPE_KBK_RCP, а потом заполняем эти поля
    только если тип ЭД =1 и заполнено поле «Классификации получателя для ФК».

  exchange #3081
    заполнение ZRST.TYPE_KBK_RCP и ZRST.KBK_RCP по #2784
    отменено для выгрузки ау/бу эд 195го - заполняются по другому.}
procedure DoFill2616_ZRST_KBK_RCP( aZR_TYPE: string;
                                   aDocNodeXml, aDataXml: Variant);
var
  xZRST_KBK_RCP: string;
  xClass: string;
begin

    try
      try
{        xClass := GetNodeAttributeEx( aDocNodeXml, 'DOCUMENTCLASS_ID');
        if (xClass = '')
          then }xClass := GetNodeAttributeEx( aDocNodeXml.ParentNode,
                                             'DOCUMENTCLASS_ID');
//      if IsVersionSupport( cnVersionTFF_12) then
        if NOT (xClass in [ '11', '195', '118']) then EXIT;

        // exchange #2784
        // в начале чистим оба поля для случая, если тип заявки <>1.
        // в этом случае игнорируем заполнение этих полей из ИДП (старый
        // алгоритм)
        if (aZR_TYPE <> '1') then begin
          aDataXml.SetAttribute( 'KBK_RCP', '');
          aDataXml.SetAttribute( 'TYPE_KBK_RCP', '');
          EXIT;
        end;

        // SIGN_VALUE = 1 (тип заявки = полная)
        // exchange #3081 - для ау/бу ничего не меняем
        if (xClass = '195') then EXIT;

        xZRST_KBK_RCP := GetNodeAttributeEx( aDocNodeXml, 'FK_BUDGET_CODE');



        if (LENGTH( xZRST_KBK_RCP) <= 0) then begin
          aDataXml.SetAttribute( 'KBK_RCP', '');
          aDataXml.SetAttribute( 'TYPE_KBK_RCP', '');
        end else begin
          // если поле «Классификации получателя для ФК» не пустое
          // exchange #3062
          // дополнение кода бк реализовано через унификацию
          // выгружать КБК получателя в поле ZVDOCPOL.KBK_RCP
          aDataXml.SetAttribute( 'KBK_RCP', KBKExtend( xZRST_KBK_RCP));
          case GetNodeAttributeEx( aDocNodeXml, 'FK_ANAL_KIND') of
            '1': aDataXml.SetAttribute( 'TYPE_KBK_RCP', '20');
            '2': aDataXml.SetAttribute( 'TYPE_KBK_RCP', '10');
            '3': aDataXml.SetAttribute( 'TYPE_KBK_RCP', '31');
          end;//case//
        end;

        finally
          // exchange #2760
          // проверяем, если КБК получателя выгружается 20нулей,
          // то само поле КБК при этом очищаем и тип КБК тоже.
          // exchange #3081 - унификация кода
          if KBK_is_0( GetNodeAttributeEx( aDataXml, 'KBK_RCP')) then begin
            aDataXml.SetAttribute( 'KBK_RCP', '');
            aDataXml.SetAttribute( 'TYPE_KBK_RCP', '');

          end;
      end;
      except
        ExceptionProc( 'DoFill2616_ZRST_KBK_RCP');
    end;

end;


{~DoAppendZRST_
   exchange #3096
   добавляем раздел ZRST в список разделов.
   при этом контролируем идентичность полей:
   TYPE_KBK_PAY, KBK_PAY,ADD_KLASS_PAY,TYPE_KBK_RCP,KBK_RCP,ADD_KLASS_RCP
   для одинаковых полей суммируем поле SUM_V_KBK
   делаем это так:
   ищем одинаковость полей от текущего раздела выше до ближайшего
   раздела не ZRST. если не нашли - добавляем раздел ZRST в хвост.
   если нащли - суммируем поле SUM_V_KBK и новый раздел не добавляем.}
procedure DoAppendZRST_( aXmlFile, aXmlZRST: variant);
begin
  try
    DoAppendUniqueChild(aXmlFile, aXmlZRST, 'TYPE_KBK_PAY,KBK_PAY,ADD_KLASS_PAY,TYPE_KBK_RCP,KBK_RCP,ADD_KLASS_RCP', 'SUM_V_KBK', 'ZRST');
    except
      ExceptionProc( 'DoAppendZRST_');
  end;
end;


begin
end.
