{~CreateDoc11ZS
  создает документ 11 класса на основе данных файла IK.ZS

  aXmlED11 - описание создаваемого эд 11го
  aXmlZS - узел из входного файла

  результат:
    =true - эд aXmlED11 создан
    =false - эд aXmlED11 не создан.

  exchange #3062
    перенос функционала проверки кбк в строках сюда.}
function CreateDoc11ZS(aXmlED11, aXmlZS, aXmlIK: Variant): Boolean;
var
  i: Integer;
  Fio, Dolzhnost, Est_Kind, Contract_Name, Contract_Number,
  Contract_Date, Payment_Name, Payment_Number, Payment_Date: String;
  XmlOrg, XmlAcc, Permission, Kbk, Line, Contract, BO, Condebts: Variant;
  xBudgetID, orgId: string;
begin

    try
      Result := False;
      xBudgetID := aXmlED11.getAttribute('F_BUDGET_ID');

      // exchange #3062 - перенос проверки строк ZRST в создание эд
      // проверка выполняется уже после того, как в логе указано
      // какой эд создается.
      if NOT CheckKBK_All_ZSCH2( aXmlZS, xBudgetID)
        then EXIT;

      aXmlED11.setAttribute('action', 'insert');
      aXmlED11.setAttribute('BUDGET_ID', xBudgetID);
  //    aXmlED11.setAttribute('BUDGET_ID', aXmlED11.getAttribute('F_BUDGET_ID'));
      aXmlED11.setAttribute('GUID_FK', aXmlED11.getAttribute('FOREIGN_KEY'));
      aXmlED11.setAttribute('DOC_DATE', DateTimeToXml(StrToDate(aXmlED11.getAttribute('DOC_DATE'))));
      aXmlED11.setAttribute('QUEUE_KIND', GetQueueKind);
      //Exchange#2239
      if aXmlED11.getAttribute('QUEUE_KIND') = '=' then
        aXmlED11.setAttribute('QUEUE_KIND', '6');
      aXmlED11.setAttribute('LIMITING_DATE', aXmlZS.getAttribute('DATE_LIM'));
      if aXmlED11.getAttribute('LIMITING_DATE') <> '' then
        aXmlED11.setAttribute('LIMITING_DATE',
          DateTimeToXml(StrToDate(aXmlED11.getAttribute('LIMITING_DATE'))));
      aXmlED11.setAttribute('EXTSTATUS_ID', 0);
      aXmlED11.setAttribute('CASH_INCOME', 1);
      aXmlED11.setAttribute('FK_FLAG', 1);
      aXmlED11.setAttribute('AMOUNT', 0);
      aXmlED11.setAttribute('ADVANCE_PAYMENT', 0);
      aXmlED11.setAttribute('SYMBCASH_ID',aXmlZS.childNodes.Item[0].getAttribute('CHECK_KAS'));
      // определяем бюджетополучателя
      WriteLog('Заполнение данных бюджетополучателя', True);
      WriteLog('Поиск референса бюджетополучателя по ИНН и КПП', True);
      aXmlED11.setAttribute('RECIPIENT_ID', '');
      if Trim(aXmlIK.getAttribute('INN_UBP')) <> '' then
      begin
        XmlOrg := GetOrgByTaxKpp(aXmlIK.getAttribute('INN_UBP'),
          aXmlIK.getAttribute('KPP_UBP'), '', '', False, aXmlED11);
        if not ((XmlOrg.documentElement.childNodes.Length = 1)
          and HasOrgRole(XmlOrg.documentElement.childNodes.Item[0].getAttribute('ID'), '0')
          and IsActual(XmlOrg.documentElement.childNodes.Item[0].getAttribute('ID'),
            aXmlED11.getAttribute('BUDGET_ID'))) then
        begin
          WriteLog('Не удалось найти референс бюджетополучателя по ИНН и КПП. Поиск' +
            ' референса бюджетополучателя по ИНН, КПП и коду организации');
          //Exchange#2093
          XmlOrg := GetOrgByTaxKppBudgIdCode(aXmlIK.getAttribute('INN_UBP'),
            aXmlIK.getAttribute('KPP_UBP'), aXmlED11.getAttribute('BUDGET_ID'),
            aXmlIK.getAttribute('KOD_UBP_PUBP'), '0');
        end;
        if XmlOrg.documentElement.childNodes.Length = 1 then
        begin
          XmlOrg := XmlOrg.documentElement.childNodes.Item[0];
          orgId := XmlOrg.getAttribute('ID');
          aXmlED11.setAttribute('RECIPIENT_ID', orgId);
          //чтобы не ломать общий поиск разрешения, записываем референс в шапку
          aXmlED11.setAttribute('ORG_ID', orgId);
          // Еще поля по плательщику:
          aXmlED11.setAttribute('ORG_TAXCODE', GetOrgTaxCode(orgId));
          aXmlED11.setAttribute('ORG_KPP', GetOrgKPP(orgId));
          aXmlED11.setAttribute('ORG_NAME', GetOrgOfficialName(orgId));
          aXmlED11.setAttribute('ORG_CODE', GetOrgCode(orgId));

          WriteLog('Найден бюджетополучатель с референсом: ' + XmlOrg.getAttribute('ID'));
          // определяем счет для финансирования
          if aXmlIK.getAttribute('LS_UBP') = '' then
          begin
            WriteInfo('Не создан - не определен счет для финансирования');
            Result := False;
            Exit;
          end
          else begin
            if aXmlZS.selectSingleNode('ZSCH2').getAttribute('KOD_IST') = 1 then
            begin
              aXmlED11.setAttribute('ORGACCOUNT_ID',GetLicAcc(orgId,
                '5', aXmlIK.getAttribute('LS_UBP')));
              if aXmlED11.getAttribute('ORGACCOUNT_ID') = '' then begin
                WriteInfo('Не создан - не определен референс счета для финансирования');
                Result := False;
                Exit;
              end
              else begin
                // определяем бланк расходов
                aXmlED11.setAttribute('ESTIMATE_ID', GetEstimateId(aXmlED11.getAttribute('BUDGET_ID'),
                  orgId, aXmlED11.getAttribute('ORGACCOUNT_ID'),
                  aXmlZS.selectSingleNode('ZSCH2')));
                if aXmlED11.getAttribute('ESTIMATE_ID') = '' then begin
                  WriteInfo('Не создан - не определен бланк расходов плательщика');
                  Result := False;
                  Exit;
                end;
              end
            end
            else begin
              aXmlED11.setAttribute('ORGACCOUNT_ID',GetLicAccSs(aXmlED11.getAttribute('RECIPIENT_ID'),
                '5', aXmlIK.getAttribute('LS_UBP')));
              if aXmlED11.getAttribute('ORGACCOUNT_ID') = '' then begin
                WriteInfo('Не создан - не определен референс счета для финансирования');
                Result := False;
                Exit;
              end
              else begin
                // определяем бланк расходов
                aXmlED11.setAttribute('ESTIMATE_ID', GetEstimateIdSs(aXmlED11.getAttribute('BUDGET_ID'),
                  orgId, aXmlED11.getAttribute('ORGACCOUNT_ID')));
                if aXmlED11.getAttribute('ESTIMATE_ID') = '' then begin
                  WriteInfo('Не создан - не определен бланк расходов плательщика');
                  Result := False;
                  Exit;
                end;
              end;
            end;
          end;
        end
        else
        begin
          WriteInfo('Не создан - не определен референс бюджетополучателя');
          Result := False;
          Exit;
        end;
      end
      else begin
        WriteInfo('Не создан - не определен референс бюджетополучателя');
        Result := False;
        Exit;
      end;

      // exchange #2932 - описание счета для финансирования на закладке ГРБС
      FillOrgAccountED11( VarToStr( aXmlED11.GetAttribute( 'ORGACCOUNT_ID')), aXmlED11);

      // exchange #2549
      // выборка руководителя с флагом актуальности
      GetRespersonEx(aXmlED11.getAttribute('RECIPIENT_ID'),'-2' , Fio, Dolzhnost);
      aXmlED11.setAttribute('CHEQUE_FIO_BOSS_STR', Fio);
      aXmlED11.setAttribute('CHEQUE_BOSS_POST', Dolzhnost);
      // exchange #2549
      // выборка бух. с флагом актуальности
      GetRespersonEx(aXmlED11.getAttribute('RECIPIENT_ID'),'-3' , Fio, Dolzhnost);
      aXmlED11.setAttribute('CHEQUE_FIO_BUHGALT_STR', Fio);
      aXmlED11.setAttribute('CHEQUE_BUHGALT_POST', Dolzhnost);
      aXmlED11.setAttribute('RESPPERSON_SIG_DATE', aXmlED11.getAttribute('DOC_DATE'));
      // заполнение реквизитов чека - из первого блока ZSCH1
      aXmlED11.setAttribute('CHEQUE_NUM', aXmlZS.childNodes.item[0].getAttribute('CHECK_NOM'));
      aXmlED11.setAttribute('CHEQUE_SER', aXmlZS.childNodes.item[0].getAttribute('CHECK_SER'));
      aXmlED11.setAttribute('CHEQUE_DATE', aXmlZS.childNodes.item[0].getAttribute('DATE_CHECK'));
      if aXmlED11.getAttribute('CHEQUE_DATE') <> '' then
        aXmlED11.setAttribute('CHEQUE_DATE',
          DateTimeToXml(StrToDate(aXmlED11.getAttribute('CHEQUE_DATE'))));
      aXmlED11.setAttribute('CHEQUE_ENDURANCE_DATE', aXmlZS.childNodes.item[0].getAttribute('DATE_CHECK_LIM'));
      if aXmlED11.getAttribute('CHEQUE_ENDURANCE_DATE') <> '' then
        aXmlED11.setAttribute('CHEQUE_ENDURANCE_DATE',
          DateTimeToXml(StrToDate(aXmlED11.getAttribute('CHEQUE_ENDURANCE_DATE'))));

  

      // exchange #2898
      // обработка разделов ZSCH1
      if NOT Load_IK_ZSCH1_2898( aXmlED11, aXmlZS)
        then EXIT;

      // заполнение блока "Расходование"
      WriteLog('Заполнение данных получателя', True);
      WriteLog('Поиск референса получателя и референса счета получателя', True);
      //поиск референса получателя
      XmlOrg := GetOrgByCashAcc(aXmlED11.getAttribute('ORGACCOUNT_ID'));
      if XmlOrg.documentElement.childNodes.Length = 0 then
      begin
        WriteInfo('Не создан - не заполнен "Счет для наличных" в карточке счета для финансирования');
        Result := False;
        Exit;
      end
      else begin
        XmlOrg := XmlOrg.documentElement.childNodes.Item[0];
        aXmlED11.setAttribute('REC_TAXCODE', XmlOrg.getAttribute('TAXCODE'));
        aXmlED11.setAttribute('REC_KPP', XmlOrg.getAttribute('KPP'));
        aXmlED11.setAttribute('REC_NAME', XmlOrg.getAttribute('ORG_DESCRIPTION'));
        aXmlED11.setAttribute('REC_ID', XmlOrg.getAttribute('ORG_ID'));
        WriteLog('Найден получатель с референсом: ' + XmlOrg.getAttribute('ORG_ID'));
        // заполняем поля по счету блока расходования
        aXmlED11.setAttribute('REC_ACCOUNT', XmlOrg.getAttribute('ACCOUNT_NUMBER'));
        aXmlED11.setAttribute('REC_ACC_ID', XmlOrg.getAttribute('ACCOUNT_ID'));
        aXmlED11.setAttribute('REC_BIC', XmlOrg.getAttribute('BIC'));
        aXmlED11.setAttribute('REC_B_NAME', XmlOrg.getAttribute('BANK_DESCRIPTION'));
        aXmlED11.setAttribute('REC_CORACCOUNT', XmlOrg.getAttribute('CORACCOUNT'));
        WriteLog('Найден счет получателя с референсом: ' + XmlOrg.getAttribute('ACCOUNT_ID'));
      end;
      //Определяем тип бланка расходов
      Est_Kind := 'EST_KIND' + QueryField('Select EstKind_Id From Estimate Where Id = ?',
        [aXmlED11.getAttribute('ESTIMATE_ID')], 'ESTKIND_ID');
      aXmlED11.setAttribute('EST_KIND', Est_Kind);
      aXmlED11.setAttribute('CODE_GRBS', aXmlZS.selectSingleNode('ZSCH2').getAttribute('KADMR_CODE'));
      aXmlED11.setAttribute('ORG_GRBS', '');
      Kbk := QueryXml('Select Kl.* From Kadm_lines Kl Left Join kadm K on K.Id = Kl.master_id' +
        ' Where Kl.Budget_Id = ? and K.Code = ? order by Kl.Begin_Date desc', [aXmlED11.getAttribute('BUDGET_ID'),
        aXmlZS.selectSingleNode('ZSCH2').getAttribute('KADMR_CODE')]);
      Kbk := Kbk.ChildNodes.Item[0];
      if Kbk.ChildNodes.Length = 1 then
        aXmlED11.setAttribute('ORG_GRBS', Kbk.ChildNodes.item[0].getAttribute('DESCRIPTION'))
      else begin
        for i := 0 to Kbk.ChildNodes.Length -1 do
        begin
          Kbk := Kbk.ChildNodes.item[i];
          if Kbk.getAttribute('END_DATE') = '' then
            aXmlED11.setAttribute('ORG_GRBS', Kbk.getAttribute('DESCRIPTION'))
          else if (Work_Date >= XmlToDateTime(Kbk.getAttribute('BEGIN_DATE'))) and
            (Work_Date <= XmlToDateTime(Kbk.getAttribute('END_DATE'))) then
            aXmlED11.setAttribute('ORG_GRBS', Kbk.getAttribute('DESCRIPTION'));
          Kbk := Kbk.parentNode;
        end;
        if aXmlED11.getAttribute('ORG_GRBS') = '' then
          aXmlED11.setAttribute('ORG_GRBS', Kbk.selectSingleNode('ROW').getAttribute('DESCRIPTION'));
      end;
      //ищем разрешение и его строку по расходной классифкации(по первой строке)
      //если нашли, при создании будем проверять каждую строку
      Permission := GetPermissionRash(aXmlED11, aXmlZS.selectSingleNode('ZSCH2'), True);
      //Exchange #1997
      if VarIsNull(Permission) and param_UseGroupBuh25 then
        //Ищем разрешение с учетом групп по бухгалтерии
        Permission := GetPermissionRashUseGroupBuh(aXmlED11, aXmlZS.selectSingleNode('ZSCH2'), True);
      if not VarIsNull(Permission) then
      begin
        // создаем по разрешению
        aXmlED11 := aXmlED11.appendChild(aXmlED11.ownerDocument.createElement('LINES'));
        for i := 0 to aXmlZS.ChildNodes.Length - 1 do
        begin
          aXmlZS := aXmlZS.ChildNodes.Item[i];
          //ищем разрешение для данной строки
          if aXmlZS.NodeName = 'ZSCH2' then
          begin
          {
            // exchange #3062 - перенос проверки строки сюда
            if NOT CheckKBK_ZSCH2( aXmlZS, xBudgetID)
              then EXIT;
           }
            Permission := GetPermissionRash(aXmlED11.parentNode, aXmlZS, True);
            if VarIsNull(Permission) then
            begin
              if param_UseGroupBuh25 then
              begin
                Permission := GetPermissionRashUseGroupBuh(aXmlED11.parentNode, aXmlZS, True);
                if VarIsNull(Permission) then
                begin
                  WriteInfo('Не создан - не определено разрешение на открытие лс');
                  aXmlZS := aXmlZS.parentNode.parentNode;
                  Exit;
                end;
              end
              else begin
                WriteInfo('Не создан - не определено разрешение на открытие лс');
                aXmlZS := aXmlZS.parentNode.parentNode;
                Exit;
              end;
            end;
            aXmlED11 := aXmlED11.appendChild(aXmlED11.ownerDocument.createElement('LINE'));
            aXmlED11.setAttribute('DOCUMENTCLASS_ID', aXmlED11.parentNode.parentNode.getAttribute('class'));
            aXmlED11.setAttribute('RECIPIENT_ID', Permission.getAttribute('RECIPIENT_ID'));
            aXmlED11.setAttribute('ESTIMATE_ID', aXmlED11.parentNode.parentNode.getAttribute('ESTIMATE_ID'));
            aXmlED11.setAttribute('ORGACCOUNT_ID', aXmlED11.parentNode.parentNode.getAttribute('ORGACCOUNT_ID'));
            aXmlED11.setAttribute('QUEUE_KIND',aXmlED11.parentNode.parentNode.getAttribute('QUEUE_KIND'));
            aXmlED11.setAttribute('SYMBCASH_ID', aXmlED11.parentNode.parentNode.getAttribute('SYMBCASH_ID'));
            aXmlED11.setAttribute('FK_FLAG',aXmlED11.parentNode.parentNode.getAttribute('FK_FLAG'));
            aXmlED11.setAttribute('CHEQUE_FIO_BOSS_STR', aXmlED11.parentNode.parentNode.getAttribute('CHEQUE_FIO_BOSS_STR'));
            aXmlED11.setAttribute('CHEQUE_BOSS_POST', aXmlED11.parentNode.parentNode.getAttribute('CHEQUE_BOSS_POST'));
            aXmlED11.setAttribute('CHEQUE_FIO_BUHGALT_STR', aXmlED11.parentNode.parentNode.getAttribute('CHEQUE_FIO_BUHGALT_STR'));
            aXmlED11.setAttribute('CHEQUE_BUHGALT_POST', aXmlED11.parentNode.parentNode.getAttribute('CHEQUE_BUHGALT_POST'));
            aXmlED11.setAttribute('AMOUNT', Format('%0.2f', [StrToCurrDef(aXmlZS.getAttribute('SUMR_KBK'), 0)]));
              aXmlED11.parentNode.parentNode.setAttribute('AMOUNT',
              StrToCurrDef(aXmlED11.parentNode.parentNode.getAttribute('AMOUNT'), 0) +
              StrToCurrDef(aXmlED11.getAttribute('AMOUNT'), 0));
            aXmlED11.setAttribute('DESCRIPTION_LINES', aXmlZS.getAttribute('PURPOSE'));
            //Exchange#2218 - поиск договора при авторазборе назначения платежа
            if param_Search_Bo then
            begin
              WriteLog('Поиск бюджетного обязательства в назначении платежа');
              ParceDescription(aXmlZS.getAttribute('PURPOSE'), Contract_Name, Contract_Number,
                Contract_Date, Payment_Name, Payment_Number, Payment_Date);
              if (Trim(Contract_Name) = '') or (Trim(Contract_Number) = '') or (Contract_Date = '') then
                WriteInfo('Невозможно распознать реквизиты документа-основания в назначении платежа', True)
              else begin
                // проводим поиск по типу наименования договора
                Contract := GetContract(Contract_Name, Contract_Number, Contract_Date, BudgetId);
                if Contract.documentElement.childNodes.Length <> 1 then
                  WriteInfo('Не удалось однозначно определить ЭД "Договор", автоподстановка ' +
                  ' бюджетного обязательства не производится')
                else
                  WriteInfo('Найден ЭД "Договор" №' + Contract_Number + ' от ' + Contract_Date, True);
              end;
            end
            else
              WriteLog('Автоподстановка бюджетного обязательства не производится (выключен'+
                ' параметр "Автоподстановка бюджетного обязательства")');
            aXmlED11.setAttribute('NOTE', aXmlZS.getAttribute('NOTE'));
            aXmlED11.setAttribute('KFSR_CODE', aXmlZS.getAttribute('KFSR_CODE'));
            aXmlED11.setAttribute('KCSR_CODE', aXmlZS.getAttribute('KCSR_CODE'));
            aXmlED11.setAttribute('KVR_CODE', aXmlZS.getAttribute('KVR_CODE'));
            // exchange #3062 - удален косгу
            // поле копируется при наличии
            CopyNodeAttributeEx( aXmlED11, 'KESR_CODE', aXmlZS, 'KESR_CODE');
  //          aXmlED11.setAttribute('KESR_CODE', aXmlZS.getAttribute('KESR_CODE'));
            aXmlED11.setAttribute('KADMR_CODE', aXmlZS.getAttribute('KADMR_CODE'));
            aXmlED11.setAttribute('FSR_ID', Permission.getAttribute('FSR_ID'));
            aXmlED11.setAttribute('KDF_CODE', Permission.getAttribute('KDF_CODE'));
            aXmlED11.setAttribute('KDE_CODE', Permission.getAttribute('KDE_CODE'));
            aXmlED11.setAttribute('KDR_CODE', Permission.getAttribute('KDR_CODE'));
            aXmlED11.setAttribute('ANAL_KIND', aXmlZS.getAttribute('ANAL_KIND'));
            aXmlED11.setAttribute('PURPOSEFULGRANT_ID', aXmlZS.getAttribute('PURPOSEFULGRANT_ID'));
            if (aXmlED11.getAttribute('PURPOSEFULGRANT_ID') = '') and
              (isPurposeFulgrantAutoFill('11', Est_Kind)) then
                aXmlED11.setAttribute('PURPOSEFULGRANT_ID', PurposeFulgrantAutoFill(aXmlZS,
                  aXmlED11.parentNode.parentNode.getAttribute('BUDGET_ID')));
            aXmlED11.setAttribute('DIRECTION_ID', '');
            //1-Контролировать, 0-нет, 2-запрещать
            if isDirectionAutoFill and (isDirectionControl(aXmlED11.getAttribute('DOCUMENTCLASS_ID'),
              aXmlED11.parentNode.parentNode.getAttribute('EST_KIND')) <> '2') then
              aXmlED11.setAttribute('DIRECTION_ID', DirectionAutoFill(aXmlED11,
                aXmlED11.parentNode.parentNode.getAttribute('BUDGET_ID')));
              aXmlED11.setAttribute('PERMISSIONLINE_ID', Permission.getAttribute('PERMISSIONLINE_ID'));
            aXmlED11.setAttribute('FUNDSOURCE_ID', Permission.getAttribute('FUNDSOURCE_ID'));
            // Exchange#2218 - поиск БО
            if Contract.documentElement.childNodes.Length = 1 then
            begin
              // проводим поиск БО на основании строки кбк и ранее найденного договора
              BO := GetBoByContractAndKBK(Contract.documentElement.childNodes.Item[0], aXmlED11);
              if BO.documentElement.childNodes.Length = 1 then
              begin
                aXmlED11.setAttribute('BO_ID', BO.documentElement.childNodes.Item[0].getAttribute('ID'));
                // проставляем ссылку на БО только в однострочных ЭД
                if aXmlZS.parentNode.selectNodes('ZSCH2').Length = 1 then
                  aXmlED11.parentNode.parentNode.setAttribute('BO_ID', aXmlED11.getAttribute('BO_ID'));
              end
              else
                WriteLog('Не найдено бюджетное обязательство для строки');
              // если стоит галка "Оплата в разрезе выставленых счетов" проводим поиск выставленного счета
              if Contract.documentElement.childNodes.Item[0].getAttribute('PAYABLE') = 1 then
              begin
                Condebts := GetCondebts(Payment_Name, Payment_Number, Payment_Date,
                  Contract.documentElement.childNodes.Item[0].getAttribute('ID'));
                if Condebts.documentElement.childNodes.Length = 1 then
                begin
                  Condebts := Condebts.documentElement.childNodes.Item[0];
                  aXmlED11.parentNode.parentNode.setAttribute('CONDEBTS_ID', Condebts.getAttribute('ID'));
                  if Condebts.getAttribute('ADVMARK') = 1 then
                    aXmlED11.parentNode.parentNode.setAttribute('ADVANCE_PAYMENT', 1)
                  else
                    aXmlED11.parentNode.parentNode.setAttribute('ADVANCE_PAYMENT', 0);
                end
                else
                  WriteLog('Не найден выставленный счет');
              end;
            end;
            aXmlED11 := aXmlED11.parentNode;
          end;
          aXmlZS := aXmlZS.parentNode;
        end;
      end
      else begin
        if aXmlZS.selectSingleNode('ZSCH2').getAttribute('KOD_IST_KBK') = 2 then
        begin
          WriteInfo('Не создан - не определено разрешение на открытие лс');
          Result := False;
          Exit;
        end
        else
        begin
          // создаем ЗОР без разрешения для КИФ=1
          aXmlED11 := aXmlED11.appendChild(aXmlED11.ownerDocument.createElement('LINES'));
          for i := 0 to aXmlZS.ChildNodes.Length - 1 do
          begin
            aXmlZS := aXmlZS.ChildNodes.Item[i];
            if aXmlZS.NodeName = 'ZSCH2' then
            begin
            {
              // exchange #3062 - перенос проверки строки сюда
              if NOT CheckKBK_ZSCH2( aXmlZS, xBudgetID)
                then EXIT;
             }
              aXmlED11 := aXmlED11.appendChild(aXmlED11.ownerDocument.createElement('LINE'));
              aXmlED11.setAttribute('DOCUMENTCLASS_ID', aXmlED11.parentNode.parentNode.getAttribute('class'));
              aXmlED11.setAttribute('ESTIMATE_ID', aXmlED11.parentNode.parentNode.getAttribute('ESTIMATE_ID'));
              aXmlED11.setAttribute('ORGACCOUNT_ID', aXmlED11.parentNode.parentNode.getAttribute('ORGACCOUNT_ID'));
              aXmlED11.setAttribute('RECIPIENT_ID', aXmlED11.parentNode.parentNode.getAttribute('RECIPIENT_ID'));
              aXmlED11.setAttribute('QUEUE_KIND',aXmlED11.parentNode.parentNode.getAttribute('QUEUE_KIND'));
              aXmlED11.setAttribute('SYMBCASH_ID', aXmlED11.parentNode.parentNode.getAttribute('SYMBCASH_ID'));
              aXmlED11.setAttribute('FK_FLAG',aXmlED11.parentNode.parentNode.getAttribute('FK_FLAG'));
              aXmlED11.setAttribute('CHEQUE_FIO_BOSS_STR', aXmlED11.parentNode.parentNode.getAttribute('CHEQUE_FIO_BOSS_STR'));
              aXmlED11.setAttribute('CHEQUE_BOSS_POST', aXmlED11.parentNode.parentNode.getAttribute('CHEQUE_BOSS_POST'));
              aXmlED11.setAttribute('CHEQUE_FIO_BUHGALT_STR', aXmlED11.parentNode.parentNode.getAttribute('CHEQUE_FIO_BUHGALT_STR'));
              aXmlED11.setAttribute('CHEQUE_BUHGALT_POST', aXmlED11.parentNode.parentNode.getAttribute('CHEQUE_BUHGALT_POST'));
              aXmlED11.setAttribute('AMOUNT', Format('%0.2f', [StrToCurrDef(aXmlZS.getAttribute('SUMR_KBK'), 0)]));
              aXmlED11.parentNode.parentNode.setAttribute('AMOUNT',
                StrToCurrDef(aXmlED11.parentNode.parentNode.getAttribute('AMOUNT'), 0) +
                StrToCurrDef(aXmlED11.getAttribute('AMOUNT'), 0));
              aXmlED11.setAttribute('DESCRIPTION_LINES', aXmlZS.getAttribute('PURPOSE'));
              //Exchange#2218 - поиск договора при авторазборе назначения платежа
              if param_Search_Bo then
              begin
                WriteLog('Поиск бюджетного обязательства в назначении платежа');
                ParceDescription(aXmlZS.getAttribute('PURPOSE'), Contract_Name, Contract_Number,
                  Contract_Date, Payment_Name, Payment_Number, Payment_Date);
                if (Trim(Contract_Name) = '') or (Trim(Contract_Number) = '') or (Contract_Date = '') then
                  WriteInfo('Невозможно распознать реквизиты документа-основания в назначении платежа', True)
                else begin
                  // проводим поиск по типу наименования договора
                  Contract := GetContract(Contract_Name, Contract_Number, Contract_Date, BudgetId);
                  if Contract.documentElement.childNodes.Length <> 1 then
                    WriteInfo('Не удалось однозначно определить ЭД "Договор", автоподстановка ' +
                    ' бюджетного обязательства не производится')
                  else
                    WriteInfo('Найден ЭД "Договор" №' + Contract_Number + ' от ' + Contract_Date, True);
                end;
              end
              else
                WriteLog('Автоподстановка бюджетного обязательства не производится (выключен'+
                  ' параметр "Автоподстановка бюджетного обязательства")');
              aXmlED11.setAttribute('NOTE', aXmlZS.getAttribute('NOTE'));
              aXmlED11.setAttribute('KFSR_CODE', aXmlZS.getAttribute('KFSR_CODE'));
              aXmlED11.setAttribute('KCSR_CODE', aXmlZS.getAttribute('KCSR_CODE'));
              aXmlED11.setAttribute('KVR_CODE', aXmlZS.getAttribute('KVR_CODE'));
              // exchange #3062 - удален косгу
              // поле копируется при наличии
              CopyNodeAttributeEx( aXmlED11, 'KESR_CODE', aXmlZS, 'KESR_CODE');
  //            aXmlED11.setAttribute('KESR_CODE', aXmlZS.getAttribute('KESR_CODE'));
              aXmlED11.setAttribute('KADMR_CODE', aXmlZS.getAttribute('KADMR_CODE'));
              aXmlED11.setAttribute('ANAL_KIND', aXmlZS.getAttribute('ANAL_KIND'));

              // exchange #2449
              // для решения задачи проверки строки с кодом цели, ножно в начале
              // заполнить код цели в строке - перенос кода сюда.
               aXmlED11.setAttribute('PURPOSEFULGRANT_ID', aXmlZS.getAttribute('PURPOSEFULGRANT_ID'));
              if (aXmlZS.getAttribute('PURPOSEFULGRANT_ID') = '') and
                (isPurposeFulgrantAutoFill('11', Est_Kind)) then
                aXmlED11.setAttribute('PURPOSEFULGRANT_ID', PurposeFulgrantAutoFill(aXmlZS,
                  aXmlED11.parentNode.parentNode.getAttribute('BUDGET_ID')));

              // Exchange#2143
              Line := GetLineExpbudget(aXmlED11, aXmlED11.parentNode.parentNode.getAttribute('BUDGET_ID'));
              if Line.documentElement.childNodes.Length = 1 then
              begin
                Line := Line.documentElement.childNodes.item[0];
                aXmlED11.setAttribute('KDF_CODE', Line.getAttribute('KDF_CODE'));
                aXmlED11.setAttribute('KDE_CODE', Line.getAttribute('KDE_CODE'));
                aXmlED11.setAttribute('KDR_CODE', Line.getAttribute('KDR_CODE'));
                aXmlED11.setAttribute('FSR_ID', Line.getAttribute('FSR_ID'));
                // exchange #3062 - удален косгу
                // теперь косгу копируем из бюджетной строки
                CopyNodeAttributeEx( aXmlED11, 'KESR_CODE', Line, 'KESR_CODE');
              end
              else begin
                aXmlED11.setAttribute('KDF_CODE', aXmlZS.getAttribute('KDF_CODE'));
                aXmlED11.setAttribute('KDE_CODE', aXmlZS.getAttribute('KDE_CODE'));
                aXmlED11.setAttribute('KDR_CODE', aXmlZS.getAttribute('KDR_CODE'));
                aXmlED11.setAttribute('FSR_ID', aXmlZS.getAttribute('FSR_ID'));
              end;
  {
              aXmlED11.setAttribute('PURPOSEFULGRANT_ID', aXmlZS.getAttribute('PURPOSEFULGRANT_ID'));
              if (aXmlZS.getAttribute('PURPOSEFULGRANT_ID') = '') and
                (isPurposeFulgrantAutoFill('11', Est_Kind)) then
                aXmlED11.setAttribute('PURPOSEFULGRANT_ID', PurposeFulgrantAutoFill(aXmlZS,
                  aXmlED11.parentNode.parentNode.getAttribute('BUDGET_ID')));
  }
              aXmlED11.setAttribute('DIRECTION_ID', '');
              //1-Контролировать, 0-нет, 2-запрещать
              if isDirectionAutoFill and (isDirectionControl(aXmlED11.getAttribute('DOCUMENTCLASS_ID'),
                aXmlED11.parentNode.parentNode.getAttribute('EST_KIND')) <> '2') then
                aXmlED11.setAttribute('DIRECTION_ID', DirectionAutoFill(aXmlED11,
                  aXmlED11.parentNode.parentNode.getAttribute('BUDGET_ID')));
              // Exchange#2218 - поиск БО
              if Contract.documentElement.childNodes.Length = 1 then
              begin
                // проводим поиск БО на основании строки кбк и ранее найденного договора
                BO := GetBoByContractAndKBK(Contract.documentElement.childNodes.Item[0], aXmlED11);
                if BO.documentElement.childNodes.Length = 1 then
                begin
                  aXmlED11.setAttribute('BO_ID', BO.documentElement.childNodes.Item[0].getAttribute('ID'));
                  // проставляем ссылку на БО только в однострочных ЭД
                  if aXmlZS.parentNode.selectNodes('ZSCH2').Length = 1 then
                    aXmlED11.parentNode.parentNode.setAttribute('BO_ID', aXmlED11.getAttribute('BO_ID'));
                end
                else
                  WriteLog('Не найдено бюджетное обязательство для строки');
                // если стоит галка "Оплата в разрезе выставленых счетов" проводим поиск выставленного счета
                if Contract.documentElement.childNodes.Item[0].getAttribute('PAYABLE') = 1 then
                begin
                  Condebts := GetCondebts(Payment_Name, Payment_Number, Payment_Date,
                    Contract.documentElement.childNodes.Item[0].getAttribute('ID'));
                  if Condebts.documentElement.childNodes.Length = 1 then
                  begin
                    Condebts := Condebts.documentElement.childNodes.Item[0];
                    aXmlED11.parentNode.parentNode.setAttribute('CONDEBTS_ID', Condebts.getAttribute('ID'));
                    if Condebts.getAttribute('ADVMARK') = 1 then
                      aXmlED11.parentNode.parentNode.setAttribute('ADVANCE_PAYMENT', 1)
                    else
                      aXmlED11.parentNode.parentNode.setAttribute('ADVANCE_PAYMENT', 0);
                  end
                  else
                    WriteLog('Не найден выставленный счет');
                end;
              end;
              aXmlED11 := aXmlED11.parentNode;
            end;
            aXmlZS := aXmlZS.parentNode;
          end;
        end;
      end;
      aXmlED11.parentNode.setAttribute('AMOUNT', Format('%0.2f',
        [StrToCurrDef(aXmlED11.parentNode.getAttribute('AMOUNT'), 0)]));

      aXmlZS := aXmlZS.ownerDocument.documentElement;
      aXmlED11 := aXmlED11.ownerDocument;

      // exchange #2898
      // добавляем символ кассы в первую строку, если раздел ZSCH1 и ZSCH2 один
      UpdateDocLines_IK_ZSCH1_ZSCH2_2898( aXmlED11.documentElement);

      Result := True;
      except
        ExceptionProc( 'CreateDoc11ZS');
    end;

end;

begin
end.
