{
  этот скрипт нужен для отладки в 2.28 на общем алгоритме.
  в этом случае вместо вызова скрипта по имени из настроек вызывается явно
  скрипт из модуля Un_CheckGeneral_v2_28.
  этот скрипт не собирается в инсталлятор, но архивируется.
  скрипт автоматически не компилируется!
}
uses
  'Un_CheckGeneral_v2_28',
  'Un_GrantInvestmentList',
  'Version.inc';

const
    cnUn_checkekaterinburg          = 'un_checkekaterinburg.pfe';
    cnUn_checkgeneral               = 'un_checkgeneral.pfe';
    cnUn_checkryazanobl             = 'un_checkryazanobl.pfe';
    cnUn_checkkrasnoyarskkray       = 'un_checkkrasnoyarskkray.pfe';
    cnUn_checkchelobl               = 'un_checkchelobl.pfe';
    cnUn_checkpermrray              = 'un_checkpermrray.pfe';
    cnUn_checktolyati               = 'un_checktolyati.pfe';

var
  FmList, FmDoc: TFormCustom;
  cdsList: TClientDataSet;
  ProgressBar: TProgressBar;
  dtmDate, dtmBankDate: TDateTimeEh;
  cbOrgAccount: TComboBox;
  Timer, PlayTimer: TTimer;
  DBGrid: TDBGridEh;
  actCheck, actEdit, actExecute: TAction;
  fsScript: TfsScript;
  Account, Industry_Code, Grantinvestment_Code, Kesr_Code, Fsr_Id: TDBEdit;
  FAzkIsLogin: Boolean;
  FileLog, FileInfo, FModuleName, IniPath, PanelText: String;
  FDebuger, DateEnabled, BankDateEnabled, OrgAccountEnabled: Boolean;
  PanelTextIdx, sortidx: Integer;

procedure Main(Xml: Variant);
begin
  CheckWorkAppVersion;
  with Xml.documentElement do
  if getAttribute('TESTED') = 'True' then
  begin
    setAttribute('TESTED', 'False');
    Xml.save('C:\Temp\MoneyTransferOrder.Xml');
    ShowMessage('Тестовый пример приготовлен: C:\Temp\MoneyTransferOrder.Xml');
    Exit;
  end;
  FAzkIsLogin := AzkIsLogin;
  if not AzkIsLogin then
    if not AzkLogin then
      Exit;
  try
    try
      initialization(Xml);
      if FileExists(FileInfo) then
        DeleteFile(FileInfo);
      if FDebuger then
      begin
        FmList.Show;
        repeat
          Application.handleMessage;
        until(not FmList.Visible);
      end
      else
        FmList.ShowModal;
      DBGrid.SaveLayout;
    except
      WriteLog(LastException.Message);
      raise(LastException.Message);
    end;
  finally
    finalization;
    if not FAzkIsLogin then
      AzkLogout;
    if FileExists(FileInfo) then
      ShellExecute('NotePad', FileInfo, False);
  end;
end; {End Main}

