procedure CreateDoc24(aXmlSPRR, aXmlIK: Variant);
var
  xmlOrg, xmlAcc, BudgXml: Variant;
  i: Integer;
  xErrors: boolean;
  xOrgID: string;
begin

    try
      WriteLog('Формирование документа ...', True);
      WriteInfo('АЦК: "Приложение к выписке кредитовое" № ' +
        aXmlSPRR.getAttribute('DOC_NUMBER') + ' Дата: ' +
          aXmlSPRR.getAttribute('DOC_DATE'), True);
      Doc := CreateOleObject('Microsoft.XmlDom');
      Doc := Doc.appendChild(aXmlSPRR.cloneNode(False));
      Doc.setAttribute('F_PARENTCLASS', ''); //Класс документа, среди которых надо искать пару.
      Doc.setAttribute('USEGROUPBUH25', param_UseGroupBuh25);
      Doc.setAttribute('action', 'insert');
      Doc.setAttribute('class',24);
      Doc.setAttribute('FOREIGN_KEY', Doc.getAttribute('GUID_FK'));
      Doc.setAttribute('DECLINE', 'False');
      Doc.setAttribute('DOC_NUMBER', Trim(aXmlSPRR.getAttribute('DOC_NUMBER')));

      // exchange #2604
      // для ЭД 24го класса значение Электронно не допустимо.
      // поскольку в файле не приходит, то поле и не заполняем.
    //  Doc.setAttribute('PAYKIND', 1); //всегда 1 - в файле не приходит

      Doc.setAttribute('CARRY_DATE', DateTimeToXml(StrToDate(aXmlSPRR.getAttribute('DOC_DATE'))));
      Doc.setAttribute('QUEUE_KIND', '');
      Doc.setAttribute('F_CRUSH24', IfThen(param_CrushDoc24, 'True', 'False'));
      Doc.setAttribute('F_SS', 'False');// Flag спец.средств - всегда бюджетный
      // Заполнение блока "Плательщик"
      Doc.setAttribute('PAY_ID', '');
      Doc.setAttribute('PAY_ACCOUNT', '');
      Doc.setAttribute('PAY_ACC_ID', '');
      //Заполнение блока "Получатель из выписки"
      WriteLog('Заполнение данных получателя из выписки', True);
      Doc.setAttribute('ORG_ID', '');
      Doc.setAttribute('ORG_TAXCODE', aXmlIK.getAttribute('INN_UBP'));
      Doc.setAttribute('ORG_KPP', aXmlIK.getAttribute('KPP_UBP'));
      Doc.setAttribute('ORG_NAME', aXmlIK.getAttribute('NAME_UBP_PUBP'));
      if Doc.getAttribute('ORG_TAXCODE') <> '' then
      begin
        XmlOrg := GetOrgByTaxKpp(Doc.getAttribute('ORG_TAXCODE'),
          Doc.getAttribute('ORG_KPP'), '24', 'REC', False, Doc);
        if (XmlOrg.documentElement.childNodes.length = 1)
          and IsActual(XmlOrg.documentElement.childNodes.Item[0].getAttribute('ID'),
            Doc.getAttribute('F_BUDGET_ID')) then
          Doc.setAttribute('ORG_ID',
            xmlOrg.documentElement.childNodes.item[0].getAttribute('ID'));
      end;
      //Заполнение блока "Получатель"
      WriteLog('Заполнение данных получателя', True);
      if Doc.getAttribute('ORG_ID') <> '' then
      begin
        Doc.setAttribute('REC_ID', Doc.getAttribute('ORG_ID'));
        Doc.setAttribute('REC_TAXCODE', Doc.getAttribute('ORG_TAXCODE'));
        Doc.setAttribute('REC_KPP', Doc.getAttribute('ORG_KPP'));
        Doc.setAttribute('REC_NAME', Doc.getAttribute('ORG_NAME'));
        Doc.setAttribute('REC_ACCOUNT', aXmlIK.getAttribute('LS_UBP'));
        //Cчет
        Doc.setAttribute( 'REC_ACC_ID',
                          GetLicAcc( Doc.getAttribute('REC_ID'),
                                    '5',
                                    aXmlIK.getAttribute('LS_UBP')));
        if Doc.getAttribute('REC_ACC_ID') <> '' then
        begin
          XmlAcc := GetAccAllRekByAccId(Doc.getAttribute('REC_ACC_ID'));
          XmlAcc := XmlAcc.documentElement.childNodes.Item[0];
          Doc.setAttribute('REC_OFK_NAME', XmlAcc.getAttribute('OFK_DESCRIPTION'));
          Doc.setAttribute('REC_UFK_NAME', XmlAcc.getAttribute('UFK_DESCRIPTION'));
          Doc.setAttribute('REC_UFK_ACC_ID', XmlAcc.getAttribute('UFK_ACC_ID'));
          Doc.setAttribute('REC_UFK_ACCOUNT', XmlAcc.getAttribute('UFK_ACCOUNT_NUMBER'));
          Doc.setAttribute('REC_BIC', XmlAcc.getAttribute('BIC'));
          Doc.setAttribute('REC_B_NAME', XmlAcc.getAttribute('B_NAME'));
          Doc.setAttribute('REC_CORACCOUNT', XmlAcc.getAttribute('CORACCOUNT'));
          WriteLog('Найден счет получателя с референсом: ' + Doc.getAttribute('REC_ACC_ID'));
        end
        else
          WriteLog('Референс счета получателя не опеределен', True);
      end
      else begin
      // --- Получатель (владелец счета) ---
        BudgXml := QueryXml(sqlAccByBudg, [BudgetId]);
        BudgXml := BudgXml.documentElement.childNodes.Item[0];
        Doc.setAttribute('REC_ID', BudgXml.getAttribute('ID'));
        Doc.setAttribute('REC_TAXCODE', BudgXml.getAttribute('TAXCODE'));
        Doc.setAttribute('REC_KPP', BudgXml.getAttribute('KPP'));
        Doc.setAttribute('REC_NAME', BudgXml.getAttribute('DESCRIPTION'));
        // Cчет получателя
        Doc.setAttribute('REC_ACCOUNT', BudgXml.getAttribute('ACCOUNT_NUMBER'));
        Doc.setAttribute('REC_ACC_ID', BudgXml.getAttribute('ACC_ID'));
        // реквизиты банка получателя
        Doc.setAttribute('REC_BIC', BudgXml.getAttribute('BIC'));
        Doc.setAttribute('REC_B_NAME', BudgXml.getAttribute('BANK_NAME'));
        Doc.setAttribute('REC_CORACCOUNT', BudgXml.getAttribute('CORACCOUNT'));
      end;
      Doc.setAttribute('DESCRIPTION', 'Создано на основании Справки ф.0504833 №' +
        aXmlSPRR.getAttribute('DOC_NUMBER') + ' от ' + aXmlSPRR.getAttribute('DOC_DATE'));
      //получатель доходов, т.к доходы по идее не должны приходить
      Doc.setAttribute('F_INCRECORGID', '');
      Doc.setAttribute('F_INCRECACCID', '');
      //инициализим сумму шапки
      Doc.setAttribute('AMOUNT', 0.00);

      // exchange #3075 фт-1.2.2
      // сохраняем орг.получателя из выписки, а если не указано - получателя.
      // вместо этого берем получателя, поскольку получатель = получатель
      // из выписки, если ORG_ID <> ''
      xOrgID := GetNodeAttributeEx( Doc, 'REC_ID');

      //-------------------------------------------------------------------
      //Заполнение строк приложения
      Doc := Doc.appendChild(Doc.ownerDocument.createElement('PAYORDERLINE'));

      // exchange #3062
      // изменена проверка кбк
      // проверяются все строки на наличие ошибок, а не до первой.
      xErrors := FALSE;

      for i := 0 to aXmlSPRR.childNodes.Length - 1 do begin
        aXmlSPRR := aXmlSPRR.childNodes.Item[i];
        Doc := Doc.appendChild(Doc.ownerDocument.createElement('PAYORDERLINE'));

        // exchange #3062
        if NOT CheckKBK_Line_SPRR( Doc,
                                   aXmlSPRR,
                                   BudgetId,
                                   param_ShemaLoadDopKbk,
                                   xOrgID)
          then xErrors := TRUE;
{
        Doc.setAttribute('KBK', aXmlSPRR.getAttribute('KBK'));
        Doc.setAttribute('TYPE_KBK', aXmlSPRR.getAttribute('TYPE_KBK'));
        Default_F_Line(Doc);
        if CheckKBK(Doc, 'KBK', BudgetId, param_ShemaLoadDopKbk) then
          ChangeKbk := True;
        if (ChangeKbk) and (not param_changeKBK) then
        begin
          WriteInfo('Не создан - найдены КБК в файле, которые отсутствуют в базе АЦК.');
          Exit;
        end;
        if ChangeKbk then
          WriteLog('Отсутствующие КБК заменены на 0.')
        else
          WriteLog('Пройдена успешно.');
}
        // предзаполнение
        FillElementBySchemaLoad(Doc, aXmlSPRR);
        Doc.parentNode.parentNode.setAttribute('AMOUNT',
          Doc.parentNode.parentNode.getAttribute('AMOUNT') +
            StrToCurr(Doc.getAttribute('AMOUNT')));
        AddReplaceAttrVal(aXmlSPRR, Doc);
        Doc.setAttribute('DESCRIPTION', aXmlSPRR.getAttribute('NAME_OPER'));
        // Exchange#2079 для доходной классификации в строки 24 класса проставляем плательщика и получателя
        if (Doc.parentNode.parentNode.getAttribute('class') = '24') and (Doc.getAttribute('ANAL_KIND') = '1') then
        begin
          if Doc.parentNode.parentNode.getAttribute('F_INCRECORGID') <> '' then
            Doc.setAttribute('RECEIVER_ID', Doc.parentNode.parentNode.getAttribute('F_INCRECORGID'));
          if Doc.parentNode.parentNode.getAttribute('PAY_ID') <> '' then
            Doc.setAttribute('PAYER_ID', Doc.parentNode.parentNode.getAttribute('PAY_ID'));
        end;
        Doc := Doc.parentNode;
        aXmlSPRR := aXmlSPRR.parentNode;
      end;//for//

      Doc.parentNode.setAttribute('AMOUNT',
        Format('%.2f', [StrToCurr(Doc.parentNode.getAttribute('AMOUNT'))]));


      // exchange #3062
      if xErrors then begin
        WriteInfo('Не создан - найдены КБК в файле, которые отсутствуют в базе АЦК.');
        EXIT;
      end;

      Doc := Doc.ownerDocument;
      Doc := Doc.documentElement;
      Documents_DebCred(Doc);
      aXmlSPRR := null;
      except
        ExceptionProc( 'CreateDoc24');
    end;

end;


begin
end.
