{------------------------------------------------------------------------------}
{~DoCheckKBK_DetailErrorLine
  детальное описание строки aXmlLine в разделе aXmlTopic
  если для строки была проблема проверки кбк.
  подпрограмма вызывает уже после самой проверки, т.е. сообщение в логе
  о кривом коде уже записано в журнал.
  здесь имеет смысл указать, что ошибка найдена в такой то строке файла.}
procedure DoCheckKBK_DetailErrorLine( aLineNo: integer;
                                      aXmlTopic, aXmlLine: Variant);
begin

    try

      except
        ExceptionProc( 'DoCheckKBK_DetailErrorLine');
    end;

end;
{------------------------------------------------------------------------------}
{~DoCheckKBK
   проверка кбк в строке aXmlLine
   результат:
     =true - все норм;
     =false - есть ошибки.

   exchange #2855 - тфф16.0
   не создавать эд для некоторых условий в файле.
   для случаев, если эд не создавать, кбк не проверяются.

   exchange #2955
   для создания эд 194/195 по блокам ZR,ZS,ZN,ZV код и тип кбк
   в файле могут не указываться, в этом случае эд создается
   с заменой кбк на 0, поэтому, если эти поля пустые и будут
   созданы жд 194/195, проверку кбк отключаем.
   причем здесь версию ТФФ не проверяем.
   эту проверку необходимо выполнять перед проверкой условий
   по exchange #2855

   exchange #2600
   проверка кода цели при проверке КБК по блокам ZR,ZS,ZN,ZV.
   для загрузки ЭД по новому алгоритму, в поле ADD_CLASS находится
   не код цели, а код субсидии, поэтому, при проверке КБК, код цели
   проверять не нужно.
   по умолчанию код цели проверять нужно.
   aWithoutPurposefullgrant:
     =true - КЦ не проверяется
     =false - КЦ проверяется.}
function DoCheckKBK( aXmlLine: Variant;
                     aBudgetId: string;
                     aWithoutPurposefullgrant: boolean;
                     aCheckKES: boolean;
                     aDopKBK: string): boolean;
begin

    try
      // если проверка кбк успешная - выходим сразу
      if NOT CheckKBK(  aXmlLine,
                        'KBK',
                        aBudgetId,
                        aDopKBK, //param_ShemaLoadDopKbk,
                        aWithoutPurposefullgrant,
                        aCheckKES)
        then begin
          Result := TRUE;
          EXIT;
        end;

      // если замена кбк на 0 выполнялась но не допустима - выходим сразу
      if NOT CheckChangesKBKtoZero( aXmlLine) then begin
        Result := FALSE;
        EXIT;
      end;

      Result := TRUE;
      except
        ExceptionProc( 'DoCheckKBK');
    end;

end;
{------------------------------------------------------------------------------}
{~DoNotCheckKBK_
   при игнорировании проверки кбк добавляем атрибут в строку.
   это дает потом исключить проверку по #2855.
   главное заполнить атрибут любым значением, чтобы потом
   проверить его как vartostr( attr) <> '', а не отдельно
   как <>null и <>значение. }
function DoNotCheckKBK_( aXmlLine: Variant): boolean;
begin

    try
      Result := TRUE;

      aXmlLine.SetAttribute( '_ignore_2855_', 'yes');

      except
        ExceptionProc( 'DoNotCheckKBK_');
    end;

end;

begin
end.