procedure initialization(Xml: Variant);
var FileStream: TFileStream;
begin
  FmList := TFormCustom.Create(Application);
  FmDoc := TFormCustom.Create(FmList);
  
  Xml := Xml.documentElement;
  IniPath := ExtractFilePath(Xml.getAttribute('INI_FILE'));
  FileLog := IniPath + 'FileLog.Log';
  FileInfo := IniPath + 'FileInfo.Log';

  with TStringList.Create do
  try
    CommaText := Xml.getAttribute('CONFIG');
    FModuleName := {IniPath + }Values['Модуль проверки'];
    DateEnabled := Values['Дата'] = 'Да';
    BankDateEnabled := Values['Дата по банку'] = 'Да';
    OrgAccountEnabled := Values['Счёт'] = 'Да';
  finally
    Free;
  end;

  // только для версий ниже 2.28.
  // по Exchange #2362,#2363,#2364,#2365,#2366,#2367,#2368 это не используется.
  fsScript := NIL;
  if (AzkCompareVersion('2.29') < 0) then begin
    fsScript := TFsScript.create(FmList);
    fsScript.Parent := fsGlobalUnit;
    FileStream := TFileStream.Create( GetFModuleNameScriptFull, fmOpenRead);
    try
      if not fsScript.SetILCode(FileStream) then
        raise(fsScript.ErrorMsg);
      if not fsScript.Find('ObjectName') then
        raise('В модуле: ' + FModuleName + ' не найдена функция: ObjectName');
      if not fsScript.Find('CheckPayOrder') then
        raise('В модуле: ' + FModuleName + ' не найдена функция: CheckPayOrder');
    finally
      FileStream.Free;
    end;
  end;


  FmList.LoadDfm(IniPath + 'Fm_PayOrderList.dfm');
  FmList.Name := 'FmMoneyTransferOrderDocList';
  with TStatusBar(FmList.FindComponent('StatusInfo')).Panels do begin
    Items[0].Text := 'Сборка ' + Version;
    // Exchange #2362,#2363,#2364,#2365,#2366,#2367,#2368
    if (AzkCompareVersion('2.29') >= 0)
      then PanelText := 'Модуль проверки - ' + ObjectNameEx
      else PanelText := 'Модуль проверки - '
                          + fsScript.CallFunction(
                                GetFModuleNameScript,
                                'ObjectName',
                                nil);
    Items[1].Text := '';
  end;
  PanelTextIdx := 1;
  FmList.actRefresh.OnExecute := @actRefreshExecute;
  ProgressBar := TProgressBar(FmList.FindComponent('ProgressBar'));
  cdsList := TClientDataSet(FmList.FindComponent('cdsList'));
  cdsList.CreateDataSet;
  DBGrid := TDBGridEh(FmList.FindComponent('DBGrid'));
  DBGrid.SaveRestoreLayout;
  DBGrid.onBookmarkCheckEvents := @BookmarkCheckEvents;
  DBGrid.OnDblClick := @PayOrderEdit;
  dtmDate := TDateTimeEh(FmList.FindComponent('dtmDate'));
  dtmDate.OnChange := @actRefreshExecute;
  dtmDate.Date := Work_Date;
  dtmBankDate := TDateTimeEh(FmList.FindComponent('dtmBankDate'));
  dtmBankDate.OnChange := @actRefreshExecute;
  dtmBankDate.Date := Work_Date;
  cbOrgAccount := TComboBox(FmList.FindComponent('cbOrgAccount'));
  cbOrgAccount.OnChange := @actRefreshExecute;
  actCheck := TAction(FmList.FindComponent('actCheck'));
  actCheck.OnExecute := @actCheckExecute;
  actEdit := TAction(FmList.FindComponent('actEdit'));
  actEdit.OnExecute := @PayOrderEdit;
  actExecute := TAction(FmList.FindComponent('actExecute'));
  actExecute.OnExecute := @actExecuteExecute;

  FmDoc.LoadDfm(IniPath + 'Fm_PayOrder.dfm');
  FmDoc.Name := 'FmMoneyTransferOrderDoc';
  TDataSource(FmDoc.FindComponent('DataSource')).DataSet := cdsList;
  TAction(FmDoc.FindComponent('actCheck')).OnExecute := @actCheckExecute;
  Account := TDBEdit(FmDoc.FindComponent('Account'));
  Industry_Code := TDBEdit(FmDoc.FindComponent('Industry_Code'));
  Grantinvestment_Code := TDBEdit(FmDoc.FindComponent('Grantinvestment_Code'));
  Kesr_Code := TDBEdit(FmDoc.FindComponent('Kesr_Code'));
  Fsr_Id := TDBEdit(FmDoc.FindComponent('Fsr_Id'));
  if not FDebuger then
    FmList.AppEvents.onMessage := @AppEventsMessage;
  LoadcbOrgAccount;
  Timer := TTimer(FmList.FindComponent('Timer'));
  Timer.onTimer := @actRefreshExecute;
  Timer.Enabled := True;
  PlayTimer := TTimer(FmList.FindComponent('PlayTimer'));
  PlayTimer.onTimer := @onPlayTimer;
  PlayTimer.Enabled := True;
