{
     ведение логов + подпрограммы логирования исключения.
    по умолчанию лог не ведется.
}
var

  // флаг наличия исключения. при инициализации флаг сбрасвается, а при
  // выполнении оператора ExceptionLog - устанавливается в TRUE.
  // фактически - это фиксация первого сбоя скрипта.
  vLogException: boolean;
  // наличие критической ошибки
  IsCriticalError: boolean;


{~CriticalError
  включение критической ошибки операций импорта/экспорта.
  в результате, при завершении скрипта будет необходимо отобразить лог
  текущей операции (журнал FileInfo или FileTmp)
  даже если этих журналов не будет, все равно нужно предупредить о
  возникновении сбоя.}
procedure CriticalError;
begin

  IsCriticalError := TRUE;
end;

{~InitializeLog
  инициализация модуля логов: Un_Log}
procedure InitializeLog;
begin

  // пока сбоев нет
  vLogException   := FALSE;
  IsCriticalError := FALSE;
end;




{~LogMessage
  логирование сообщения xMsg и затем это сообщение отображается в модальном
  окне, вызванным как ShowMessage. }
procedure LogMessage( xMsg: string);
begin

  ShowMessage( xMsg);
end;


{~RaiseLog
 логирование сообщения xMsg с созданием исключения: raise(xExceptionMessage).}
procedure RaiseLog( xMsg, xExceptionMessage: string);
begin

//  ShowMessage( xMsg +#13#10 + xExceptionMessage);
  raise( xMsg +#13#10 + xExceptionMessage);
end;

{~ExceptionLog
  логирование сообщения xMsg и исключения (LastException)
  с трансляцией исключения дальше: raise(xExceptionMessage).}
procedure ExceptionLog( xMsg: string);
begin
  vLogException := TRUE;
  RaiseLog( xMsg, LastException.Message);
end;

procedure ExceptionProc( xMsg: string = '');
begin
  ExceptionLog( 'Сбой ' + xMsg);
end;




{==============================================================================}
{~DefineAZKDocumentNumberAndData
 возвращает строку с описанием АЦК документа aDoc с названием документа
  (в параметре aCaption), номером документа (в атрибуте узла aDoc.DOC_NUMBER)
  и датой документа (в атрибуте узла aDoc.DOC_DATE).

  aCaption - название ЭД. это название отображается в двойных кавычках в
              тексте сообщения перед номером и датой документа;
  aDoc - XML узел с описанием строки документа;
  aPrefix - это строка, которая подставляется перед описанием ЭД (aCaption).
             параметр не обязательный. по умолчанию подставляется строка "АЦК:".

  например:
    DefineAZKDocumentNumberAndData( 'Заявка БУ/АУ на выплату средств', Doc, 'ЭД')
  вернет:
    ЭД "Заявка БУ/АУ на выплату средств" № nnn Дата: xxx.

  например:
    DefineAZKDocumentNumberAndData( 'Заявка БУ/АУ на выплату средств', Doc)
  вернет:
    АЦК: "Заявка БУ/АУ на выплату средств" № nnn Дата: xxx. }
function DefineAZKDocumentNumberAndData( aCaption: string;
                                         aDoc: Variant;
                                         aPrefix: string = 'АЦК:'): string;
begin
  Result := FORMAT( '%s "%s" № %s Дата: %s',
                    [ aPrefix,
                      aCaption,
                      TRIM( aDoc.getAttribute('DOC_NUMBER')),
                      TRIM( aDoc.getAttribute('DOC_DATE'))]);
end;


begin
end.
  
