//создает документ 74 класса на основе загруженного 24
function CreateChildDoc74(Doc, ChildDoc: Variant): Boolean;
var
  i: Integer;
  Permission: Variant;
  IrkFlag, KbrFlag: Boolean; //спец средства по правилу Иркутск и КБР
begin

    try
      Result := False;
      ChildDoc := ChildDoc.appendChild(ChildDoc.createElement('DOCUMENT'));
      ChildDoc.setAttribute('action', 'insert');
      ChildDoc.setAttribute('class', 74);
      ChildDoc.setAttribute('BUDGET_ID', Doc.getAttribute('F_BUDGET_ID'));
      ChildDoc.setAttribute('DOC_NUMBER', Doc.getAttribute('DOC_NUMBER'));
      ChildDoc.setAttribute('DOC_DATE', Doc.getAttribute('CARRY_DATE'));
      ChildDoc.setAttribute('OPERTYPE_ID', Doc.getAttribute('F_OPERTYPE_ID'));
      ChildDoc.setAttribute('DESCRIPTION', Doc.getAttribute('DESCRIPTION'));
      ChildDoc.setAttribute('ORGACCOUNT_ID', '');
      IrkFlag := (not VarIsNull(Doc.getAttribute('F_SPECSR')))
        and (Doc.getAttribute('F_SPECSR') = 'по правилу Иркутск');
      KbrFlag := (not VarIsNull(Doc.getAttribute('F_SPECSR')))
        and (Doc.getAttribute('F_SPECSR') = 'по правилу КБР');
      if not IrkFlag then
        if not VarIsNull(Doc.getAttribute('F_SPECSR')) and
          (Doc.getAttribute('F_SPECSR') <> '') then
        begin
          if (Doc.getAttribute('F_SPECSR') = 'по правилу ЛенОбласти') or
             (Doc.getAttribute('F_SPECSR') = 'по правилу Чита') then
          begin
            ChildDoc.setAttribute('ORG_ID', Doc.getAttribute('ORG_ID'));
            ChildDoc.setAttribute('ORGACCOUNT_ID', GetLicAccSs(Doc.getAttribute('ORG_ID')));
            if ChildDoc.getAttribute('ORGACCOUNT_ID') = '' then
            begin
              WriteInfo('Не создан - не определен Id счета получателя (Org_Id = ' +
                Doc.getAttribute('ORG_ID') + ')');
              Exit;
            end;
          end;
        end
        //получатель из выписки
        else if Doc.getAttribute('ORG_ID') <> '' then
        begin
          ChildDoc.setAttribute('ORG_ID', Doc.getAttribute('ORG_ID'));
          //для выписки со счета ПБС и для информации ФО о нижестоящих Id счета известно
          //совпадает со счетом получателя
          if Doc.getAttribute('F_ORIGINAL_TYPE') in ['VP', 'IK'] then
            if not VarIsNull(Doc.getAttribute('REC_ACC_ID')) then
              ChildDoc.setAttribute('ORGACCOUNT_ID', Doc.getAttribute('REC_ACC_ID'))
            else begin
              WriteInfo('Не создан - не определен Id счета получателя');
              Exit;
            end
          else
            ChildDoc.setAttribute('ORGACCOUNT_ID',
              GetLicAccSs(Doc.getAttribute('ORG_ID')));
          //для выписки из лицевого счета бюджета дополнительное условие для поиска
          //Exchange#1937
          if (ChildDoc.getAttribute('ORGACCOUNT_ID') = '') and
            (Doc.getAttribute('F_ORIGINAL_TYPE') = 'VB') then
            ChildDoc.setAttribute('ORGACCOUNT_ID',
              GetLicAccSs_VB(Doc.getAttribute('ORG_ID'), Doc.getAttribute('REC_ACC_ID')));
          if ChildDoc.getAttribute('ORGACCOUNT_ID') = '' then
          begin
            WriteInfo('Не создан - не определен Id счета получателя (Org_Id = ' +
              Doc.getAttribute('ORG_ID') + ')');
            Exit;
          end;
        end
        else begin
          WriteInfo('Не создан - не определен Id получателя из выписки');
          Exit;
        end;
        //заполнение строк документа
      ChildDoc := ChildDoc.appendChild(ChildDoc.ownerDocument.createElement('LINES'));
      Doc := Doc.ChildNodes.Item[0];
      for i := 0 to Doc.childNodes.Length - 1 do
      begin
        Doc := Doc.childNodes.Item[i];
        ChildDoc := ChildDoc.appendChild(ChildDoc.ownerDocument.createElement('LINE'));
        if IrkFlag then
        begin
          Permission := GetPermissionIrk(Doc);
          if not VarIsNull(Permission) then
          begin
            //Id организации и счета получателя берем из разрешения, записываем в шапку
            ChildDoc.parentNode.parentNode.setAttribute('ORG_ID',
              Permission.getAttribute('ORG_ID'));
            ChildDoc.parentNode.parentNode.setAttribute('ORGACCOUNT_ID',
              Permission.getAttribute('ORGACCOUNT_ID'));
          end;
        end
        else
          if KbrFlag then
          begin
            if VarIsNull(Doc.ChildNodes.Item[0]) then
            begin
              WriteInfo('Не создан - не найден подэлемент с данными по разрешению');
              Exit;
            end;
            Permission := CreateOleObject('Microsoft.XmlDom');
            Permission := Permission.appendChild(Permission.createElement('ROOT'));
            Permission := Permission.appendChild(Permission.ownerDocument.createElement('ROW'));
            //переброска данных из подстроки строки документа,
            //в которой живут уже данные по разрешению
            AddReplaceAttrVal(Doc.ChildNodes.Item[0], Permission);
            //Id организации и счета получателя берем из разрешения, записываем в шапку
            ChildDoc.parentNode.parentNode.setAttribute('ORG_ID',
              Permission.getAttribute('ORG_ID'));
            ChildDoc.parentNode.parentNode.setAttribute('ORGACCOUNT_ID',
              Permission.getAttribute('ORGACCOUNT_ID'));
            //тип операции всегда -20
            ChildDoc.parentNode.parentNode.setAttribute('OPERTYPE_ID',
              Permission.getAttribute('OPERTYPE_ID'));
          end
          else
            Permission := GetPermissionDoh(ChildDoc.parentNode.parentNode, Doc);
        if VarIsNull(Permission) then
        begin
          WriteInfo('Не создан - не определено разрешение на открытие лс');
          Doc := Doc.parentNode.parentNode;
          Exit;
        end;
        ChildDoc.setAttribute('PERMISSIONLINE_ID',
          Permission.getAttribute('PERMISSIONLINE_ID'));
        ChildDoc.setAttribute('FUNDSOURCE_ID',  Permission.getAttribute('FUNDSOURCE_ID'));
        ChildDoc.setAttribute('ESTIMATE_ID', Permission.getAttribute('ESTIMATE_ID'));
        ChildDoc.setAttribute('RECIPIENT_ID', Permission.getAttribute('RECIPIENT_ID'));
        ChildDoc.setAttribute('KFSR_CODE', Permission.getAttribute('KFSR_CODE'));
        ChildDoc.setAttribute('KCSR_CODE', Permission.getAttribute('KCSR_CODE'));
        ChildDoc.setAttribute('KVR_CODE', Permission.getAttribute('KVR_CODE'));
        // exchange #3062 - косгу возвращается как результат
        ChildDoc.setAttribute('KESR_CODE', Permission.getAttribute('KESR_CODE'));
        ChildDoc.setAttribute('KADMR_CODE', Permission.getAttribute('KADMR_CODE'));
        ChildDoc.setAttribute('KDR_CODE', Permission.getAttribute('KDR_CODE'));
        ChildDoc.setAttribute('KDE_CODE', Permission.getAttribute('KDE_CODE'));
        ChildDoc.setAttribute('KDF_CODE', Permission.getAttribute('KDF_CODE'));
        ChildDoc.setAttribute('FSR_ID', Permission.getAttribute('FSR_ID'));
        ChildDoc.setAttribute('RECEIVER_ID', Permission.getAttribute('RECEIVER_ID'));
        ChildDoc.setAttribute('PAYER_ID', Permission.getAttribute('PAYER_ID'));
        ChildDoc.setAttribute('TERRITORY_ID', Permission.getAttribute('TERRITORY_ID'));
        ChildDoc.setAttribute('KADMD_CODE', Doc.getAttribute('KADMD_CODE'));
        ChildDoc.setAttribute('KD_CODE', Doc.getAttribute('KD_CODE'));
        // exchange #3062 - отмена косгу
        // exchange #3111 - но его нужно тянуть, если он есть
        ChildDoc.setAttribute('KESD_CODE', GetNodeAttributeEx( Doc, 'KESD_CODE'));
        ChildDoc.setAttribute('KDD_CODE', Permission.getAttribute('KDD_CODE'));
        ChildDoc.setAttribute('KDT_CODE', Permission.getAttribute('KDT_CODE'));
        ChildDoc.setAttribute('AMOUNT', Doc.getAttribute('AMOUNT'));
        ChildDoc.setAttribute('FSD_ID', Doc.getAttribute('FSD_ID'));

        try
          // поле колда цели тянем из главного ЭД
          ChildDoc.setAttribute( 'PURPOSEFULGRANT_ID',
                                  GetNodeAttributeEx( Doc, 'PURPOSEFULGRANT_ID'));
          ChildDoc.setAttribute( 'PURPOSEFULGRANTD_ID',
                                  GetNodeAttributeEx( Doc, 'PURPOSEFULGRANTD_ID'));

          // exchange #2389 - доходы
          Exch2389_Update_PURPOSEFULGRANT_ID(
                //ChildDoc.parentNode.parentNode,
                ChildDoc,
                '20',
                ChildDoc.parentNode.parentNode.getAttribute('BUDGET_ID'),
                'PURPOSEFULGRANTD_ID',
                ChildDoc.parentNode.parentNode.getAttribute('class'),
                VarToStr( ChildDoc.GetAttribute( 'KDT_CODE')));   // тип дохода
          // exchange #2389 - расходы
          Exch2389_Update_PURPOSEFULGRANT_ID(
      //          ChildDoc.parentNode.parentNode,
                ChildDoc,
                '10',
                ChildDoc.parentNode.parentNode.getAttribute('BUDGET_ID'),
                'PURPOSEFULGRANT_ID',
                ChildDoc.parentNode.parentNode.getAttribute('class'),
                '');  // для расходов тип дохода не указывается
        except
          ExceptionLog( 'Сбой обновления кода цели.');
        end;

        ChildDoc := ChildDoc.parentNode;
        Doc := Doc.parentNode;
      end;
      Doc := Doc.parentNode;
      ChildDoc := ChildDoc.ownerDocument.documentElement;
      Result := True;

      except
        ExceptionLog( 'Сбой Un_Import.CreateChildDoc74');
    end;

end;

begin
end.