end; {End initialization}

procedure finalization;
begin
  FmList.Free
end; {End finalization}

{~GetFModuleNameScript
  возвращает имя модуля, выбранного в качестве функционального модуля
  проверки из опции FModuleName: "Модуль проверки".
  функция актуальна только для версий ниже 2.29 (до доработки по задачам
  Exchange #2362,#2363,#2364,#2365,#2366,#2367,#2368).
  у старых модулей в имени файла добавлен суффикс "_v2_28.
  для новых версий 2.29 и выше, функционал сделан как главный-подниченный
  скрипт, без вызова скриптов как функциональный модуль, а вызов как обычную
  подпрограмму.}
function GetFModuleNameScript: string;
begin
  Result := ChangeFileExt(ExtractFileName(FModuleName), '') + '_v2_28';
end;

{~GetFModuleNameScriptFull
  возвращает полное имя выполняемого скрипта (с путем и расширением pfe).
  используется только для версий ниже 2.29.}
function GetFModuleNameScriptFull: string;
begin
  Result := IniPath + GetFModuleNameScript + '.pfe';
end;


procedure onPlayTimer(Sender: TObject);
begin
  with TStatusBar(FmList.FindComponent('StatusInfo')).Panels do
  begin
    PlayTimer.Enabled := not (Length(Items[1].Text) = Length(PanelText));
    if not PlayTimer.Enabled then Exit;
    Items[1].Text := Items[1].Text + PanelText[PanelTextIdx];
    Inc(PanelTextIdx);
  end;
end;

procedure actRefreshExecute(Sender: TObject);
var
  sql: String;
begin
  Timer.Enabled := False;
  FmList.SimpleText := 'Обновление кредитовых документов ...';
  cdsList.DisableControls;
  if Sender = actCheck then
    DBGrid.FieldColumns['Restext'].Title.SortMarker := smNoneEh;
  DBGrid.BookmarkUnCheckAll;
  DBGrid.Enabled := False;
  DBGrid.SavePosition;
  SetAppDisable;
  try
    sql := 'Select P.Id, P.Version, P.Document_Id, P.Budget_Id, P.DocumentClass_Id, P.DispStatus_Id' +
      ', P.Doc_Date, P.Carry_Date, LTrim(P.Doc_Number) Doc_Number, P.Amount, P.Pi_Budget_Code' +
      ', P.Pay_Account, P.Pay_Bic, P.Pay_CorAccount, P.Pay_Name, P.Pay_TaxCode, P.Pay_Kpp' +
      ', P.Rec_Account, P.Rec_Bic, P.Rec_CorAccount, P.Rec_Name, P.Rec_Ufk_Account' +
      ', P.Org_Name, P.Org_TaxCode, P.Org_Kpp , P.Rec_TaxCode, P.Rec_Kpp, P.Org_Id' +
      ', P.Pay_Id, P.Description, ''Не проверялся'' ResText' +
      ' From PayOrder P' +
      ' Left Join Document D On D.Parent_Id = P.Document_Id And D.DispStatus_Id > -1' +
      ' Left Join OrgAccount Oa on Oa.Id = P.Rec_Acc_Id' +
      ' Join Budget B on ((Oa.Org_Id = B.Org_Id and P.Budget_Id = B.Id)' +
          ' or (Oa.Org_Id = B.Executor_Id and P.Budget_Id = B.Id))' +
      ' Where P.Budget_Id = ? and P.DocumentClass_Id = 24 And P.DispStatus_Id = 9';
    Query.AddStr(Budget_Id);
    if DateEnabled then
    begin
      sql := sql + ' And P.Doc_Date = ?';
      Query.AddDate(dtmDate.Date);
    end;
    if BankDateEnabled then
    begin
      sql := sql + ' And P.Carry_Date = ?';
      Query.AddDate(dtmBankDate.Date);
    end;
    if OrgAccountEnabled then
    begin
      sql := sql + ' And P.Rec_Account = ?';
      Query.AddStr(cbOrgAccount.Text);
    end;
    sql := sql +  ' Group By P.Id, P.Version, P.Document_Id, P.Budget_Id' +
      ', P.DocumentClass_Id, P.DispStatus_Id, P.Doc_Date, P.Carry_Date' +
      ', P.Doc_Number, P.Amount, P.Pi_Budget_Code, P.Pay_Account, P.Pay_Bic' +
      ', P.Pay_CorAccount, P.Pay_Name, P.Pay_TaxCode, P.Pay_Kpp, P.Rec_Account' +
      ', P.Rec_Bic, P.Rec_CorAccount, P.Rec_Name, P.Rec_Ufk_Account, P.Org_Name' +
      ', P.Org_TaxCode, P.Org_Kpp, P.Rec_TaxCode, P.Rec_Kpp, P.Org_Id, P.Pay_Id, P.Description' +
      ' Having Coalesce(P.Amount - Sum(Case When D.DispStatus_Id > -1 Then D.Amount Else 0.00 End), 0.00) <> 0.00';
    Query.RunCds(cdsList, sql);
  finally
    cdsList.EnableControls;
    DBGrid.RestorePosition;
    DBGrid.DefaultApplySorting;
    DBGrid.Enabled := True;
    FmList.SimpleText := '';
    SetAppEnable;
    FmList.ActiveControl := DBGrid;
  end;
end; {End actRefreshExecute}

{~ObjectNameEx
  для доработки по Exchange #2362,#2363,#2364,#2365,#2366,#2367,#2368
  названия для выбранного функционального модуля определяются не из функции
  внешнего скрипта, а сразу по названию значения из параметра конфигурации.
  функция названа по другому чтобы не дублировать название подпрограммы
  "ObjectName" которые реализованы в скриптах для старых версий. иначе в
  работе скриптов возможны сбои.}
function ObjectNameEx: string;
begin
  case LowerCase( FModuleName) of
    cnUn_checkekaterinburg      : Result := 'ДФ г. Екатеринбурга';
    cnUn_checkgeneral           : Result := 'Общий';
    cnUn_checkryazanobl         : Result := 'Минфин Рязанской области';
    cnUn_checkkrasnoyarskkray   : Result := 'МФ Красноярского края';
    cnUn_checkchelobl           : Result := 'МФ Челябинской области';
    cnUn_checkpermrray          : Result := 'МФ Пермского края';
    cnUn_checktolyati           : Result := 'ДФ Тольятти';
    else                          Result := FORMAT( 'Модуль "%s" не распознан.',
                                                    [ FModuleName]);
  end;//case//
end;

procedure actCheckExecute(Sender: TObject);
var
  Control: TWinControl;
  SortMark: TSortMarkerEh;

  function CheckPayOrderLocal: Boolean;
  begin
    Result := CheckPayOrder( cdsList, IniPath);
  end;

begin
  if cdsList.recordCount = 0 then Exit;


//отладка
//showmessage( xGrantInvestmentID_SystemNull);

  if Sender <> actCheck then
  begin
    Control := FmDoc.ActiveControl;
    FmDoc.SimpleText := 'Проверка соответствия правилам ...';
    DBGrid.Enabled := False;
    SetAppDisable;
    Application.processMessages;
    try
      if CheckPayOrderLocal then
        DBGrid.BookmarkCheck
      else
        DBGrid.BookmarkUnCheck;
    finally
      FmDoc.SimpleText := '';
      DBGrid.Enabled := True;
      SetAppEnable;
      FmDoc.ActiveControl := Control;
    end;
  end else
  begin
    FmList.SimpleText := 'Проверка соответствия правилам ...';
    cdsList.DisableControls;
    SortMark := DBGrid.FieldColumns['Restext'].Title.SortMarker;
    if DBGrid.FieldColumns['Restext'].Title.SortMarker <> smNoneEh then
      actRefreshExecute(actCheck);
    DBGrid.Enabled := False;
    DBGrid.SavePosition;
    SetAppDisable;
    CursorDisable;
    try
      ProgressBar.Max := cdsList.recordCount;
      cdsList.First;
      while not cdsList.Eof do
      begin
        ProgressBar.Position := cdsList.RecNo;
        CheckPayOrderLocal;
        cdsList.Next;
      end;
    finally
      cdsList.EnableControls;
      DBGrid.FieldColumns['Restext'].Title.SortMarker := SortMark;
      DBGrid.RestorePosition;
      DBGrid.DefaultApplySorting;
      DBGrid.Enabled := True;
      ProgressBar.Position := 0;
      FmList.SimpleText := '';
      CursorEnable;
      SetAppEnable;
      DBGrid.BookmarkCheckAll;
      //FmList.ActiveControl := DBGrid;
    end;
  end;
end; {End actCheckExecute}

procedure LoadcbOrgAccount;
var
  i: Integer;
  sql: String;
  Xml: Variant;
begin
  cbOrgAccount.Items.Clear;
  Xml := CreateOleObject('Microsoft.XmlDom');
  Sql := 'Select P.Rec_Account From PayOrder P' +
    ' Left Join OrgAccount Oa on Oa.Id = P.Rec_Acc_Id' +
    ' Join Budget B on ((Oa.Org_Id = B.Org_Id and P.Budget_Id = B.Id)' +
      ' or (Oa.Org_Id = B.Executor_Id and P.Budget_Id = B.Id))' +
    ' Where P.Budget_Id = ' + Budget_Id + ' and P.DocumentClass_Id = 24' +
    ' Group By P.Rec_Account';
  Xml.loadXML(RunQuery(sql));
  Xml := Xml.documentElement.childNodes;
  for i := 0 to Xml.length - 1 do
    cbOrgAccount.Items.Add(Xml.items[i].attributes.item[0].nodeValue);
  if cbOrgAccount.ItemIndex < 0 then
    cbOrgAccount.ItemIndex := 0;
end; {End LoadcbOrgAccount}

procedure AppEventsMessage;
begin
  dtmDate.Enabled := DateEnabled And AppEnable;
  dtmBankDate.Enabled := BankDateEnabled And AppEnable;
  cbOrgAccount.Enabled := OrgAccountEnabled And AppEnable;
  FmList.actRefresh.Enabled := AppEnable;
  actCheck.Enabled := AppEnable And (cdsList.recordCount <> 0);
  actEdit.Enabled := AppEnable And (cdsList.recordCount <> 0);
  actExecute.Enabled := AppEnable And (DBGrid.bookmark.Count <> 0);
  Account.Enabled := AppEnable;
  Industry_Code.Enabled := AppEnable;
  Grantinvestment_Code.Enabled := AppEnable;
  Kesr_Code.Enabled := AppEnable;
  Fsr_Id.Enabled := AppEnable;
  DBGrid.SortLocal := AppEnable;
end; {End AppEventsMessage}

function BookmarkCheckEvents: Boolean;
begin
//  if cdsList.EOF then Result := FALSE
//  else
  try
    Result := (cdsList.FieldByName('Enroll').Value <> Null)
      or (DBGrid.Bookmark.IndexOf(cdsList.FieldByName('ID').AsString) >= 0);
    except
      raise ('Сбой BookmarkCheckEvents: '+ LastException.Message);
  end;
end; {End BookmarkCheckEvents}

procedure PayOrderEdit(Sender: TObject);
begin
  if cdsList.recordCount = 0 then Exit;
  if cdsList.FieldByName('Enroll').Value = Null then
    actCheckExecute(nil);
  if FmDoc.ActiveControl = nil then
    FmDoc.ActiveControl := Account;
  if FDebuger then
  begin
    FmDoc.Show;
    repeat
      Application.handleMessage;
    until(not FmDoc.Visible);
  end else
    FmDoc.ShowModal;
  if cdsList.isEdit then
    actCheckExecute(nil);
  FmList.ActiveControl := DBGrid;
end; {End PayOrderEdit}

procedure actExecuteExecute(Sender: TObject);
begin
  FmList.SimpleText := 'Создание распоряжений на зачисление средств на л/с ...';
  SetAppDisable;
  DBGrid.Enabled := False;
  CursorDisable;
  ProgressBar.Max := DBGrid.bookmark.Count;
  try
    while DBGrid.Bookmark.Count > 0 do
    if cdsList.Locate(DBGrid.FieldKey.FieldName, DBGrid.Bookmark[0], nil) then
    begin
      MakeMoneyTransferOrder;
      ProgressBar.Position := ProgressBar.Position + 1;
    end;
  finally
    FmList.SimpleText := '';
    ProgressBar.Position := 0;
    DBGrid.Enabled := True;
    CursorEnable;
    SetAppEnable;
  end;
end; {End actExecuteExecute}

procedure MakeMoneyTransferOrder;
var
  sql: String;
  XmlLink, Xml: Variant;
begin
  XmlLink := CreateOleObject('Microsoft.XmlDom');
  XmlLink.LoadXml(ExecProc('DOCUMENT', ['action', 'spawn_money_transfer_order', 'class', 24,
    'ID', cdsList.FieldByName('Id').AsString,
    'VERSION', cdsList.FieldByName('Version').AsString],
    cdsList.FieldByName('Budget_Id').AsString));
  sql := 'Select P.Id From MoneyTransferOrder P' +
    ' Left Join Document D On (D.Id = P.Document_Id)' +
    ' Where D.Parent_Id = ? And D.DocumentClass_Id = 193 And D.DispStatus_Id <> -1';
  Query.addLong(cdsList.FieldByName('Document_Id').AsString);
  XmlLink.LoadXML(Query.Run(sql));
  XmlLink.LoadXML(ExecProc('DOCUMENT', ['action', 'read', 'class', 193, 'ID',
    XmlLink.documentElement.childNodes.item[0].getAttribute('ID')],
    cdsList.FieldByName('Budget_Id').AsString));
  XmlLink := XmlLink.documentElement;
  XmlLink.setAttribute('action', 'update');
  XmlLink.setAttribute('class', 193);
  XmlLink.setAttribute('DOC_DATE', XmlLink.getAttribute('CARRY_DATE'));
  XmlLink.setAttribute('OPERTYPE_ID', 0);
  XmlLink.setAttribute('PAY_ID', cdsList.FieldByName('Pay_Id').AsString);
  XmlLink.setAttribute('PAY_TAXCODE', cdsList.FieldByName('Pay_Taxcode').AsString);
  XmlLink.setAttribute('PAY_KPP', cdsList.FieldByName('Pay_Kpp').AsString);
  XmlLink.setAttribute('PAY_NAME', cdsList.FieldByName('Pay_Name').AsString);
  //неклассифицированные поступления
  if cdsList.FieldByName('Unclassified').AsInteger = 1 then
  begin
//    if AzkCompareVersion('2.26.46.1') >= 0 then
IF TRUE THEN
    begin
      XmlLink.setAttribute('REC_ID', cdsList.FieldByName('Unclass_Org_Id').AsString);
      XmlLink.setAttribute('REC_TAXCODE', cdsList.FieldByName('Unclass_Org_Taxcode').AsString);
      XmlLink.setAttribute('REC_KPP', cdsList.FieldByName('Unclass_Org_Kpp').AsString);
      XmlLink.setAttribute('REC_NAME', cdsList.FieldByName('Unclass_Org_Name').AsString);
    end
    else begin
      XmlLink.setAttribute('REC_ID', cdsList.FieldByName('Rec_Id').AsString);
      XmlLink.setAttribute('REC_TAXCODE', cdsList.FieldByName('Rec_Taxcode').AsString);
      XmlLink.setAttribute('REC_KPP', cdsList.FieldByName('Rec_Kpp').AsString);
      XmlLink.setAttribute('REC_NAME', cdsList.FieldByName('Rec_Name').AsString);
    end;
  end
  else begin //классифицированные поступления
    XmlLink.setAttribute('REC_ID', cdsList.FieldByName('Org_Id').AsString);
    XmlLink.setAttribute('REC_TAXCODE', cdsList.FieldByName('Org_Taxcode').AsString);
    XmlLink.setAttribute('REC_KPP', cdsList.FieldByName('Org_Kpp').AsString);
    XmlLink.setAttribute('REC_NAME', cdsList.FieldByName('Org_Name').AsString);
  end;
  XmlLink.setAttribute('REC_ACC_ID', cdsList.FieldByName('LS_Id').AsString);
  XmlLink.setAttribute('REC_ACCOUNT', cdsList.FieldByName('LS_Number').AsString);
  XmlLink.setAttribute('KESR_CODE', cdsList.FieldByName('Kesr_Code').AsString);
  XmlLink.setAttribute('FSR_ID', cdsList.FieldByName('Fsr_Id').AsString);
  XmlLink.setAttribute('INDUSTRYCODE_ID',
    cdsList.FieldByName('Industrycode_Id').AsString);
  XmlLink.setAttribute('GRANTINVESTMENT_ID',
    cdsList.FieldByName('Grantinvestment_Id').AsString);
  XmlLink.setAttribute('DESCRIPTION',
    cdsList.FieldByName('Description').AsString);
  XmlLink.setAttribute('UNKNOWN_LAST_YEAR_FLAG', 0);
  XmlLink := XmlLink.ownerDocument;
  XmlLink.LoadXml(ExecXML(XmlLink.xml, cdsList.FieldByName('Budget_Id').AsString));
  DBGrid.BookmarkUnCheck;
  cdsList.Delete;
end; {End MakeMoneyTransferOrder}

const
  WorkAppVersion = '5.0.3.37';

procedure CheckWorkAppVersion;
begin
  if CompareVersion(AppVersion, WorkAppVersion) < 0 then
    raise('Скрипты работают с AzkEchange.Exe начиная с версии: ' + WorkAppVersion +
      ''#13#10'Текущая версия AzkEchange.Exe: ' + AppVersion);
end; {End CheckWorkAppVersion}

procedure WriteLog(Message: String);
begin
  if FileLog <> '' then
    WriteLogFile(FileLog, Message);
end; {End WriteLog}

procedure WriteInfo(Message: String);
begin
  WriteLogFile(FileInfo, Message);
  WriteLogFile(FileLog, Message);
end; {End WriteInfo}

var
  Xml: Variant;

begin
  FAzkIsLogin := AzkIsLogin;
  FDebuger := True;
  Xml := CreateOleObject('Microsoft.XmlDom');
  if not FileExists('C:\Temp\MoneyTransferOrder.Xml') then
  begin
    ShowMessage('Не найден тестовый пример: C:\Temp\MoneyTransferOrder.Xml');
    Exit;
  end;
  if not Xml.Load('C:\Temp\MoneyTransferOrder.Xml') then
  begin
    ShowMessage('Ошибка при загрузке: C:\Temp\MoneyTransferOrder.Xml');
    Exit;
  end;
  if not AzkIsLogin then
    if not AzkLogin then
      Exit;
  try
    Main(Xml);
  finally
    if not FAzkIsLogin then
      AzkLogout;
  end;
end.