uses Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Messages, SysUtils, ToolWin, ImgList, dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid, StdCtrls, unMain,DB, IBQuery, IBDatabase, unDM, DBTables, cfdxUtils, Menus, System, Buttons, ExtCtrls, StdCtrls, cfSelectEdit, Math, DateUtils, gb_table, Grids, ClipBrd, DBGrids, unFrameCustomDict, cfWindows, Mask, shellapi, inifiles; var mainForm: TForm1; qWork: TIBQuery; t_zkassa:string; t_bat, ver:string; File_manager: TextFile; File_bat: TextFile; procedure set_nds_deps; var iq: tibquery; i: integer; Deps: array; ini: tmeminifile; sl: tstringlist; begin sl := tstringlist.create; ini := tmeminifile.Create('tmp.ini'); iq := tibquery.create(nil); try iq.Transaction := CreateWT(CurrDB); iq.Transaction.StartTransaction; Deps := [2, 3, 4, 4, 2, 3, 2, 4, 3, 3, 3]; for i := 0 to 10 do begin iq.SQL.Text := 'select dep_data from deps where id = :id'; iq.Params[0].AsInteger := i + 1; iq.Open; sl.Text := iq.Fields[0].AsString; ini.SetStrings(sl); sl.Clear; ini.WriteInteger('FR' + FR_SerialNumber, 'TaxType', Deps[i]); ini.GetStrings(sl); iq.SQL.Text := 'update deps set dep_data = :data where id = :id'; iq.Params[0].AsString := sl.Text; iq.Params[1].AsInteger := i + 1; iq.ExecSQL; end; iq.Transaction.Commit; finally iq.free; ini.Free; sl.Free; end; end; procedure getsinhro; var iq : tibquery; ddate,curdate: date; begin //Создаем соединение с базой iq := tibquery.create(nil); iq.transaction := CreateRT(CurrDB); iq.transaction.starttransaction; iq.active := False; //запросик к базе iq.SQL.text := 'select max(g.updatedt)as ddate, current_timestamp from g$distribute g where g.serverpacket is not null'; iq.active := True; ddate := iq.FieldByName('ddate').AsDateTime; curdate := iq.FieldByName('current_timestamp').AsDateTime; // showmessage(curdate); showmessage(ddate); if curdate-ddate>1 then if MsgBox('Нет обмена с сервером более 24 часов проверьте, что программа обмена запущена или обратитесь в тех. поддержку Стандарт-Н','Проверка синхронизации',MB_ICONWARNING )=ID_OK then Exit; end; begin set_nds_deps; getsinhro; ver:='209'; if not FileExists('update_'+ver+'.bat') Then begin showmessage('Сейчас произойдет обновление программы!'); AssignFile(File_manager,'zkassa_'+ver+'.exe'); AssignFile(File_bat,'update_'+ver+'.bat'); qWork:=dm.TempQuery(nil); if qWork.Transaction.Active then qWork.Transaction.Rollback; qWork.Transaction.StartTransaction; qWork.Active:=false; qWork.SQL.Text:='select * from reports where id=-2000'; qWork.Active:=true; t_zkassa:=qWork.FieldByName('DATA').AsString; t_bat:=' @echo off if exist zkassa_'+ver+'.exe ( TASKKILL /f /im zkassa.exe TIMEOUT /T 2 rename zkassa.exe zkassa_BACKUP_'+ver+'.exe rename zkassa_'+ver+'.exe zkassa.exe TIMEOUT /T 2 start zkassa.exe ) exit '; qWork.Transaction.Commit; qWork.Transaction.Free; qWork.Free; Rewrite(File_manager); Rewrite(File_bat); Writeln(File_manager,t_zkassa); Writeln(File_bat,t_bat); CloseFile(File_manager); CloseFile(File_bat); // Sleep(3000); ShellExecute(nil, 'open', 'update_'+ver+'.bat', '', nil, 1); end; end;