//***********************************************************************************************
//                                     SERVICE                                                  *
//***********************************************************************************************
//autor    PAVLENKO VLADIMIR VIKTOROVICH                                                        *
//city     NEFTEYUGANSK                                                                         *
//country  RUSSIA                                                                               *
//facebook https://www.facebook.com/profile.php?id=100011510045490                              *
//vk       https://vk.com/pavlenko__vladimir                                                    *
//e-mail   sibprogsistem@mail.ru, brat-vse@yandex.ru                                            *
//***********************************************************************************************
//***********************************************************************************************
//*************************Глобальные переменные ************************************************
  var                                                                                         //*
//***********************************************************************************************
{  idUserOnline = идентификатор пользователя удаленной БД
   outdatainout  = переменная для хранения авторизации (передача данных удаленной БД)
   ServicetgList  = Содержит значение 0 или 1 для обновления языка таблицы на главной форме
   Servicetgmaster  = Содержит значение 0 или 1 для обновления языка таблицы на форме мастера
   http = переменная oleobject для создание и уничтожения сесии (авторизация)
   datainout = переменная oleobject для приема и передачи данных удаленной БД по заданному времени
   smsquestion = переменная oleobject для обработки смс сообщений
   frmAdOnOF = проверка (открыта или закрыта) форма frmAdmin
}
  idUserOnline,outdatainout,ServicetgList,Servicetgmaster,frmAdOnOF :integer;
  http,datainout,smsquestion: variant;  
//***********************************************************************************************
//klientts = ,  serverts = ,  klients = ,  sTRBD =  *********************************************
  klientts, serverts,klients,sTRBD: integer;                                                  //*
//***********************************************************************************************
//Timer = таймер резервного копирования**********************************************************
//стороне пользователя произошла ошибка..********************************************************
  Timer,timerAu, timerDataInout, TInOut, smsTimer:  TTimer;                     //*
//***********************************************************************************************
//ImageList = прарисовка иконок******************************************************************
  ImageList: TImageList;                                                                      //*
//***********************************************************************************************
//sLite = проверяет значение serverlite**********************************************************
//sOne = проверяет значение (без авторизации)****************************************************
//strshowG = получает значение от (iniG:TInifile) о выбранном языке пользователя*****************
//SMSLogin = содержит логин от смс оператора*****************************************************
//SMSPassword = содержит пароль от смс оператора*************************************************
//SMSSender = содержит имя отправителя для смс оператора*****************************************
//SMSAPI_ID = содержит APIключ от СМС сервиса clickatell*****************************************
//ipuser = соддержит ip адрес пользователя*******************************************************
//Openweb = адрес загрузки веб страницы смс оператора********************************************
//Opennameweb = имя оператора для заголовка вебстраницы******************************************
  sLite, sOne,strshowG,SMSLogin,SMSPassword,SMSSender,SMSAPI_ID,h, ipuser, smst: string;      //*
  sWarranty, sOnlyDiagnostic, Opensmsweb, Opennameweb, telMas, BorS, RP, smsAn: string;       //*
  stdId, userIDs : string;                                                                    //*
//***********************************************************************************************
//iniSetting = загружает файл настроек***********************************************************
//iniG = загружает файл языкавых настроек********************************************************
//langIniG = загружает языкавой файл указанный в (iniG)******************************************
  iniSetting,iniG,langIniG:TInifile;                                                          //*
//***********************************************************************************************
//frmdolg = содержит имя формы с которой открыта форма оплаты************************************
  frmdolg:TAForm;                                                                             //*
//***********************************************************************************************
//***********************************************************************************************
// ------------ подключение к удаленной БД SQLite  ---------------
//***********************************************************************************************
procedure frmAdmin_cbCopyOndb_OnClick (Sender: TObject);
var
scbCopyOndb:TInifile;
begin
  scbCopyOndb:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
  if frmAdmin.cbCopyOndb.Checked then scbCopyOndb.WriteString('othersetting','on','1') else scbCopyOndb.WriteString('othersetting','on','0');
end;

procedure frmComDoc_tgResultSearch_OnChange (Sender: TObject);
begin
  frmComDoc.tgResultSearch.Columns[0].Visible:=False;
  frmComDoc.tgResultSearch.Columns[1].Width:=frmComDoc.tgResultSearch.Width-10;
end;

procedure frmComDoc_bOpenListTypeDoc_OnAfterClick (Sender: TObject);
begin
 frmComDoc.tgResultSearch.Columns[0].Visible:=False;
 frmComDoc.tgResultSearch.Columns[1].Width:=frmComDoc.tgResultSearch.Width-10;
end;

procedure frmAdmin_bCNNRSQLite_OnClick (Sender: TObject; var Cancel: boolean);
var
CNNRS,SQLite:TIniFile;
open:TOpenDialog;
s,r:string;
begin
  CNNRS:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\db.ini');
  SQLite:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
  s:=SQLite.ReadString('Options', 'DBMS', '');
  r:=SQLite.ReadString('Options', 'server','');
  Open:= TOpenDialog.Create(frmAdmin);
  Open.Title:='SQLite';
  open.Filter := 'db files only|*.db';
  if Open.Execute then
     begin
        CNNRS.WriteString('OU','Enabled','1');
        SQLite.WriteString('Options', 'DBMS', 'sqlite');
        SQLite.WriteString('Options', 'server',Open.FileName);
        if CNNRS.ReadString('OU','Enabled','')='1' then begin
          if SQLite.ReadString('Options', 'DBMS', '')='sqlite' then begin
             if SQLite.ReadString('Options', 'server', '')=Open.FileName then begin
                if IDYES = MessageBox(langIniG.ReadString('message','00x72', 'Переподключение...'),langIniG.ReadString('message','00x23', 'Программа будет перезагружена!'), MB_YESNO+MB_ICONINFORMATION) then begin
                  frmLogin.Close;
                  openfile('service.exe');
                end;
             end else begin
             ShowMessage(langIniG.ReadString('message','00x6', 'Ошибка записи в ini файл'));
             CNNRS.WriteString('OU','Enabled','0');
             SQLite.WriteString('Options', 'DBMS', s);
             if r<>'' then SQLite.WriteString('Options', 'server',r) else SQLite.DeleteKey('Options', 'server');
             end;
          end else  begin
          ShowMessage(langIniG.ReadString('message','00x6', 'Ошибка записи в ini файл'));
          CNNRS.WriteString('OU','Enabled','0');
          end;
       end else ShowMessage(langIniG.ReadString('message','00x6', 'Ошибка записи в ini файл'));
       end;
  CNNRS.Free;
  SQLite.Free;
  Open.Free;
end;
//***********************************************************************************************
// ------------ меню формы мастера  ---------------
//***********************************************************************************************

procedure frmMasterWork_pMenu6_OnClick (Sender: TObject);
begin
  frmMasterWork.bStor.Click;
end;

procedure frmMasterWork_lMenu6_OnClick (Sender: TObject);
begin
  frmMasterWork.bStor.Click;
end;

procedure frmMasterWork_lMenu6_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu6.Color:=clTeal;
  frmMasterWork.lMenu6.Font.Color:=clSilver;
end;

procedure frmMasterWork_lMenu6_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu6.Color:=$00666600;
  frmMasterWork.lMenu6.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu6_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu6.Color:=clTeal;
  frmMasterWork.lMenu6.Font.Color:=clSilver;
end;

procedure frmMasterWork_pMenu6_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu6.Color:=$00666600;
  frmMasterWork.lMenu6.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu5_OnClick (Sender: TObject);
begin
  frmMasterWork.bComp.Click;
end;

procedure frmMasterWork_lMenu5_OnClick (Sender: TObject);
begin
  frmMasterWork.bComp.Click;
end;

procedure frmMasterWork_lMenu5_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu5.Color:=clTeal;
  frmMasterWork.lMenu5.Font.Color:=clSilver;
end;

procedure frmMasterWork_lMenu5_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu5.Color:=$00666600;
  frmMasterWork.lMenu5.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu5_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu5.Color:=clTeal;
  frmMasterWork.lMenu5.Font.Color:=clSilver;
end;

procedure frmMasterWork_pMenu5_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu5.Color:=$00666600;
  frmMasterWork.lMenu5.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu4_OnClick (Sender: TObject);
begin
  if frmMasterWork.tgListServise.SelectedColumn then  frmMasterWork.bEq.Click;
end;

procedure frmMasterWork_lMenu4_OnClick (Sender: TObject);
begin
  if frmMasterWork.tgListServise.SelectedColumn then  frmMasterWork.bEq.Click;
end;

procedure frmMasterWork_lMenu4_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu4.Color:=clTeal;
  frmMasterWork.lMenu4.Font.Color:=clSilver;
end;

procedure frmMasterWork_lMenu4_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu4.Color:=$00666600;
  frmMasterWork.lMenu4.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu4_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu4.Color:=clTeal;
  frmMasterWork.lMenu4.Font.Color:=clSilver;
end;

procedure frmMasterWork_pMenu4_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu4.Color:=$00666600;
  frmMasterWork.lMenu4.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu3_OnClick (Sender: TObject);
begin
  if frmMasterWork.tgListServise.SelectedColumn then  frmMasterWork.bStatus.Click;
end;

procedure frmMasterWork_lMenu3_OnClick (Sender: TObject);
begin
  if frmMasterWork.tgListServise.SelectedColumn then  frmMasterWork.bStatus.Click;
end;

procedure frmMasterWork_lMenu3_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu3.Color:=clTeal;
  frmMasterWork.lMenu3.Font.Color:=clSilver;
end;

procedure frmMasterWork_lMenu3_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu3.Color:=$00666600;
  frmMasterWork.lMenu3.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu3_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu3.Color:=clTeal;
  frmMasterWork.lMenu3.Font.Color:=clSilver;
end;

procedure frmMasterWork_pMenu3_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu3.Color:=$00666600;
  frmMasterWork.lMenu3.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu2_OnClick (Sender: TObject);
begin
  if frmMasterWork.tgListServise.SelectedColumn then  frmMasterWork.bWorkOff.Click;
end;

procedure frmMasterWork_lMenu2_OnClick (Sender: TObject);
begin
  if frmMasterWork.tgListServise.SelectedColumn then  frmMasterWork.bWorkOff.Click;
end;
          
procedure frmMasterWork_lMenu2_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu2.Color:=clTeal;
  frmMasterWork.lMenu2.Font.Color:=clSilver;
end;

procedure frmMasterWork_lMenu2_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu2.Color:=$00666600;
  frmMasterWork.lMenu2.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu2_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu2.Color:=clTeal;
  frmMasterWork.lMenu2.Font.Color:=clSilver;
end;

procedure frmMasterWork_pMenu2_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu2.Color:=$00666600;
  frmMasterWork.lMenu2.Font.Color:=clWhite;
end;

procedure frmMasterWork_lMenu1_OnClick (Sender: TObject);
begin
  if frmMasterWork.tgListServise.SelectedColumn then  frmMasterWork.bDiagnostic.Click;
end;

procedure frmMasterWork_lMenu1_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu1.Color:=clTeal;
  frmMasterWork.lMenu1.Font.Color:=clSilver;
end;

procedure frmMasterWork_lMenu1_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu1.Color:=$00666600;
  frmMasterWork.lMenu1.Font.Color:=clWhite;
end;

procedure frmMasterWork_pMenu1_OnClick (Sender: TObject);
begin
  if frmMasterWork.tgListServise.SelectedColumn then  frmMasterWork.bDiagnostic.Click;
end;

procedure frmMasterWork_pMenu1_OnMouseLeave (Sender: TObject);
begin
  frmMasterWork.pMenu1.Color:=clTeal;
  frmMasterWork.lMenu1.Font.Color:=clSilver;
end;

procedure frmMasterWork_pMenu1_OnMouseEnter (Sender: TObject);
begin
  frmMasterWork.pMenu1.Color:=$00666600;
  frmMasterWork.lMenu1.Font.Color:=clWhite;
end;

//***********************************************************************************************
// ------------ меню формы администратора  ---------------
//***********************************************************************************************

procedure frmServiceCen_lMenu7_OnClick (Sender: TObject);
begin
  if frmServiceCen.bsmsout.Enabled = True then  frmServiceCen.bsmsout.Click;
end;

procedure frmServiceCen_pMenu7_OnClick (Sender: TObject);
begin
  if frmServiceCen.bsmsout.Enabled = True then  frmServiceCen.bsmsout.Click;
end;

procedure frmServiceCen_lMenu6_OnClick (Sender: TObject);
begin
  frmServiceCen.bDoc.Click;
end;

procedure frmServiceCen_pMenu6_OnClick (Sender: TObject);
begin
  frmServiceCen.bDoc.Click;
end;

procedure frmServiceCen_lMenu5_OnClick (Sender: TObject);
begin
  frmServiceCen.bPriceList.Click;
end;

procedure frmServiceCen_pMenu5_OnClick (Sender: TObject);
begin
  frmServiceCen.bPriceList.Click;
end;

procedure frmServiceCen_lMenu4_OnClick (Sender: TObject);
begin
  frmServiceCen.bShop.Click;
end;

procedure frmServiceCen_pMenu4_OnClick (Sender: TObject);
begin
  frmServiceCen.bShop.Click;
end;

procedure frmServiceCen_lMenu3_OnClick (Sender: TObject);
begin
  frmServiceCen.bNewApplication.Click;
end;

procedure frmServiceCen_pMenu3_OnClick (Sender: TObject);
begin
  frmServiceCen.bNewApplication.Click;
end;

procedure frmServiceCen_lMenu2_OnClick (Sender: TObject);
begin
  frmServiceCen.bServiceWork.Click; 
end;

procedure frmServiceCen_pMenu2_OnClick (Sender: TObject);
begin
  frmServiceCen.bServiceWork.Click;
end;

procedure frmServiceCen_lMenu1_OnClick (Sender: TObject);
begin
  frmServiceCen.bCompanyService.Click; 
end;

procedure frmServiceCen_pMenu1_OnClick (Sender: TObject);
begin
  frmServiceCen.bCompanyService.Click;
end;

procedure frmServiceCen_lMenu7_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu7.Font.Color:=clSilver;
  frmServiceCen.pMenu7.Color:=clTeal;
end;

procedure frmServiceCen_lMenu7_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu7.Font.Color:=clWhite;
  frmServiceCen.pMenu7.Color:=$00666600;
end;

procedure frmServiceCen_pMenu7_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu7.Font.Color:=clSilver;
  frmServiceCen.pMenu7.Color:=clTeal;
end;

procedure frmServiceCen_pMenu7_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu7.Font.Color:=clWhite;
  frmServiceCen.pMenu7.Color:=$00666600;
end;

procedure frmServiceCen_lMenu6_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu6.Font.Color:=clSilver;
  frmServiceCen.pMenu6.Color:=clTeal;
end;

procedure frmServiceCen_lMenu6_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu6.Font.Color:=clWhite;
  frmServiceCen.pMenu6.Color:=$00666600;
end;

procedure frmServiceCen_pMenu6_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu6.Font.Color:=clSilver;
  frmServiceCen.pMenu6.Color:=clTeal;
end;

procedure frmServiceCen_pMenu6_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu6.Font.Color:=clWhite;
  frmServiceCen.pMenu6.Color:=$00666600;
end;

procedure frmServiceCen_lMenu5_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu5.Font.Color:=clSilver;
  frmServiceCen.pMenu5.Color:=clTeal;
end;

procedure frmServiceCen_lMenu5_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu5.Font.Color:=clWhite;
  frmServiceCen.pMenu5.Color:=$00666600;
end;

procedure frmServiceCen_pMenu5_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu5.Font.Color:=clSilver;
  frmServiceCen.pMenu5.Color:=clTeal;
end;

procedure frmServiceCen_pMenu5_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu5.Font.Color:=clWhite;
  frmServiceCen.pMenu5.Color:=$00666600;
end;

procedure frmServiceCen_lMenu4_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu4.Font.Color:=clSilver;
  frmServiceCen.pMenu4.Color:=clTeal;
end;

procedure frmServiceCen_lMenu4_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu4.Font.Color:=clWhite;
  frmServiceCen.pMenu4.Color:=$00666600;
end;

procedure frmServiceCen_pMenu4_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu4.Font.Color:=clSilver;
  frmServiceCen.pMenu4.Color:=clTeal;
end;

procedure frmServiceCen_pMenu4_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu4.Font.Color:=clWhite;
  frmServiceCen.pMenu4.Color:=$00666600;
end;

procedure frmServiceCen_lMenu3_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu3.Font.Color:=clSilver;
  frmServiceCen.pMenu3.Color:=clTeal;
end;

procedure frmServiceCen_lMenu3_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu3.Font.Color:=clWhite;
  frmServiceCen.pMenu3.Color:=$00666600;
end;

procedure frmServiceCen_pMenu3_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu3.Font.Color:=clSilver;
  frmServiceCen.pMenu3.Color:=clTeal;
end;

procedure frmServiceCen_pMenu3_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu3.Font.Color:=clWhite;
  frmServiceCen.pMenu3.Color:=$00666600;
end;

procedure frmServiceCen_lMenu2_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu2.Font.Color:=clSilver;
  frmServiceCen.pMenu2.Color:=clTeal;
end;

procedure frmServiceCen_lMenu2_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu2.Font.Color:=clWhite;
  frmServiceCen.pMenu2.Color:=$00666600;
end;

procedure frmServiceCen_pMenu2_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu2.Font.Color:=clSilver;
  frmServiceCen.pMenu2.Color:=clTeal;
end;

procedure frmServiceCen_pMenu2_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu2.Font.Color:=clWhite;
  frmServiceCen.pMenu2.Color:=$00666600;
end;

procedure frmServiceCen_lMenu1_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu1.Font.Color:=clSilver;
  frmServiceCen.pMenu1.Color:=clTeal;
end;

procedure frmServiceCen_lMenu1_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu1.Font.Color:=clWhite;
  frmServiceCen.pMenu1.Color:=$00666600;
end;

procedure frmServiceCen_pMenu1_OnMouseEnter (Sender: TObject);
begin
  frmServiceCen.lMenu1.Font.Color:=clWhite;
  frmServiceCen.pMenu1.Color:=$00666600;
end;

procedure frmServiceCen_pMenu1_OnMouseLeave (Sender: TObject);
begin
  frmServiceCen.lMenu1.Font.Color:=clSilver;
  frmServiceCen.pMenu1.Color:=clTeal;
end;



//***********************************************************************************************
// ------------ глобальное событие для всех баз данных, связанных с исключениями  ---------------
//***********************************************************************************************
//обработчик ошибки подключения к базе данных MySQL. в случае ошибки пользователь должен выбрать*
//повторить попытку или отменить в случае отмены программа возвращается к использованию SQLite***
//***********************************************************************************************

function OnSQLException(Sender: TObject; Msg: string; SQL: string): boolean;
var
ini : TInifile;
begin
    ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    // если не подключен, для MySQL
    if Pos('Code: 10061', Msg)>0 then
    begin
      result := True; // для предотвращения системного сообщения
        // сообщение
      if IDRETRY = MessageBox(langIniG.ReadString('message','00x1', 'Произошла ошибка либо Вы отменили соединение с MySQL.'), langIniG.ReadString('message','00x1x1', 'Ошибка либо отмена соединения!'), MB_RETRYCANCEL+MB_ICONINFORMATION)then begin
      frmLogin.Close;
      OpenFile('start.bat')
      end else
      ini.WriteString('Options', 'DBMS', 'sqlite');
      frmLogin.Close;
      OpenFile('start.bat')
    end;
     if Pos('Connection is not connected', Msg) then     
    begin
      result := True; // для предотвращения системного сообщения
        // сообщение
      if IDRETRY = MessageBox(langIniG.ReadString('message','00x1', 'Произошла ошибка либо Вы отменили соединение с MySQL.'), langIniG.ReadString('message','00x1x1', 'Ошибка либо отмена соединения!'), MB_RETRYCANCEL+MB_ICONINFORMATION)then begin
      frmLogin.Close;
      OpenFile('start.bat')
      end else
      ini.WriteString('Options', 'DBMS', 'sqlite');
      frmLogin.Close;
      OpenFile('start.bat')
    end;
end;



//***********************************************************************************************
// -----------------------импорт экспорт---------------------------------------------------------
//***********************************************************************************************
//кнопки импорта \ экспотра данных***************************************************************
//***********************************************************************************************
procedure frmAdmin_bExC_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmLogin.mniExportData.Click;
end;

procedure frmAdmin_bImpC_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmLogin.mniImportData.Click;
end;

procedure frmAdmin_bImpC_OnAfterClick (Sender: TObject);
begin

end;

procedure frmAdmin_bExC_OnAfterClick (Sender: TObject);
begin

end;
//***********************************************************************************************
// ------------------------ ссылки на операторов смс сервисов -----------------------------------
//***********************************************************************************************
//***********************************************************************************************

procedure frmAbout_Button2_OnClick (Sender: TObject; var Cancel: boolean);
begin
  OpenURL('www.service-vv.ru\support');
end;

procedure frmAbout_Button3_OnClick (Sender: TObject; var Cancel: boolean);
begin
   OpenURL('https://vk.com/pavlenko__vladimir ');
end;

procedure frmAbout_Button4_OnClick (Sender: TObject; var Cancel: boolean);
begin
   OpenURL('https://www.facebook.com/profile.php?id=100011510045490 ');
end;

procedure frmAbout_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
  OpenURL('www.service-vv.ru');
end;

//***********************************************************************************************
//----------------------------создание и управление маской телефонного номера--------------------
//***********************************************************************************************
//перед записью телефонного номера программа запросит установить маску номера********************
//***********************************************************************************************
procedure frmNewApplication_lTelB_OnClick (Sender: TObject);
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  if frmNewApplication.lTelB.Checked=True then begin
  frmNewApplication.eTelephonClient.EditMask:=ini.ReadString('telMask','maskB','');
  if ini.ReadString('telMask','maskB','')=''  then frmMask.Show;
  telMas:= 'frmNewApplication';
  BorS:='b' ;
  end else if frmNewApplication.lTelB.Checked=False then frmNewApplication.eTelephonClient.EditMask:=ini.ReadString('telMask','maskS','');
end;


procedure frmNewApplication_eTelephonClient_OnClick (Sender: TObject);
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  if ini.ReadString('telMask','maskS','')=''  then begin
  frmMask.Show;
  telMas:= 'frmNewApplication';
  BorS:='s';
  end;
end;

procedure telMask;
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  if telMas= 'frmAddCompany' then begin
   If BorS ='b' then  frmAddCompany.eTelCompany.EditMask:=ini.ReadString('telMask','maskB','');
   If BorS ='s' then  frmAddCompany.eTelCompany.EditMask:=ini.ReadString('telMask','masks','');
  end;
  if telMas= 'frmReceivinOgEquipment' then begin
   If BorS ='b' then  frmReceivinOgEquipment.eTelephonClient.EditMask:=ini.ReadString('telMask','maskB','');
   If BorS ='s' then  frmReceivinOgEquipment.eTelephonClient.EditMask:=ini.ReadString('telMask','masks','');
  end;
  if telMas= 'frmNewApplication' then begin
   If BorS ='b' then  frmNewApplication.eTelephonClient.EditMask:=ini.ReadString('telMask','maskB','');
   If BorS ='s' then  frmNewApplication.eTelephonClient.EditMask:=ini.ReadString('telMask','masks','');
  end;
end;

procedure frmAddCompany_lTelB_OnClick (Sender: TObject);
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  if frmAddCompany.lTelB.Checked=True then begin
  frmAddCompany.eTelCompany.EditMask:=ini.ReadString('telMask','maskB','');
  if ini.ReadString('telMask','maskB','')=''  then frmMask.Show;
  telMas:= 'frmAddCompany';
  BorS:='b';
  end else if frmAddCompany.lTelB.Checked=False then frmAddCompany.eTelCompany.EditMask:=ini.ReadString('telMask','maskS','');
end;

procedure frmReceivinOgEquipment_lTelB_OnClick (Sender: TObject);
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  if frmReceivinOgEquipment.lTelB.Checked=True then begin
  frmReceivinOgEquipment.eTelephonClient.EditMask:=ini.ReadString('telMask','maskB','');
  if ini.ReadString('telMask','maskB','')=''  then frmMask.Show;
  telMas:= 'frmReceivinOgEquipment';
  BorS:='b' ;
  end else if frmReceivinOgEquipment.lTelB.Checked=False then frmReceivinOgEquipment.eTelephonClient.EditMask:=ini.ReadString('telMask','maskS','');
end;


procedure frmMask_eTelB_OnChange (Sender: TObject);
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  ini.WriteString('telMask','maskB',frmMask.eTelB.Text);
end;

procedure frmAddCompany_OnShow (Sender: TObject; Action: string);
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  frmAddCompany.eTelCompany.EditMask:=ini.ReadString('telMask','maskS','');
end;

procedure frmAddCompany_eTelCompany_OnClick (Sender: TObject);
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  if ini.ReadString('telMask','maskB','')=''  then begin
  frmMask.Show;
  telMas:= 'frmAddCompany';
  BorS:='s';
  end;
end;

procedure frmMask_bOk_OnAfterClick (Sender: TObject);
begin
  telMask;
end;

procedure frmMask_eTelS_OnChange (Sender: TObject);
  var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  ini.WriteString('telMask','maskS',frmMask.eTelS.Text);
end;

procedure frmMask_OnShow (Sender: TObject; Action: string);
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  frmMask.eTelS.Text:=ini.ReadString('telMask','maskS','');
  frmMask.eTelB.Text:=ini.ReadString('telMask','maskB','');
end;

procedure frmReceivinOgEquipment_eTelephonClient_OnClick (Sender: TObject);
var
ini:TIniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  if ini.ReadString('telMask','maskS','')=''  then begin
  frmMask.Show;
  telMas:= 'frmReceivinOgEquipment';
  BorS:='s';
  end;
end;
//***********************************************************************************************
//напоминание мастеру, что это оборудование только для диагностики*******************************
//***********************************************************************************************
procedure frmMasterWork_tgListServise_OnClick (Sender: TObject);
begin
  if SQLEXecute('SELECT onlyDiiagnostics FROM servise WHERE id=' +frmMasterWork.tgListServise.sqlValue)='1' then begin
  frmMasterWork.lStatusQD.Caption:=langIniG.ReadString('message','00x37', 'Только диагностика!');
  frmMasterWork.pStatus.Color:=$000080FF;
  end else begin
  frmMasterWork.lStatusQD.Caption:='Ok';
  frmMasterWork.pStatus.Color:=clTeal;  
  end;
end;

//***********************************************************************************************
//----------------------------прочие настройки---------------------------------------------------
//***********************************************************************************************
//запись  прочих настроек формы frmAdmin*********************************************************
//***********************************************************************************************
procedure frmAdmin_dDCopy_OnClick (Sender: TObject; var Cancel: boolean);
var
  s: string;
  ini:TInifile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
  s := '';
  if SelectDirectory('Caption', '', s) then begin
  ini.WriteString ('othersetting', 'DCopy', s);
  frmAdmin.eDCopy.Text:=s;
  end;
end;

procedure frmAdmin_cbKM_OnClick (Sender: TObject);
var
ini:TiniFile;
begin
ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
if frmAdmin.cbKM.ItemIndex=0 then ini.WriteString('othersetting','time','0');
if frmAdmin.cbKM.ItemIndex=1 then ini.WriteString('othersetting','time','1');
ini.Free;
timecopydb;
end;

procedure frmAdmin_eAdressMas_OnChange (Sender: TObject);
begin
iniG :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
iniG.WriteString('othersetting','AdressMas',frmAdmin.eAdressMas.Text);
end;

procedure frmAdmin_eNameMas_OnChange (Sender: TObject);
begin
iniG :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
iniG.WriteString('othersetting','NameMas',frmAdmin.eNameMas.Text);
end;

procedure frmAdmin_eDCopy_OnChange (Sender: TObject);
begin
iniG :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
iniG.WriteString('othersetting','DCopy',frmAdmin.eDCopy.Text);
end;

procedure frmAdmin_eTimeCopy_OnChange (Sender: TObject);
begin
SQLExecute('UPDATE uBD SET timeToCopy="'+frmAdmin.eTimeCopy.Text+'" WHERE id = 1');
timecopydb;
end;

//***********************************************************************************************
//----------------------------проверка существования логина--------------------------------------
//***********************************************************************************************
//если предпоолгаемый логин при регистрации нового пользователя уже существует*******************
//***********************************************************************************************
procedure frmAdmin_bSave_OnClick (Sender: TObject; var Cancel: boolean);
begin
 if frmAdmin.eLogin.Text=SQLEXecute('SELECT login FROM users') then
  begin
   ShowHint(frmAdmin.eLogin, langIniG.ReadString('message','00x2', 'Такой логин уже существует.'));
   Cancel := True;
 end;
end;

//***********************************************************************************************
//------------------------запрет на удаление супер администратора--------------------------------
//***********************************************************************************************
//в случае папытки удаления произайдет ошибка, пользователь получит сообщение********************
//***********************************************************************************************
procedure frmAdmin_bDelete_OnClick (Sender: TObject; var Cancel: boolean);
begin
   if frmAdmin.tgUsers.sqlValue = '1' then begin
     MessageBox(langIniG.ReadString('message','00x3', 'Вы не можете удалить супер администратора.'), langIniG.ReadString('message','00x3x1', 'Ошибка удаления!'), MB_OK+MB_ICONINFORMATION);
   Cancel := True;
   end else begin
   SQLExecute('DELETE FROM users WHERE id='+frmAdmin.tgUsers.sqlValue);
   frmAdmin.tgUsers.dbUpdate;
  end;
end;

//***********************************************************************************************
//--------------проверка суперадминистратора для формы редактирования пользователей--------------
//***********************************************************************************************
//если выбран супер администратор то не возможно изменить его статус*****************************
//***********************************************************************************************
procedure frmUserEdit_OnShow (Sender: TObject; Action: string);
begin
  if frmAdmin.tgUsers.sqlValue='1' then frmUserEdit.cbStatus.Enabled:=False else frmUserEdit.cbStatus.Enabled:=True;
end;

//***********************************************************************************************
// ------------------------------ очистка полей после создания записи ---------------------------
//***********************************************************************************************
procedure frmAdmin_bSave_OnAfterClick (Sender: TObject);
begin
  frmAdmin.eLogin.Clear;
  frmAdmin.ePassword.Clear;
  frmAdmin.cbStatus.dbItemID:=0;
  frmAdmin.cbNoPassword.Checked:=False;
end;

//***********************************************************************************************
//-----------------------------------------печать------------------------------------------------
//***********************************************************************************************
//вывод на печать скана докуманта****************************************************************
//***********************************************************************************************
procedure frmComDoc_bPrint_OnClick (Sender: TObject; var Cancel: boolean);
var
printDialog:TPrintDialog;
begin
printDialog := TPrintDialog.Create(frmComDoc);
if printDialog.Execute then
  begin
  with Printer do
    begin
      BeginDoc;
      Canvas.StretchDraw(0, 0, PageWidth, PageHeight,frmComDoc.dbImage.Picture.Graphic);
      EndDoc ;
    end;
  end;
end;
//***********************************************************************************************
//-----------------------------------------Описание----------------------------------------------
//***********************************************************************************************
//описание полей с тектстом для смс сообщений****************************************************
//***********************************************************************************************
procedure frmAdmin_lDescriptSMSText6_OnMouseEnter (Sender: TObject);
begin
  ShowHint(frmAdmin.lDescriptSMSText6,langIniG.ReadString('message','00x36', 'Когда оборудование выданно'));
end;

procedure frmAdmin_lDescriptSMSText5_OnMouseEnter (Sender: TObject);
begin
  ShowHint(frmAdmin.lDescriptSMSText5,langIniG.ReadString('message','00x35', 'Когда оборудование ожидает в центре выдачи'));
end;

procedure frmAdmin_lDescriptSMSText4_OnMouseEnter (Sender: TObject);
begin
  ShowHint(frmAdmin.lDescriptSMSText4,langIniG.ReadString('message','00x34', 'Когда оборудование преданно в ремонт'));
end;

procedure frmAdmin_lDescriptSMSText3_OnMouseEnter (Sender: TObject);
begin
  ShowHint(frmAdmin.lDescriptSMSText3,langIniG.ReadString('message','00x33', 'Когда для оборудования ожидаются запчасти'));
end;

procedure frmAdmin_lDescriptSMSText2_OnMouseEnter (Sender: TObject);
begin
  ShowHint(frmAdmin.lDescriptSMSText2,langIniG.ReadString('message','00x32', 'Когда оборудование переданно на диагностику'));
end;

procedure frmAdmin_lDescriptSMSText1_OnMouseEnter (Sender: TObject);
begin
  ShowHint(frmAdmin.lDescriptSMSText1,langIniG.ReadString('message','00x31', 'Когда оборудование принято'));
end;


//***********************************************************************************************
//----------------------------конструктор сообщений----------------------------------------------
//***********************************************************************************************
//кнопки копирования значения для вставки в текстовое поле***************************************
//***********************************************************************************************
procedure frmAdmin_bTO_OnClick (Sender: TObject; var Cancel: boolean);
begin
  ClipboardSet('%8:s');
  ShowHint( frmAdmin.bTO ,langIniG.ReadString('message','00x30', 'Скапированно.'));
end;

procedure frmAdmin_bAM_OnClick (Sender: TObject; var Cancel: boolean);
begin
  ClipboardSet('%7:s');
  ShowHint( frmAdmin.bAM ,langIniG.ReadString('message','00x30', 'Скапированно.'));
end;

procedure frmAdmin_bNM_OnClick (Sender: TObject; var Cancel: boolean);
begin
  ClipboardSet('%6:s');
  ShowHint( frmAdmin.bNM ,langIniG.ReadString('message','00x30', 'Скапированно.'));
end;

procedure frmAdmin_bSs_OnClick (Sender: TObject; var Cancel: boolean);
begin
  ClipboardSet('%5:s');
  ShowHint( frmAdmin.bSs ,langIniG.ReadString('message','00x30', 'Скапированно.'));
end;

procedure frmAdmin_bSn_OnClick (Sender: TObject; var Cancel: boolean);
begin
  ClipboardSet('%4:s');
  ShowHint( frmAdmin.bSn ,langIniG.ReadString('message','00x30', 'Скапированно.'));
end;

procedure frmAdmin_bM_OnClick (Sender: TObject; var Cancel: boolean);
begin
  ClipboardSet('%3:s');
  ShowHint( frmAdmin.bM ,langIniG.ReadString('message','00x30', 'Скапированно.'));
end;

procedure frmAdmin_bLn_OnClick (Sender: TObject; var Cancel: boolean);
begin
  ClipboardSet('%2:s');
  ShowHint( frmAdmin.bLn ,langIniG.ReadString('message','00x30', 'Скапированно.'));
end;

procedure frmAdmin_bTn_OnClick (Sender: TObject; var Cancel: boolean);
begin
  ClipboardSet('%1:s');
  ShowHint( frmAdmin.bTn ,langIniG.ReadString('message','00x30', 'Скапированно.'));
end;

procedure frmAdmin_bFn_OnClick (Sender: TObject; var Cancel: boolean);
begin
  ClipboardSet('%0:s');
  ShowHint( frmAdmin.bFn ,langIniG.ReadString('message','00x30', 'Скапированно.'));
end;

//***********************************************************************************************
//--------------показать скрыть панель с дополнительными кнопками конструктора-------------------
//***********************************************************************************************
//скрыть панели пари выходе курсора мышки за их приделы******************************************
//***********************************************************************************************
procedure frmAdmin_pOff_OnMouseLeave (Sender: TObject);
begin
  frmAdmin.pOtherKon.Visible:=False;
  frmAdmin.pOff.Visible:=False;
  frmAdmin.pOff.Enabled:=False;                                                      
  frmAdmin.bOtherKonOff.Visible:=False;
end;

//***********************************************************************************************
//активировать внешнию панель при входе курсора во внутреннюю панель*****************************
//***********************************************************************************************
procedure frmAdmin_pOtherKon_OnMouseEnter (Sender: TObject);
begin
  frmAdmin.pOff.Enabled:=True;
end;

//***********************************************************************************************
//показать панель с дополнительными кнопками конструктора****************************************
//***********************************************************************************************
procedure frmAdmin_bOtherKon_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmAdmin.pOtherKon.Visible:=True;
  frmAdmin.pOff.Visible:=True;
  frmAdmin.bOtherKonOff.Visible:=True;
end;

procedure frmAdmin_bOtherKonOff_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmAdmin.pOtherKon.Visible:=False;
  frmAdmin.pOff.Visible:=False;
  frmAdmin.bOtherKonOff.Visible:=False;
end;
//***********************************************************************************************
//----------------------------переключатель sqlite/mysql-----------------------------------------
//***********************************************************************************************
//вызов функции для перевода программы на MySQL**************************************************
//***********************************************************************************************
procedure frmAdmin_bStartMySQL_OnClick (Sender: TObject; var Cancel: boolean);
begin
SwitchDBMS('mysql');
end;

//***********************************************************************************************
//вызов функции для перевода программы на sqlite*************************************************
//***********************************************************************************************
procedure frmAdmin_bBackSQLite_OnClick (Sender: TObject; var Cancel: boolean);
var
sini:TInifile;
begin
sini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini'); // загрузить фал настроек
if sini.ValueExists('Options', 'server') then begin  // если в файле настроек есть ключ (server)
sini.DeleteKey('Options', 'server'); // удалить ключ (server)
sini.WriteString ('Options', 'DBMS','sqlite'); // изменить запись
showmessage(langIniG.ReadString('message','00x4', 'Подключение выполнен успешно, программа будет перезагружена.'));// сообщить пользователю
OpenFile('start.bat');// перезапуск программы
frmLogin.Close; // закрыть программу
end else SwitchDBMS('sqlite'); // иначе вызвать функцию переключения sqlite/mysql
end;

//***********************************************************************************************
//функция переключения sqlite/mysql**************************************************************
//***********************************************************************************************
function SwitchDBMS(DBMS: string): boolean;
var
    ini : TInifile;
begin
    result := False;
    ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    try
        // если выбран sqlite то..
        if DBMS = 'sqlite' then
        begin
            // если в ini файле уже есть ('Options', 'DBMS', '') = sqlite и отсутствует ('Options', 'server') то сообщить иначе..
            if ini.ReadString('Options', 'DBMS', '') = 'sqlite'  then ShowMessage (langIniG.ReadString('message','00x5', 'Программа уже подключена к SQLite.'))
              else begin
                try
                    // создать запись
                    ini.WriteString('Options', 'DBMS', 'sqlite');
                    // удалить запись
                    ini.DeleteKey('Options', 'server');
                    // вернуть значение правда
                    result := true;
                    // файл загрузки программы
                    OpenFile('start.bat');
                    // закрыть программу
                    frmlogin.Close;
                except
                    // если изменить запись в ini не удалось
                    ShowMessage(langIniG.ReadString('message','00x6', 'Ошибка записи в ini файл.'));
                 end;
            end;
        end;
        // если выбран mysql то..
        if DBMS = 'mysql' then
        begin
            // если в ini файле уже есть ('Options', 'DBMS', '') = my  то сообщить иначе..
            if ini.ReadString('Options', 'DBMS', '') = 'mysql' then ShowMessage (langIniG.ReadString('message','00x7', 'Программа уже подключена к MySQL.'))
            else begin
                try
                    //создать запись
                    ini.WriteString('Options', 'DBMS', 'mysql');
                    // вернуть значение правда
                    result := true;
                    // файл загрузки программы
                    OpenFile('start.bat');
                    // закрыть программу
                    frmlogin.Close;
                except
                    // если изменить запись в ini не удалось
                    ShowMessage(langIniG.ReadString('message','00x6', 'Ошибка записи в ini файл.'));
                end;
            end;
        end;
    // к чему программа приходит всегда, не зависимо от результата исполнения кода
    finally
        // выгрузка ini файла
        ini.Free;
    end;
end;


//***********************************************************************************************
// ------------------------------------- счетчик ------------------------------------------------
//***********************************************************************************************
//предназначен для таблицы servise***************************************************************
//используется как постоянный идентификатор оборудования*****************************************
//***********************************************************************************************
function GetNewRecordCount(TableName: string): integer;
var
ini:TIniFile;
begin
    ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    if ini.ReadString('Options','DBMS','') = 'mysql' then result := SQLExecute('SELECT IFNULL(Max(record_count), 0) FROM `'+TableName+'`') + 1 else
    result := SQLExecute('SELECT IFNULL(Max(record_count), 0) FROM "'+TableName+'"') + 1;
end;

procedure frmReceivinOgEquipment_OnShow (Sender: TObject; Action: string);
var
ini:TIniFile;
begin
    ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
    frmReceivinOgEquipment.RecordCount.Text := IntToStr(GetNewRecordCount('servise'));
    sWarranty:='0';
    sOnlyDiagnostic:='0';
    frmReceivinOgEquipment.eTelephonClient.EditMask:=ini.ReadString('telMask','maskS','');
end;

procedure frmNewApplication_OnShow (Sender: TObject; Action: string);
var
ini:TIniFile;
begin
    ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
 frmNewApplication.RecordCount.Text := IntToStr(GetNewRecordCount('servise'));
 frmNewApplication.eTelephonClient.EditMask:=ini.ReadString('telMask','maskS','');
end;

//***********************************************************************************************
// ------------------------------ Карточки оборудования -----------------------------------------
//***********************************************************************************************
// карточка оборудования компании****************************************************************
//***********************************************************************************************
procedure frmComServiceList_OnShow (Sender: TObject; Action: string);
var s:string ;
begin
    // отбираем список выполненных работ через счетчик записей, для этого передаем record_count в строку eSearchListWork
     //frmComServiceList.eSearchListWork.Text := SQLExecute('SELECT record_count FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     //клик кнопку поиска
     frmComServiceList.bSearchListWork.Click;
     s:= SQLExecute('SELECT IFNULL (SUM(sumInPrice.inPrice), 0) FROM sumInPrice LEFT OUTER JOIN servise ON servise.id=sumInPrice.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eDolg.Text:='"'+langIniG.ReadString('message','00x8', 'Сумма долга:')+'"  '+ IntToStr(SQLExecute('SELECT IFNULL (SUM(listWorkOff.priceWorkOff * listWorkOff.klVoWorkOff), 0)-"'+s+'" FROM listWorkOff LEFT OUTER JOIN servise ON servise.id=listWorkOff.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue));
     frmComServiceList.lAllNameApp.Caption:= SQLExecute('SELECT nameCompany FROM company LEFT OUTER JOIN servise ON company.id=servise.id_company WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.lAllSumm.Caption:=frmComServiceList.eDolg.Text;
end;
//***********************************************************************************************
// Карточка оборудования клиента*****************************************************************
//***********************************************************************************************
procedure clientServiseList_OnShow (Sender: TObject; Action: string);
var s:string ;
begin
     s:= SQLExecute('SELECT IFNULL (SUM(sumInPrice.inPrice), 0) FROM sumInPrice LEFT OUTER JOIN servise ON servise.id=sumInPrice.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eDolg.Text:='"'+langIniG.ReadString('message','00x8', 'Сумма долга:')+'"  '+ IntToStr(SQLExecute('SELECT IFNULL( SUM(listWorkOff.priceWorkOff * listWorkOff.klVoWorkOff), 0)-"'+s+'" FROM listWorkOff LEFT OUTER JOIN servise ON servise.id=listWorkOff.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue));
     // отбираем список выполненных работ через счетчик записей, для этого передаем record_count в строку eSearchListWork
     //frmClientServiсeList.eSearchListWork.Text := SQLExecute('SELECT record_count FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     //клик кнопку поиска
    frmClientServiсeList.bSearchListWork.Click;
    frmClientServiсeList.lAllNameApp.Caption:= SQLExecute('SELECT name FROM twoNameClient LEFT OUTER JOIN  servise  ON twoNameClient.id = servise.id_twoNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue)+'  '+SQLExecute('SELECT name FROM firstNameClient LEFT OUTER JOIN  servise  ON firstNameClient.id = servise.id_firstNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue)+'  '+SQLExecute('SELECT name FROM lastNameClient LEFT OUTER JOIN  servise  ON lastNameClient.id = servise.id_lastNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
    frmClientServiсeList.lAllSumm.Caption:=  frmClientServiсeList.eDolg.Text;
end;
//***********************************************************************************************
//Карточка заявки********************************************************************************
//***********************************************************************************************
procedure frmAppl_OnShow (Sender: TObject; Action: string);
var s,t:string ;
begin
    s:= SQLExecute('SELECT IFNULL (SUM(sumInPrice.inPrice),0) FROM sumInPrice LEFT OUTER JOIN servise ON servise.id=sumInPrice.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
    frmAppl.eDolg.Text:='"'+langIniG.ReadString('message','00x8', 'Сумма долга:')+'"  '+ IntToStr(SQLExecute('SELECT IFNULL (SUM(listWorkOff.priceWorkOff * listWorkOff.klVoWorkOff), 0)-"'+s+'" FROM listWorkOff LEFT OUTER JOIN servise ON servise.id=listWorkOff.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue));
    //отбираем список выполненных работ через счетчик записей, для этого передаем record_count в строку eSearchListWork
    //frmAppl.eSearchListWork.Text := SQLExecute('SELECT record_count FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
    //клик кнопку поиска
    frmAppl.bSearchListWork.Click;
    frmAppl.eDateApplcation.Text:= SQLExecute('SELECT dateApplcation FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
    frmAppl.eTimeApplication.Text:= SQLExecute('SELECT timeApplication FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
    //frmAppl.gbNameCli.Caption:= SQLExecute('SELECT name FROM twoNameClient LEFT OUTER JOIN  servise  ON twoNameClient.id = servise.id_twoNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue)+'  '+SQLExecute('SELECT name FROM firstNameClient LEFT OUTER JOIN  servise  ON firstNameClient.id = servise.id_firstNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue)+'  '+SQLExecute('SELECT name FROM lastNameClient LEFT OUTER JOIN  servise  ON lastNameClient.id = servise.id_lastNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
    frmAppl.lAllNameApp.Caption:= SQLExecute('SELECT name FROM twoNameClient LEFT OUTER JOIN  servise  ON twoNameClient.id = servise.id_twoNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue)+'  '+SQLExecute('SELECT name FROM firstNameClient LEFT OUTER JOIN  servise  ON firstNameClient.id = servise.id_firstNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue)+'  '+SQLExecute('SELECT name FROM lastNameClient LEFT OUTER JOIN  servise  ON lastNameClient.id = servise.id_lastNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
    frmAppl.lAllSumm.Caption:=frmAppl.eDolg.Text;
end;
//***********************************************************************************************
// поиск заявок**********************************************************************************
//***********************************************************************************************
procedure frmServiceCen_bsearchEditVisible_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmServiceCen.pAppSearch.Visible = False then frmServiceCen.pAppSearch.Visible:=True else frmServiceCen.pAppSearch.Visible:=False;
end;

procedure frmServiceCen_bsearchNone_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmServiceCen.pAppSearch.Visible:=False;
end;

//***********************************************************************************************
//----------------------------Передача из TableGrid в ComboBox-----------------------------------
//***********************************************************************************************
//при выборе значения в TableGrid нужно через кнопку Ок передать это значение в  ComboBox********
//так как форма очищается при открытии я не замарачиваюсь и передаю значения в  ComboBox*********
//на разных формах ******************************************************************************
//***********************************************************************************************

//***********************************************************************************************
//передача из грида МАСТЕРА в combobox (frmListWorkR.cbIdServiceWork)****************************
//***********************************************************************************************
procedure frmMasterWork_bWorkOff_OnClick (Sender: TObject; var Cancel: boolean);
begin
 frmListWorkR.cbIdServiceWork.DbItemID := SQLExecute('SELECT id FROM servise WHERE id='+ frmMasterWork.tgListServise.sqlValue);
end;
//***********************************************************************************************
//передача множественного выбора из грида (frmAllListEquipment.tgAllListEquipment) в combobox****
//(frmReceivinOgEquipment.cbEquipment)***********************************************************
//***********************************************************************************************
procedure frmAllListEquipment_bOk_OnClick (Sender: TObject; var Cancel: boolean);
    var
    i, c: integer;
    ii, cc: integer;
begin
    frmReceivinOgEquipment.cbEquipment.SetAllCheckBoxes(False);
    c := frmAllListEquipment.tgAllListEquipment.RowCount-1;
    for i := 0 to c do
    begin
        if frmAllListEquipment.tgAllListEquipment.Selected[i] then
        begin
            cc := frmReceivinOgEquipment.cbEquipment.Items.Count-1;
            for ii := 0 to cc do
            begin
                if frmReceivinOgEquipment.cbEquipment.dbIndexToID(ii) = frmAllListEquipment.tgAllListEquipment.dbIndexToID(i) then
                begin
                    frmReceivinOgEquipment.cbEquipment.ItemsChecked[ii] := true;
                    break;
                end;
            end;
        end;
    end;
end;                                                            
//***********************************************************************************************
//передача выбранной записи из грида (frmTypeDoc.tgSHO) в combobox (frmComDoc.cbTypeDoc)*********
//***********************************************************************************************
procedure frmTypeDoc_bOk_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmComDoc.cbTypeDoc.dbItemID := frmTypeDoc.tgSHO.dbItemID;
end;
//***********************************************************************************************
//передача выбранной записи из грида (frmAllListCompany.tgAllListCompany) в combobox*************
//(frmReceivinOgEquipment.cbNameCompany)и из грида (frmAllListCompany.tgAllListCompany) в********
//combobox (frmCompanyServiceWork.cbNameCompany)*************************************************
//***********************************************************************************************
procedure frmAllListCompany_bOk_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmReceivinOgEquipment.cbNameCompany.dbItemID := frmAllListCompany.tgAllListCompany.dbItemID;
    frmCompanyServiceWork.cbNameCompany.dbItemID := frmAllListCompany.tgAllListCompany.dbItemID;
end;
//***********************************************************************************************
//передача выбранной записи из грида (frmAllListManufacturer.tgAllListManufacturer) в combobox***
//(frmReceivinOgEquipment.cbNameManufacturer)****************************************************
//***********************************************************************************************
procedure frmAllListManufacturer_bOk_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmReceivinOgEquipment.cbNameManufacturer.dbItemID := frmAllListManufacturer.tgAllListManufacturer.dbItemID;
end;
//***********************************************************************************************
//передача выбранной записи из грида (frmAllListTypeOfEquipment.tgAllListTypeOfEquipment) в******
//combobox (frmReceivinOgEquipment.cbNameTypeOfEquipment)****************************************
//***********************************************************************************************
procedure frmAllListTypeOfEquipment_bOk_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmReceivinOgEquipment.cbNameTypeOfEquipment.dbItemID := frmAllListTypeOfEquipment.tgAllListTypeOfEquipment.dbItemID;

end;


//***********************************************************************************************
//------------------------------- выбор последней записи ----------------------------------------
//***********************************************************************************************
//после создания новой записи в базе данных в гриде автомотически выбирается последняя***********
//созданная запись*******************************************************************************
//***********************************************************************************************
procedure frmAddCompany_bSave_OnAfterClick (Sender: TObject);
var
 PrevAction: string;
begin
  PrevAction := '';
  frmAllListCompany.tgAllListCompany.dbUpdate;
  frmAllListCompany.tgAllListCompany.dbItemID := Last_Insert_id();
  frmAllListCompany.tgAllListCompany.ScrollToRow(frmAllListCompany.tgAllListCompany.SelectedRow);
  frmAllListCompany.tgAllListCompany.SetFocus;
end;

procedure frmAddEquipment_bSave_OnAfterClick (Sender: TObject);
var
 PrevAction: string;
begin
  PrevAction := '';
  frmAllListEquipment.tgAllListEquipment.dbUpdate;
  frmAllListEquipment.tgAllListEquipment.dbItemID := Last_Insert_id();
  frmAllListEquipment.tgAllListEquipment.ScrollToRow(frmAllListEquipment.tgAllListEquipment.SelectedRow);
  frmAllListEquipment.tgAllListEquipment.SetFocus;
end;

procedure frmAddManufacturer_bSave_OnAfterClick (Sender: TObject);
var
 PrevAction: string;
begin
  PrevAction := '';
  frmAllListManufacturer.tgAllListManufacturer.dbUpdate;
  frmAllListManufacturer.tgAllListManufacturer.dbItemID := Last_Insert_id();
  frmAllListManufacturer.tgAllListManufacturer.ScrollToRow(frmAllListManufacturer.tgAllListManufacturer.SelectedRow);
  frmAllListManufacturer.tgAllListManufacturer.SetFocus;
end;


//***********************************************************************************************
//----------------------------------- Очистка полей ---------------------------------------------
//***********************************************************************************************
//при повторном открыти формы новой записи в полях остаются предыдущее записи, очищать OnShow****
//нет смысла потому  при открытии все поля очищаем через button_OnClick**************************
//ComboBox переводим в значение 0, установка метки для последующего выбора карточки оборудования*
// при двойном клике, установка статуса оборудования в значение 1 - принято.*********************
//***********************************************************************************************
procedure frmServiceCen_bServiceWork_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmCompanyServiceWork.ePrice.Clear;
    frmCompanyServiceWork.eKlvo.Clear;
    frmCompanyServiceWork.cbCompanyNameSearch.dbItemID:= 0 ;
    frmCompanyServiceWork.cbNameCompany.dbItemID:= 0 ;
    frmCompanyServiceWork.cbListWork.dbItemID:= 0 ;
end;
procedure frmServiceCen_bDoc_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmComDoc.eDescriptionDoc.Clear;
    frmComDoc.eNameDoc.Clear;
    frmComDoc.cbTypeDoc.dbItemID:= 0 ;
end;
procedure frmServiceCen_bCompanyService_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmReceivinOgEquipment.eTelephonClient.Clear;
    frmReceivinOgEquipment.eTwoNameClient.Clear;
    frmReceivinOgEquipment.ePassportNamberClient.Clear;
    frmReceivinOgEquipment.ePassportSeriesClient.Clear;
    frmReceivinOgEquipment.eFirstNameClient.Clear;
    frmReceivinOgEquipment.eLastNameClient.Clear;
    frmReceivinOgEquipment.eAdresClient.Clear;
    frmReceivinOgEquipment.eEquipment.Clear;
    frmReceivinOgEquipment.eModel.Clear;
    frmReceivinOgEquipment.eSerialNamber.Clear;
    frmReceivinOgEquipment.mDescriptionATCsWords.Clear;
    frmReceivinOgEquipment.mExternalStatus.Clear;
    frmReceivinOgEquipment.cbNameTypeOfEquipment.dbItemID:= 0 ;
    frmReceivinOgEquipment.cbNameCompany.dbItemID:= 0 ;
    frmReceivinOgEquipment.cbNameManufacturer.dbItemID:= 0 ;
    frmReceivinOgEquipment.cbEquipment.SetAllCheckBoxes(False);
    frmReceivinOgEquipment.cbTCK.dbItemID:= 0 ;
    // метка для выбора формы просмотра записи
    frmReceivinOgEquipment.cbnameclCompanyOrApp.DbItemID:= 0 ;
    // статус оборудования
    frmReceivinOgEquipment.cbStatusName.DbItemID:= 1 ;
end;

procedure frmServiceCen_bNewApplication_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmNewApplication.eAdresClient.Clear;
    frmNewApplication.eFirstNameClient.Clear;
    frmNewApplication.eLastNameClient.Clear;
    frmNewApplication.eTelephonClient.Clear;
    frmNewApplication.eTwoNameClient.Clear;
    frmNewApplication.mDescriptionOfTheProblem.Clear;
    // метка для выбора формы просмотра записи
    frmNewApplication.cbnameclCompanyOrApp.DbItemID:= 3 ;
    // статус оборудования
    frmNewApplication.cbStatusName.DbItemID:= 1 ;
end;


procedure frmPriceList_bNew_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmAddPriceList.eNamePrice.Clear;
    frmAddPriceList.ePrice.Clear;
end;

procedure frmAllListTypeOfEquipment_bNew_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmAddTypeOfEquipment.eNameTypeOfEquipment.Clear;
end;

procedure frmAllListManufacturer_bNew_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmAddManufacturer.eNameManufacturer.Clear;
end;

procedure frmAllListEquipment_bNew_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmAddEquipment.eNameEquipment.Clear;
end;

procedure frmAllListCompany_bNew_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmAddCompany.eNameCompany.Clear;
    frmAddCompany.eStreetCompany.Clear;
    frmAddCompany.eHouseCompany.Clear;
    frmAddCompany.eFractionCompany.Clear;
    frmAddCompany.eOfficeCompany.Clear;
    frmAddCompany.eTelCompany.Clear;
end;

procedure frmTypeDoc_bNew_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmAddTypeDoc.eTypeDoc.Clear;
end;


//***********************************************************************************************
//------------------------------разные настройки форм -------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//дополнительные настройки формы мастерской******************************************************
//***********************************************************************************************
procedure frmMasterWork_OnShow (Sender: TObject; Action: string);
begin
  //вызываем функцию выподающего меню и передаем в нее имя формы
  if (sOne = '0') then SwitchMenu('frmMasterWork','');
  // начальный фильтр грида
  frmMasterWork.bSearchCancel.Click;
  // запред  открытия окна по двойному клику
  frmMasterWork.tgListServise.dbPopupMenu.Items[0].Enabled := False;
  // создание иконок для кнопок
  ImageList:=TImageList.Create(frmMasterWork);
  ImageList.Masked:=false;
  ImageList.ColorDepth:=cd32bit;
  // размер изображений
  ImageList.Width := 20;
  ImageList.Height := 20;
  // загрузка изображений
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\8.png');   //0
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\9.png');   //1
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\10.png');  //2
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\11.png');  //3
  // ImageList для кнопок
  frmMasterWork.bDiagnostic.Images := ImageList;
  frmMasterWork.bWorkOff.Images := ImageList;
  frmMasterWork.bStatus.Images := ImageList;
  frmMasterWork.bEq.Images := ImageList;
  // присваевает изображения к кнопкам
  frmMasterWork.bDiagnostic.ImageIndex := 0;
  frmMasterWork.bWorkOff.ImageIndex := 1;
  frmMasterWork.bStatus.ImageIndex := 2;
  frmMasterWork.bEq.ImageIndex := 3;
end;
//***********************************************************************************************
//редактировать мобильного пользователя**********************************************************
//***********************************************************************************************
procedure frmAdmin_bEditUser_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if  frmAdmin.tgUserApp.SelectedRow >-1   then frmEditUser.Show else Showmessage('Запись не выбрана!');
end;
//***********************************************************************************************
//фокус******************************************************************************************
//***********************************************************************************************
procedure frmNewUser_OnShow (Sender: TObject; Action: string);
begin
  frmNewUser.bCancel.SetFocus;
end;
//***********************************************************************************************
//фокус******************************************************************************************
//***********************************************************************************************
procedure frmReqID_OnShow (Sender: TObject; Action: string);
begin
  frmReqID.bCancel.SetFocus;
end;
//***********************************************************************************************
//отображение логина и ip пользователя в строках блакировки**************************************
//***********************************************************************************************
procedure frmAdmin_tgUsersl_OnCellClick (Sender: TObject; ACol, ARow: Integer);
begin
  frmAdmin.eIP.Text:=SQLEXecute('SELECT ipuser FROM users WHERE id='+frmAdmin.tgUsersl.sqlValue);
  frmAdmin.eBLogin.Text:=SQLEXecute('SELECT login FROM users WHERE id='+frmAdmin.tgUsersl.sqlValue);
end;

//***********************************************************************************************
//имена колонок грида ***************************************************************************
//***********************************************************************************************

procedure frmallstatus_OnShow (Sender: TObject; Action: string);
begin
  frmallstatus.tgStatus.Columns[0].Header.Caption:= langIniG.ReadString('col','col31', 'Имя статуса');
end;

procedure frmAppl_bSearchListWork_OnAfterClick (Sender: TObject);
begin
  frmAppl.tgServiseList.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
  frmAppl.tgServiseList.Columns[1].Header.Caption:= langIniG.ReadString('col','col27', 'Кол-во');
  frmAppl.tgServiseList.Columns[2].Header.Caption:= langIniG.ReadString('col','col25', 'Цена');
end;

procedure frmClientServiсeList_bSearchListWork_OnAfterClick (Sender: TObject);
begin
  frmClientServiсeList.tgServiseList.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
  frmClientServiсeList.tgServiseList.Columns[1].Header.Caption:= langIniG.ReadString('col','col27', 'Кол-во');
  frmClientServiсeList.tgServiseList.Columns[2].Header.Caption:= langIniG.ReadString('col','col25', 'Цена');
end;

procedure frmComServiceList_bSearchListWork_OnAfterClick (Sender: TObject);
begin
  frmComServiceList.tgServiseList.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
  frmComServiceList.tgServiseList.Columns[1].Header.Caption:= langIniG.ReadString('col','col27', 'Кол-во');
  frmComServiceList.tgServiseList.Columns[2].Header.Caption:= langIniG.ReadString('col','col25', 'Цена');
end;

{procedure frmComDoc_bSearch_OnAfterClick (Sender: TObject);
begin
 frmComDoc.tgResultSearch.Columns[0].Header.Caption:= langIniG.ReadString('col','col24', 'Дата');
 frmComDoc.tgResultSearch.Columns[1].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
 frmComDoc.tgResultSearch.Columns[2].Header.Caption:= langIniG.ReadString('col','col29', 'Описание');
 frmComDoc.tgResultSearch.Columns[3].Header.Caption:= langIniG.ReadString('col','col30', 'Тип');
end; }

procedure frmComDoc_OnShow (Sender: TObject; Action: string);
begin
 frmComDoc.tgResultSearch.Columns[0].Visible:=False;
 frmComDoc.tgResultSearch.Columns[1].Width:=frmComDoc.tgResultSearch.Width-10;
end;

procedure frmPriceList_OnShow (Sender: TObject; Action: string);
begin
  frmPriceList.tgPriceList.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя '); ;
  frmPriceList.tgPriceList.Columns[1].Header.Caption:= langIniG.ReadString('col','col25', 'Цена');
end;

procedure frmCompanyServiceWork_bSearch_OnAfterClick (Sender: TObject);
begin
 frmCompanyServiceWork.tgCompanyWork.Columns[0].Header.Caption:= langIniG.ReadString('col','col24', 'Дата');
 frmCompanyServiceWork.tgCompanyWork.Columns[1].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
 frmCompanyServiceWork.tgCompanyWork.Columns[2].Header.Caption:= langIniG.ReadString('col','col25', 'Цена');
 frmCompanyServiceWork.tgCompanyWork.Columns[3].Header.Caption:= langIniG.ReadString('col','col27', 'Кол-во');
 frmCompanyServiceWork.tgCompanyWork.Columns[4].Header.Caption:= langIniG.ReadString('col','col28', 'Итого');
end;

procedure frmAllListCompany_OnShow (Sender: TObject; Action: string);
begin
  frmAllListCompany.tgAllListCompany.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя '); ;
end;

procedure frmAllListEquipment_OnShow (Sender: TObject; Action: string);
begin
  frmAllListEquipment.tgAllListEquipment.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя '); ;
end;

procedure frmAllListManufacturer_OnShow (Sender: TObject; Action: string);
begin
  frmAllListManufacturer.tgAllListManufacturer.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя '); ;
end;

procedure frmAllListTypeOfEquipment_OnShow (Sender: TObject; Action: string);
begin
  frmAllListTypeOfEquipment.tgAllListTypeOfEquipment.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя '); ;
end;

procedure frmServiceCen_bSearch_OnAfterClick (Sender: TObject);
begin
  frmServiceCen.tgList.Columns[0].Header.Caption:= langIniG.ReadString('col','col0', 'ID');
  frmServiceCen.tgList.Columns[1].Header.Caption:= langIniG.ReadString('col','col1', 'Оборудование');
  frmServiceCen.tgList.Columns[2].Header.Caption:= langIniG.ReadString('col','col2', 'Производитель');
  frmServiceCen.tgList.Columns[3].Header.Caption:= langIniG.ReadString('col','col3', 'Модель');
  frmServiceCen.tgList.Columns[4].Header.Caption:= langIniG.ReadString('col','col4', 'Серийный номер');
  frmServiceCen.tgList.Columns[5].Header.Caption:= langIniG.ReadString('col','col5', 'Дата приёма');
  frmServiceCen.tgList.Columns[6].Header.Caption:= langIniG.ReadString('col','col6', 'Статус');
  frmServiceCen.tgList.Columns[7].Header.Caption:= langIniG.ReadString('col','col7', 'Гарантийный');
  frmServiceCen.tgList.Columns[8].Header.Caption:= langIniG.ReadString('col','col8', 'Только диагностика');
  frmServiceCen.tgList.Columns[9].Header.Caption:= langIniG.ReadString('col','col9', 'СМС отправленно');     
  ServicetgList:=0;
end;

procedure frmServiceCen_tgList_OnChange (Sender: TObject);
var
s:string;
begin
  if ServicetgList = 0 then
         begin
            s := langIniG.ReadString('col','col0', 'ID');
            s := s + ','+ langIniG.ReadString('col','col1', 'Оборудование');
            s := s + ','+ langIniG.ReadString('col','col2', 'Производитель');
            s := s + ','+ langIniG.ReadString('col','col3', 'Модель');
            s := s + ','+ langIniG.ReadString('col','col4', 'Серийный номер');
            s := s + ','+ langIniG.ReadString('col','col5', 'Дата приёма');
            s := s + ','+ langIniG.ReadString('col','col6', 'Статус');
            s := s + ','+ langIniG.ReadString('col','col7', 'Гарантийный');
            s := s + ','+ langIniG.ReadString('col','col8', 'Только диагностика');
            s := s + ','+ langIniG.ReadString('col','col9', 'СМС отправленно');
            frmServiceCen.bSearch.dbListFieldsNames := s;
         end;
   if ServicetgList = 1 then begin
             s := langIniG.ReadString('col','col10', 'Дата заявки');
             s := s + ','+langIniG.ReadString('col','col11', 'Имя ');
             s := s + ','+langIniG.ReadString('col','col12', 'Фамилия ');
             s := s + ','+langIniG.ReadString('col','col13', 'Телефон');
             s := s + ','+langIniG.ReadString('col','col14', 'Дата ожидания ');
             s := s + ','+langIniG.ReadString('col','col15', 'Время ожидания ');
             s := s + ','+langIniG.ReadString('col','col16', 'Заявку принял');
             s := s + ','+langIniG.ReadString('col','col17', 'Статус заявки');
             frmServiceCen.bListApplication.dbListFieldsNames := s;
      end;
end;

procedure frmServiceCen_bListApplication_OnAfterClick (Sender: TObject);
begin
  frmServiceCen.tgList.Columns[0].Header.Caption:= langIniG.ReadString('col','col10', 'Дата заявки');
  frmServiceCen.tgList.Columns[1].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
  frmServiceCen.tgList.Columns[2].Header.Caption:= langIniG.ReadString('col','col12', 'Фамилия ');
  frmServiceCen.tgList.Columns[3].Header.Caption:= langIniG.ReadString('col','col13', 'Телефон');
  frmServiceCen.tgList.Columns[4].Header.Caption:= langIniG.ReadString('col','col14', 'Дата ожидания ');
  frmServiceCen.tgList.Columns[5].Header.Caption:= langIniG.ReadString('col','col15', 'Время ожидания ');
  frmServiceCen.tgList.Columns[6].Header.Caption:= langIniG.ReadString('col','col16', 'Заявку принял');
  frmServiceCen.tgList.Columns[7].Header.Caption:= langIniG.ReadString('col','col17', 'Статус заявки');
  ServicetgList:= 1;
end;

procedure frmServiceCen_bCancel_OnAfterClick (Sender: TObject);
begin
  frmServiceCen.tgList.Columns[0].Header.Caption:= langIniG.ReadString('col','col0', 'ID');
  frmServiceCen.tgList.Columns[1].Header.Caption:= langIniG.ReadString('col','col1', 'Оборудование');
  frmServiceCen.tgList.Columns[2].Header.Caption:= langIniG.ReadString('col','col2', 'Производитель');
  frmServiceCen.tgList.Columns[3].Header.Caption:= langIniG.ReadString('col','col3', 'Модель');
  frmServiceCen.tgList.Columns[4].Header.Caption:= langIniG.ReadString('col','col4', 'Серийный номер');
  frmServiceCen.tgList.Columns[5].Header.Caption:= langIniG.ReadString('col','col5', 'Дата приёма');
  frmServiceCen.tgList.Columns[6].Header.Caption:= langIniG.ReadString('col','col6', 'Статус');
  frmServiceCen.tgList.Columns[7].Header.Caption:= langIniG.ReadString('col','col7', 'Гарантийный');
  frmServiceCen.tgList.Columns[8].Header.Caption:= langIniG.ReadString('col','col8', 'Только диагностика');
  frmServiceCen.tgList.Columns[9].Header.Caption:= langIniG.ReadString('col','col9', 'СМС отправленно');
  ServicetgList:=0;
  frmServiceCen.cbCompanySearch.dbItemID:=-1;
  frmServiceCen.cbstatusNameSearch.dbItemID:=-1;
  frmServiceCen.dtpOt.Checked:=False;
  frmServiceCen.dtpDo.Checked:=False;
  frmServiceCen.eserialNamberSearch.Clear;
  frmServiceCen.emodelSearch.Clear;
end;

procedure frmKompl_OnShow (Sender: TObject; Action: string);
begin
   frmKompl.tgKompl.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
end;

procedure frmListWorkR_bSearch_OnAfterClick (Sender: TObject; var Cancel: boolean);
begin
 frmListWorkR.tgListWorkOff.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
 frmListWorkR.tgListWorkOff.Columns[1].Header.Caption:= langIniG.ReadString('col','col25', 'Цена');
 frmListWorkR.tgListWorkOff.Columns[2].Header.Caption:= langIniG.ReadString('col','col26', 'Колличество');
end;

procedure frmMasterWork_bSearchApp_OnAfterClick(Sender: TObject; var Cancel: boolean);
begin
  frmMasterWork.tgListServise.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
  frmMasterWork.tgListServise.Columns[1].Header.Caption:= langIniG.ReadString('col','col12', 'Фамилия ');
  frmMasterWork.tgListServise.Columns[2].Header.Caption:= langIniG.ReadString('col','col13', 'Телефон');
  Servicetgmaster:= 1;
end;

procedure frmMasterWork_bSearchCancel_OnAfterClick (Sender: TObject; var Cancel: boolean);
begin
  frmMasterWork.tgListServise.Columns[0].Header.Caption:= langIniG.ReadString('col','col0', 'ID');
  frmMasterWork.tgListServise.Columns[1].Header.Caption:= langIniG.ReadString('col','col3', 'Модель');
  frmMasterWork.tgListServise.Columns[2].Header.Caption:= langIniG.ReadString('col','col4', 'Серийный номер');
  frmMasterWork.tgListServise.Columns[3].Header.Caption:= langIniG.ReadString('col','col6', 'Статус');
  Servicetgmaster:= 0;
end;

procedure frmMasterWork_bSearch_OnAfterClick (Sender: TObject; var Cancel: boolean);
begin
  frmMasterWork.tgListServise.Columns[0].Header.Caption:= langIniG.ReadString('col','col0', 'ID');
  frmMasterWork.tgListServise.Columns[1].Header.Caption:= langIniG.ReadString('col','col3', 'Модель');
  frmMasterWork.tgListServise.Columns[2].Header.Caption:= langIniG.ReadString('col','col4', 'Серийный номер');
  frmMasterWork.tgListServise.Columns[3].Header.Caption:= langIniG.ReadString('col','col6', 'Статус');
  Servicetgmaster:= 0;
end;
procedure frmListLogin_OnShow (Sender: TObject; Action: string);
begin
  frmListLogin.tgListLogin.Columns[0].Header.Caption:= langIniG.ReadString('col','col8', 'Логин');
end;
//***********************************************************************************************
//дополнительные настройки формы frmAdmin********************************************************
//***********************************************************************************************
procedure frmAdmin_OnShow (Sender: TObject; Action: string);
  var
  ini, online, db, scbCopyOndb:TInifile;
  r,sdb:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  db :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\db.ini');
  online:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
  scbCopyOndb:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
  frmAdOnOF:=1;
  // получить значения чкбокса резервного копирования
  scbCopyOndb.ReadBool('othersetting', 'on', frmAdmin.cbCopyOndb.Checked);
  // получить значения чкбокса ВЕРСИЯ ДЛЯ ОДНОГО ПК
  sOne := iniSetting.ReadString('nologin', 'Enabled', '');
  //вызываем функцию выподающего меню и передаем в нее имя формы
  if (sOne = '0') then SwitchMenu('frmAdmin','');
  //обновить грид
  frmAdmin.tgUsers.dbUpdate;
  //сознаем выподающий список операторов смс
  frmAdmin.cbSmsSend.Items.add('epochta');
  frmAdmin.cbSmsSend.items.add('SMS.RU');
  frmAdmin.cbSmsSend.items.add('smsc');
  //отобразить в выпающем списке имя оператора в соответствии с записью в файле настроек
  if (ini.ReadString('sender','sendersms','')='epochta') then frmAdmin.cbSmsSend.ItemIndex:=0;
  if (ini.ReadString('sender','sendersms','')='SMS.RU') then frmAdmin.cbSmsSend.ItemIndex:=1;
  if (ini.ReadString('sender','sendersms','')='smsc') then frmAdmin.cbSmsSend.ItemIndex:=2;
  //если в выподающий список операторов смс нет выбора убираем ссылки на операторов
  if frmAdmin.cbSmsSend.ItemIndex=-1 then begin
  frmAdmin.bEpochta.Visible:=False;
  frmAdmin.bSMSRU.Visible:=False;
  frmAdmin.bsmsc.Visible:=False;
  end;
  //если выбран операторов смс epochta
  if (ini.ReadString('sender','sendersms','')='epochta') then begin
  frmAdmin.bEpochta.Visible:=True;
  frmAdmin.bSMSRU.Visible:=False;
  frmAdmin.bsmsc.Visible:=False;
  end;
  //если выбран операторов смс turbosms
  if (ini.ReadString('sender','sendersms','')='SMS.RU') then begin
  frmAdmin.bEpochta.Visible:=False;
  frmAdmin.bSMSRU.Visible:=True;
  frmAdmin.bsmsc.Visible:=False;
  end;
  //если выбран операторов смс bClickatel
  if (ini.ReadString('sender','sendersms','')='smsc') then begin
  frmAdmin.bEpochta.Visible:=False;
  frmAdmin.bSMSRU.Visible:=False;
  frmAdmin.bsmsc.Visible:=True;
  end;
  // загружаем настройки подключения к оператору
  frmAdmin.eLoginSms.Text:= ini.ReadString('senderlog','SMSLogin','');
  frmAdmin.ePasswordSms.Text:= ini.ReadString('senderlog','SMSPassword','');
  frmAdmin.eSenderSms.Text:= ini.ReadString('senderlog','SMSSender','');
  frmAdmin.eSMSAPI.Text:= ini.ReadString('senderlog','SMSAPI_ID','');
  //загружаем прочие настройки настройки
  frmAdmin.eTimeCopy.Text:= SQLExecute('SELECT timeToCopy FROM uBD WHERE id = 1');
  frmAdmin.eDCopy.Text:= iniG.ReadString('othersetting','DCopy','');
  frmAdmin.eNameMas.Text:= iniG.ReadString('othersetting','NameMas','');
  frmAdmin.eAdressMas.Text:= iniG.ReadString('othersetting','AdressMas','');
  // создаем выподающий список времени резервного копирования
  frmAdmin.cbKM.Items.add(langIniG.ReadString('Admin','cbKM',''));
  frmAdmin.cbKM.items.add(langIniG.ReadString('Admin','cbKK',''));
  // создаем выподающий список времени обновления данных
  frmAdmin.cbTimeUpdate.Clear;
  frmAdmin.cbTimeUpdate.Items.add(langIniG.ReadString('Admin','cbKM',''));
  frmAdmin.cbTimeUpdate.items.add(langIniG.ReadString('Admin','cbKK',''));
  frmAdmin.eTimeUpdate.Text:= online.ReadString('online','UT','');
  //отобразить в выпающем списке временя резервного копирования в соответствии с записью в файле настроек
  if (iniG.ReadString('othersetting','time','')='0') then frmAdmin.cbKM.ItemIndex:=0;
  if (iniG.ReadString('othersetting','time','')='1') then frmAdmin.cbKM.ItemIndex:=1;
  //отобразить в выпающем списке временя обновления данных
  if (online.ReadString('online','time','')='0') then frmAdmin.cbTimeUpdate.ItemIndex:=0;
  if (online.ReadString('online','time','')='1') then frmAdmin.cbTimeUpdate.ItemIndex:=1;
  // считываем значение чекбокса (вкл-выкл смс сообщений)
  frmAdmin.chbEnableSMSmessages.Checked:=Ini.ReadBool('smstr','EnableSMSmessages',frmAdmin.chbEnableSMSmessages.Checked);
  // если смс сообщения включены включается управление настройками
  if frmAdmin.chbEnableSMSmessages.Checked then
  begin
    frmAdmin.gbLogin.Enabled:=True;
    frmAdmin.gbMessag.Enabled:=True;
    frmAdmin.gbOperator.Enabled:=True;
  end;
  //считываем значения чекбоксов
  frmAdmin.chbEquipmenTaken.Checked:=Ini.ReadBool('smstr','et',frmAdmin.chbEquipmenTaken.Checked);
  frmAdmin.chbEquipmenTakenDiagnose.Checked:=Ini.ReadBool('smstr','etd',frmAdmin.chbEquipmenTakenDiagnose.Checked);
  frmAdmin.chbDiagnosticResults.Checked:=Ini.ReadBool('smstr','dr',frmAdmin.chbDiagnosticResults.Checked);
  frmAdmin.chbEquipmentExpected.Checked:=Ini.ReadBool('smstr','epae',frmAdmin.chbEquipmentExpected.Checked);
  frmAdmin.chbEquipmentRepair.Checked:=Ini.ReadBool('smstr','eur',frmAdmin.chbEquipmentRepair.Checked);
  frmAdmin.chbEquipmenAwaitsCenter.Checked:=Ini.ReadBool('smstr','eaatic',frmAdmin.chbEquipmenAwaitsCenter.Checked);
  frmAdmin.cbMobileDataOnOff.Checked:=online.ReadBool('online','Enabled',frmAdmin.cbMobileDataOnOff.Checked);
  //вкладка мобильного приложения
  if frmAdmin.cbMobileDataOnOff.Checked then frmAdmin.gbMobileData.Enabled:=True else frmAdmin.gbMobileData.Enabled:=False;
  //загрузка перраметров мабильной авторизации
  frmAdmin.eloginst.Text:=online.ReadString('online','login','');
  frmAdmin.ePass.Text:=online.ReadString('online','password','');
  frmAdmin.eIdService.Text:=online.ReadString('online','IDservice','');
  //кнопка оператор не выбран
  frmAdmin.bNoOp.Enabled:=False;
  // групбокс
  frmAdmin.gbSQLite.Visible:=True;
  // создание иконок для кнопок
  ImageList:=TImageList.Create(frmAdmin);
  ImageList.Masked:=false;
  ImageList.ColorDepth:=cd32bit;
  // размер изображения
  ImageList.Width := 200;
  ImageList.Height := 95;
  // загрузка изображний
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\SQLite.png'); //0
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\MySQL.png'); //1
  // ImageList кнопкам
  frmAdmin.bSQLite.Images := ImageList;
  frmAdmin.bMySQL.Images := ImageList;
  // поместить изображение на кнопку
  frmAdmin.bSQLite.ImageIndex := 0;
  frmAdmin.bMySQL.ImageIndex := 1;


  //*****************************************************//
  //если версия без авторизации  правда то
  if (sOne = '1') then begin
    {if db.ReadString('OU', 'Enabled','') = '1' then begin
       // показать значение в чекбоксе
       frmAdmin.ckbOn.Checked := True;
       // скрыть лист пользователей
       frmAdmin.tsListuser.TabVisible:=false;
      // показать лист база данных
      frmAdmin.dblist.TabVisible:=True;
     // скрыть лист сервера
     frmAdmin.tsSMS.TabVisible:=False;
     frmAdmin.tsOtherSetting.TabVisible:=False;
     frmAdmin.tsMDU.TabVisible:=False;
     frmAdmin.tsListliteserver.TabVisible:=False;
    end else begin      }
  // показать значение в чекбоксе
  frmAdmin.ckbOn.Checked := True;
  // скрыть лист пользователей
  frmAdmin.tsListuser.TabVisible:=false;
  // показать лист база данных
  frmAdmin.dblist.TabVisible:=True;
  // скрыть лист сервера
  frmAdmin.tsListliteserver.TabVisible:=False;
   //end;
  end;
  //*****************************************************//
  //если версия без авторизации   лож то
  if (sOne = '0') then begin
  // показать значение в чекбоксе
  frmAdmin.ckbOn.Checked := False;
  // показать лист пользователей
  frmAdmin.tsListuser.TabVisible:=True;
  // показать лист база данных
  frmAdmin.dblist.TabVisible:=True;
  // скрыть лист сервера
  frmAdmin.tsListliteserver.TabVisible:=False;
  end;

 frmAdmin.tgUsers.Columns[0].Header.Caption:= langIniG.ReadString('col','col18', 'Логин');
 frmAdmin.tgUsers.Columns[1].Header.Caption:= langIniG.ReadString('col','col19', 'Пароль');
 frmAdmin.tgUsers.Columns[2].Header.Caption:= langIniG.ReadString('col','col20', 'Права');
 frmAdmin.tgUsers.Columns[3].Header.Caption:= langIniG.ReadString('col','col21', 'Авторизация без пароля ');
 frmAdmin.tgUserApp.Columns[0].Header.Caption:= langIniG.ReadString('col','col0', 'ID');
 frmAdmin.tgUserApp.Columns[1].Header.Caption:= langIniG.ReadString('col','col18', 'Логин');
 frmAdmin.tgUserApp.Columns[2].Header.Caption:= langIniG.ReadString('col','col19', 'Пароль');
 frmAdmin.tgUserApp.Columns[3].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
 frmAdmin.tgUserApp.Columns[4].Header.Caption:= langIniG.ReadString('col','col12', 'Фамилия ');
 frmAdmin.tgLog.Columns[0].Header.Caption:= langIniG.ReadString('col','col22', 'Действие');
 frmAdmin.tgLog.Columns[1].Header.Caption:= langIniG.ReadString('col','col23', 'Время ');
 frmAdmin.tgUsersl.Columns[0].Header.Caption:= langIniG.ReadString('col','col18', 'Логин');
end;

//***********************************************************************************************
//-------------------------- Форма приема оборудования ------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
// если частный клиент то скрыть бокс и кнопку ОК компании и на оборот***************************
//***********************************************************************************************
procedure frmReceivinOgEquipment_cbTCK_OnClick (Sender: TObject);
begin
    if frmReceivinOgEquipment.cbTCK.dbItemID = 2 then
    begin
       frmReceivinOgEquipment.bOkCompany.Visible:=True;
       frmReceivinOgEquipment.bOk.Visible:=False;
       frmReceivinOgEquipment.gbCompany.Visible:=True;           
       frmReceivinOgEquipment.cbnameclCompanyOrApp.dbItemID := 2;
     end;
      if frmReceivinOgEquipment.cbTCK.dbItemID = 1 then
    begin
       frmReceivinOgEquipment.bOkCompany.Visible:=False;
       frmReceivinOgEquipment.bOk.Visible:=True;
       frmReceivinOgEquipment.gbCompany.Visible:=False;
       frmReceivinOgEquipment.cbnameclCompanyOrApp.dbItemID := 1;

    end;
end;

//***********************************************************************************************
//дополнительные настройки формы frmLogin********************************************************
//***********************************************************************************************
procedure frmLogin_OnShow (Sender: TObject; Action: string);
  var sUSN: string = '1';
  dir,r, sdb:string;
  ini, newIni, sini:TInifile;
begin

  userTab ;
  multilanguage(0);
  registrKey;

//присваеваем ip
ipuser:=GetIPAddress;
ini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\db.ini');
iniSetting :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
sini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');


// Создание файла логирования
dir := ExtractFilePath(ParamStr(0))+'\logs';
  CreateDir(dir);
  newIni := TIniFile.Create(dir+'\'+DateToStr(Date)+'.ini');
  newIni.WriteString('log',TimeToStr(Time), 'start programm');

   // выключаем меню
   frmLogin.mniFile.Visible := False;
   frmLogin.mniOptions.Visible := False;
   frmLogin.mniAbout.Visible := False;
// если база данных была удалена
if ini.ReadString('Delete', 'Enabled','') = '1' then  begin
// вернуть запись в db.ini в начальное состояние
ini.WriteString ('Delete', 'Enabled','0' );
// сообщить пользователю о создании новой базы данных
ShowMessage(langIniG.ReadString('message','00x9', 'Создана новая База данных!'));
end;
// если записи базы данных были удалены
if ini.ReadString('Clear', 'Enabled','') = '1' then  begin
// вернуть запись в db.ini в начальное состояние
ini.WriteString ('Clear', 'Enabled','0' );
// сообщить пользователю о создании первичных записий
ShowMessage(langIniG.ReadString('message','00x10', 'Первичные записи базы данных созданы!'));


end;
//***********************************************************************************************
//                        Первичные записи в базу данных                                        *
//***********************************************************************************************
   // проверка наличия причины расхода
  // если нет, то создать
     if SQLExecute('SELECT count(id) FROM typeOut;') = '0' then
     begin
         SQLExecute('INSERT INTO typeOut (name) VALUES ("'+langIniG.ReadString('firw','out1', '')+'");');
         SQLExecute('INSERT INTO typeOut (name) VALUES ("'+langIniG.ReadString('firw','out2', '')+'");');
         SQLExecute('INSERT INTO typeOut (name) VALUES ("'+langIniG.ReadString('firw','out3', '')+'");');
     end;
     UpdateDatabase('typeOut');

   // проверка наличия причины прихода
  // если нет, то создать
     if SQLExecute('SELECT count(id) FROM typeIn;') = '0' then
     begin
         SQLExecute('INSERT INTO typeIn (name) VALUES ("'+langIniG.ReadString('firw','in1', '')+'");');
         SQLExecute('INSERT INTO typeIn (name) VALUES ("'+langIniG.ReadString('firw','in2', '')+'");');
     end;
     UpdateDatabase('typeIn');

   // проверка наличия статуса оборудования
  // если нет, то создать
     if SQLExecute('SELECT count(id) FROM status;') = '0' then
     begin
         SQLExecute('INSERT INTO status (statusName) VALUES ("'+langIniG.ReadString('firw','sn1', '')+'");');
         SQLExecute('INSERT INTO status (statusName) VALUES ("'+langIniG.ReadString('firw','sn2', '')+'");');
         SQLExecute('INSERT INTO status (statusName) VALUES ("'+langIniG.ReadString('firw','sn3', '')+'");');
         SQLExecute('INSERT INTO status (statusName) VALUES ("'+langIniG.ReadString('firw','sn4', '')+'");');
         SQLExecute('INSERT INTO status (statusName) VALUES ("'+langIniG.ReadString('firw','sn5', '')+'");');
         SQLExecute('INSERT INTO status (statusName) VALUES ("'+langIniG.ReadString('firw','sn6', '')+'");');
     end;
     UpdateDatabase('status');

   // проверка наличия меток
  // если нет, то создать
     if SQLExecute('SELECT count(id) FROM cbTCK;') = '0' then
     begin
         SQLExecute('INSERT INTO cbTCK (cbTCKName) VALUES ("'+langIniG.ReadString('firw','TCK1', '')+'");');
         SQLExecute('INSERT INTO cbTCK (cbTCKName) VALUES ("'+langIniG.ReadString('firw','TCK2', '')+'");');
     end;
     UpdateDatabase('cbTCK');

  // проверка наличия меток
  // если нет, то создать
     if SQLExecute('SELECT count(id) FROM clCompanyOrApp;') = '0' then
     begin
         SQLExecute('INSERT INTO clCompanyOrApp (nameclCompanyOrApp) VALUES ("1");');
         SQLExecute('INSERT INTO clCompanyOrApp (nameclCompanyOrApp) VALUES ("2");');
         SQLExecute('INSERT INTO clCompanyOrApp (nameclCompanyOrApp) VALUES ("3");');
     end;
     UpdateDatabase('clCompanyOrApp');

   // проверка наличия прав пользователей
  // если нет, то создать права пользователей
     if SQLExecute('SELECT count(id) FROM userStatus;') = '0' then
     begin
         SQLExecute('INSERT INTO userStatus (userStatusName) VALUES ("'+langIniG.ReadString('firw','usn1', '')+'");');
         SQLExecute('INSERT INTO userStatus (userStatusName) VALUES ("'+langIniG.ReadString('firw','usn2', '')+'");');
         SQLExecute('INSERT INTO userStatus (userStatusName) VALUES ("'+langIniG.ReadString('firw','usn3', '')+'");');
     end;
     UpdateDatabase('userStatus');

  // проверка наличия администратора базы данных
  // если нет, то создать первичного пользователя логин demo пароль demo
     if SQLExecute('SELECT count(id) FROM users;') = '0' then
     begin
         SQLExecute('INSERT INTO users (id_userStatus, login, password, pass, online, ipuser) VALUES ("'+sUSN+'", "demo", "demo", "0", "0", "0");');
     end;
     UpdateDatabase('users');

  // проверка наличия времени резервного копирования базы данных
  // если нет, добавить 2 часа
     if SQLExecute('SELECT count(id) FROM uBD;') = '0' then
     begin
         SQLExecute('INSERT INTO uBD (timeToCopy) VALUES ("2");');
     end;
     UpdateDatabase('uBD');


         // запрос значения чекбокса
      sOne := iniSetting.ReadString('nologin', 'enabled', '');
      sLite := iniSetting.ReadString('liteserver', 'enabled', '');

      // если значени sOne 1 и sLite 0 то форма frmLogin скрывется а пользователь перенаправляется на на основную рабочую форму frmServiceCen
      if (sOne='1')then begin
      frmLogin.AlphaBlend:=true; //  frmLogin.Hide вызывает ошибку
      timecopydb;
      frmServiceCen.ShowModal;

      end;
 end;

//***********************************************************************************************
//вкл/выкл кнопки смс сообщения на форме frmServiceCen*******************************************
//***********************************************************************************************
procedure frmServiceCen_tgList_OnClick (Sender: TObject);
var
ini:TInifile;
s:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  if (ini.ReadString('smstr','EnableSMSmessages','')='1') AND (SQLExecute('SELECT smsout FROM servise WHERE id='+frmServiceCen.tgList.sqlValue)='0') then frmServiceCen.bsmsout.Enabled:=True;
  if (ini.ReadString('smstr','EnableSMSmessages','')='0') then frmServiceCen.bsmsout.Enabled:=False; 
  if (ini.ReadString('smstr','EnableSMSmessages','')='1') AND (SQLExecute('SELECT smsout FROM servise WHERE id='+frmServiceCen.tgList.sqlValue)='1') then frmServiceCen.bsmsout.Enabled:=False;
  if (ini.ReadString('smstr','EnableSMSmessages','')='1') AND (SQLExecute('SELECT BorS FROM servise WHERE id='+frmServiceCen.tgList.sqlValue)='1') then frmServiceCen.bsmsout.Enabled:=False;
  if (ini.ReadString('smstr','EnableSMSmessages','')='1') AND (SQLExecute('SELECT SorB FROM company LEFT OUTER JOIN servise ON company.id=servise.id_company WHERE servise.id='+frmServiceCen.tgList.sqlValue)='1') then frmServiceCen.bsmsout.Enabled:=False;
  if SQLExecute('SELECT id_clCompanyOrApp FROM servise WHERE id='+frmServiceCen.tgList.sqlValue)='3' then frmServiceCen.bsmsout.Enabled:=False;
end;

//***********************************************************************************************
//дополнительные настройки формы frmServiceCen***************************************************
//***********************************************************************************************
procedure frmServiceCen_OnShow (Sender: TObject; Action: string);
var
online, sini, db:TInifile;
r:string;
begin
 online:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
 db:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\db.ini');
 sini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
   //вызываем функцию выподающего меню и передаем в нее имя формы
   SwitchMenu('frmServiceCen','');
   //загружаем файл настроек
   iniSetting :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
   //если включино (без авторизвции)то на форме frmServiceCen показать дополнительные кнопки
   if iniSetting.ReadString('nologin', 'enabled', '') = '0' then begin
      frmServiceCen.bMasterWork.Visible:=False;
      frmServiceCen.bsetting.Visible:=False;
     end;
  // начальный фильтр грида
  frmServiceCen.bSearch.Click;
  // растенуть колонки
  frmServiceCen.tgList.BestFitColumns(bfBoth);
  // создание иконок для кнопок
  ImageList:=TImageList.Create(frmServiceCen);
  ImageList.Masked:=false;
  ImageList.ColorDepth:=cd32bit;
  // размер изображений
  ImageList.Width := 20;
  ImageList.Height := 20;
  // загрузка изображений
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\1.png'); //0
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\2.png'); //1
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\3.png'); //2
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\4.png'); //3
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\5.png'); //4
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\6.png'); //5
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\7.png'); //6
  ImageList.AddPng(ExtractFilePath(Application.ExeName)+'icons\12.png');//7
  // ImageList для кнопок
  frmServiceCen.bCompanyService.Images := ImageList;
  frmServiceCen.bServiceWork.Images := ImageList;
  frmServiceCen.bNewApplication.Images := ImageList;
  frmServiceCen.bPriceList.Images := ImageList;
  frmServiceCen.bDoc.Images := ImageList;
  frmServiceCen.bsetting.Images := ImageList;
  frmServiceCen.bMasterWork.Images := ImageList;
  frmServiceCen.bShop.Images := ImageList;
  // присваевает изображения к кнопкам
  frmServiceCen.bCompanyService.ImageIndex := 0;
  frmServiceCen.bServiceWork.ImageIndex := 1;
  frmServiceCen.bNewApplication.ImageIndex := 2;
  frmServiceCen.bPriceList.ImageIndex := 3;
  frmServiceCen.bDoc.ImageIndex := 4;
  frmServiceCen.bsetting.ImageIndex := 5;
  frmServiceCen.bMasterWork.ImageIndex := 6;
  frmServiceCen.bShop.ImageIndex:=7;
  if sini.ReadString('Options', 'server', '')=''  then begin
    r:=online.ReadString('online','enabled','');
    if r='1' then updateDataTime;
  end;
  if iniSetting.ReadString('nologin','enabled','')='1' then begin
  FrmServiceCen.lNameUser.Caption:='No login';
  end else begin
  if frmLogin.cbStatus.dbItemID >= 1 then FrmServiceCen.lNameUser.Caption:= frmLogin.cbStatus.Text else FrmServiceCen.lNameUser.Caption:='' ;
  end;
end;

//***********************************************************************************************
//открытие форм (карточки оборудования) по двойному щелцку в гриде*******************************
//***********************************************************************************************
procedure frmServiceCen_tgList_OnCellDoubleClick (Sender: TObject; ACol, ARow: Integer);
begin
   //открытие карточки оборудования в соответсвии с ранее установленной меткой 1, 2 или 3 по двойному щелчку мышки
   if SQLExecute('SELECT id_clCompanyOrApp FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue)= '1' then frmClientServiсeList.ShowRecord('servise', frmServiceCen.tgList.dbItemID) else
   if SQLExecute('SELECT id_clCompanyOrApp FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue)= '2' then frmComServiceList.ShowRecord('servise', frmServiceCen.tgList.dbItemID) else
   if SQLExecute('SELECT id_clCompanyOrApp FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue)= '3' then frmAppl.ShowRecord('servise', frmServiceCen.tgList.dbItemID);
end;

//***********************************************************************************************
////вывод изображения из грида в  dbImage********************************************************
//***********************************************************************************************
procedure frmComDoc_tgResultSearch_OnCellClick (Sender: TObject; ACol, ARow: Integer);
begin
   frmComDoc.dbImage.Clear;
   frmComDoc.dbImage.LoadFromDatabase('comDoc', 'scanDoc', frmComDoc.tgResultSearch.dbItemID);
end;

//***********************************************************************************************
//------------------------- Проверка заполнения полей -------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//прием заявки от частного клиента, проверка на заполнение полей, запись в таблицу***************
//обновление таблицы данных главной формы, закрытие формы****************************************
//***********************************************************************************************
procedure frmNewApplication_bOk_OnClick (Sender: TObject; var Cancel: boolean);
    // объявление переменных
 var qDate : string = FormatDateTime('yyyy-mm-dd',frmNewApplication.dTDateInServise.DateTime);
     wDate : string = FormatDateTime('yyyy-mm-dd',frmNewApplication.dApplcation.DateTime);
     wTime : string = FormatDateTime('hh:mm',frmNewApplication.tApplication.DateTime);
     wCompanyOrApp : string = IntToStr(frmNewApplication.cbnameclCompanyOrApp.DbItemID);
     wStatusName : string = IntToStr(frmNewApplication.cbStatusName.DbItemID);
     tCount : string = frmNewApplication.RecordCount.Text;
     online:TIniFile;
     r,intid:string;
     firstName,lastName,twoName:string;
     nameId,sclient:integer;
    begin
    online:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
    //проверяем вкл/выкл мобильные данные
    r:=online.ReadString('online','enabled','');
      //проверка на заполнение полей
      if (wDate='-1') then ShowHint(frmNewApplication.dApplcation, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка дата приема мастера
      if (wTime='-1') then ShowHint(frmNewApplication.tApplication, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка время приема мастера
      if (frmNewApplication.eFirstNameClient.Text='') then ShowHint(frmNewApplication.eFirstNameClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка поля фамилия
      if (frmNewApplication.eTwoNameClient.Text='') then ShowHint(frmNewApplication.eTwoNameClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка поля имя
      if (frmNewApplication.eLastNameClient.Text='') then ShowHint(frmNewApplication.eLastNameClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка поля отчество
      if (frmNewApplication.eAdresClient.Text='') then ShowHint(frmNewApplication.eAdresClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else   // проверка поля адрес
      if (frmNewApplication.eTelephonClient.Text='') then ShowHint(frmNewApplication.eTelephonClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка поля телефон
      if (frmNewApplication.mDescriptionOfTheProblem.Text='') then ShowHint(frmNewApplication.mDescriptionOfTheProblem, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else   // проверка поля описание проблемы
    begin

      firstName:=frmNewApplication.eFirstNameClient.Text;
      lastName:=frmNewApplication.eLastNameClient.Text;
      twoName:=frmNewApplication.eTwoNameClient.Text;


      intid:= IntToStr(Random(999999999))+frmNewApplication.eTelephonClient.Text;
      sclient:=SQLExecute('SELECT id FROM servise WHERE client='''+intid+'''');


      showmessage(intid);
      if SQLExecute('SELECT COUNT(id) FROM firstNameClient WHERE name='''+firstName+'''') = '0' then SQLExecute('INSERT INTO firstNameClient (name) VALUES ("'+firstName+'")');
      if SQLExecute('SELECT COUNT(id) FROM lastNameClient WHERE name='''+lastName+'''') = '0' then SQLExecute('INSERT INTO lastNameClient (name) VALUES ("'+lastName+'")');
      if SQLExecute('SELECT COUNT(id) FROM twoNameClient WHERE name='''+firstName+'''') = '0' then SQLExecute('INSERT INTO twoNameClient (name) VALUES ("'+twoName+'")');

      firstName:=SQLEXecute('SELECT id FROM firstNameClient WHERE name='''+firstName+'''');
      lastName:=SQLEXecute('SELECT id FROM lastNameClient WHERE name='''+lastName+'''');
      twoName:=SQLEXecute('SELECT id FROM twoNameClient WHERE name='''+twoName+'''');

      // запись в таблицу базы данных
      SQLExecute('INSERT INTO servise (descriptionATCsWords, id_status, dateApplcation, timeApplication, dateInServise, id_clCompanyOrApp, id_firstNameClient, id_twoNameClient, id_lastNameClient, adresClient, telephonClient, record_count, appUpdate, appToWork, appStatus, client) VALUES ("'+ frmNewApplication.mDescriptionOfTheProblem.Text + '", "'+wStatusName+'", "'+wDate+'", "'+wTime+'", "'+qDate+'", "'+wCompanyOrApp+'", "'+firstName+'", "'+twoName+'", "'+lastName+ '", "'+ frmNewApplication.eAdresClient.Text + '", "'+ frmNewApplication.eTelephonClient.Text + '", "'+tCount+'", "'+r+'", " ", " ", "'+intid+'" );');
           // обновление таблицы данных главной формы
      frmServiceCen.tgList.dbUpdate;
      frmNewApplication.RecordCount.Text := IntToStr(GetNewRecordCount('servise'));
      //закрытие формы
       frmNewApplication.Close;
       //если мобильные данные включены
       if r='1' then autorisationsession;
  end;
  frmServiceCen.bListApplication.Click;
end;

//***********************************************************************************************
//прием оборудования частного клиента, проверка на заполнение полей, запись в таблицу************
//обновление таблицы данных главной формы, закрытие формы.***************************************
//***********************************************************************************************
procedure frmReceivinOgEquipment_bOk_OnClick (Sender: TObject; var Cancel: boolean);
  // объявление переменных
 var
     sTypeKC : string = IntToStr(frmReceivinOgEquipment.cbTCK.DbItemID);
     sType : string = IntToStr(frmReceivinOgEquipment.cbNameTypeOfEquipment.DbItemID);
     sManuf : string = IntToStr(frmReceivinOgEquipment.cbNameManufacturer.DbItemID);
     sDate : string = FormatDateTime('yyyy-mm-dd',frmReceivinOgEquipment.dtDateInServise.DateTime);
     sCompanyOrApp : string = IntToStr(frmReceivinOgEquipment.cbnameclCompanyOrApp.DbItemID);
     sStatusName : string = IntToStr(frmReceivinOgEquipment.cbStatusName.DbItemID);
     sCount : string;
     sWarranty: string = frmReceivinOgEquipment.cbWarranty.sqlValue;
     sOnlyDiagnostic: string = frmReceivinOgEquipment.cbOnlyDiagnostic.sqlValue;
     BorS: string = frmReceivinOgEquipment.lTelB.sqlValue;
     firstName,lastName,twoName:string;
     nameId:integer;
    begin
      sCount := frmReceivinOgEquipment.RecordCount.Text;
      //проверка на заполнение полей
      if (sTypeKC='-1') then ShowHint(frmReceivinOgEquipment.cbTCK, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (sType='-1') then ShowHint(frmReceivinOgEquipment.cbNameTypeOfEquipment, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка выбора типа оборудования
      if (sManuf='-1') then ShowHint(frmReceivinOgEquipment.cbNameManufacturer, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка выбора производителя
      if (frmReceivinOgEquipment.eModel.Text='') then ShowHint(frmReceivinOgEquipment.eModel, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else   // проверка поля модель
      if (frmReceivinOgEquipment.eSerialNamber.Text='') then ShowHint(frmReceivinOgEquipment.eSerialNamber, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else    // проверка поля серийный номер
      if (frmReceivinOgEquipment.eEquipment.Text='') then ShowHint(frmReceivinOgEquipment.eEquipment, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка поля комплектация
      if (frmReceivinOgEquipment.eFirstNameClient.Text='') then ShowHint(frmReceivinOgEquipment.eFirstNameClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка поля фамилия
      if (frmReceivinOgEquipment.eTwoNameClient.Text='') then ShowHint(frmReceivinOgEquipment.eTwoNameClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка поля имя
      if (frmReceivinOgEquipment.eLastNameClient.Text='') then ShowHint(frmReceivinOgEquipment.eLastNameClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка поля отчество
      if (frmReceivinOgEquipment.eAdresClient.Text='') then ShowHint(frmReceivinOgEquipment.eAdresClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else   // проверка поля адрес
      if (frmReceivinOgEquipment.eTelephonClient.Text='') then ShowHint(frmReceivinOgEquipment.eTelephonClient, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка поля телефон
      if (frmReceivinOgEquipment.mDescriptionATCsWords.Text='') then ShowHint(frmReceivinOgEquipment.mDescriptionATCsWords, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else   // проверка поля неисправность со слов клиента
      if (frmReceivinOgEquipment.mExternalStatus.Text='') then ShowHint(frmReceivinOgEquipment.mExternalStatus, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!')) else // проверка поля описание внешнего вида
    begin

      firstName:=frmReceivinOgEquipment.eFirstNameClient.Text;
      lastName:=frmReceivinOgEquipment.eLastNameClient.Text;
      twoName:=frmReceivinOgEquipment.eTwoNameClient.Text;

      if SQLExecute('SELECT COUNT(id) FROM firstNameClient WHERE name='''+firstName+'''') = '0' then SQLExecute('INSERT INTO firstNameClient (name) VALUES ("'+firstName+'")');
      if SQLExecute('SELECT COUNT(id) FROM lastNameClient WHERE name='''+lastName+'''') = '0' then SQLExecute('INSERT INTO lastNameClient (name) VALUES ("'+lastName+'")');
      if SQLExecute('SELECT COUNT(id) FROM twoNameClient WHERE name='''+firstName+'''') = '0' then SQLExecute('INSERT INTO twoNameClient (name) VALUES ("'+twoName+'")');

      firstName:=SQLEXecute('SELECT id FROM firstNameClient WHERE name='''+firstName+'''');
      lastName:=SQLEXecute('SELECT id FROM lastNameClient WHERE name='''+lastName+'''');
      twoName:=SQLEXecute('SELECT id FROM twoNameClient WHERE name='''+twoName+'''');

      // запись в таблицы базы данных
      SQLExecute('INSERT INTO servise (id_TypeOfEquipment, id_status, id_manufacturer, id_clCompanyOrApp, model, serialNamber, equipment, descriptionATCsWords, externalStatus, dateInServise, record_count, id_firstNameClient, id_lastNameClient, id_twoNameClient, adresClient, passportNamberClient, passportSeriesClient, telephonClient, warranty, onlyDiiagnostics, BorS) VALUES ("'+sType+'", "'+sStatusName+'", "'+sManuf+'", "'+sCompanyOrApp+'", "'+ frmReceivinOgEquipment.eModel.Text + '", "'+ frmReceivinOgEquipment.eSerialNamber.Text + '", "'+ frmReceivinOgEquipment.eEquipment.Text + '", "'+ frmReceivinOgEquipment.mDescriptionATCsWords.Text + '", "'+ frmReceivinOgEquipment.mExternalStatus.Text + '", "'+sDate+'", "'+sCount+'", "'+firstName+'", "'+twoName+'", "'+lastName+ '", "'+ frmReceivinOgEquipment.eAdresClient.Text + '", "'+ frmReceivinOgEquipment.ePassportSeriesClient.Text + '", "'+ frmReceivinOgEquipment.ePassportNamberClient.Text + '", "'+ frmReceivinOgEquipment.eTelephonClient.Text + '", "'+sWarranty+'", "'+sOnlyDiagnostic+'", "'+BorS+'")');
    // обновление таблицы данных главной формы
      frmServiceCen.tgList.dbUpdate;
      frmReceivinOgEquipment.RecordCount.Text := IntToStr(GetNewRecordCount('servise'));
      //закрытие формы
       frmReceivinOgEquipment.Close;
       frmServiceCen.bSearch.Click;
    end;
end;

//***********************************************************************************************
// прием оборудования компании, проверка на заполнение полей, запись в таблицу,******************
// обновление таблицы данных главной формы, закрытие формы.**************************************
//***********************************************************************************************
 procedure frmReceivinOgEquipment_bOkCompany_OnClick (Sender: TObject; var Cancel: boolean);

 var tTypeKC : string = IntToStr(frmReceivinOgEquipment.cbTCK.DbItemID);
     tNameCompany : string = IntToStr(frmReceivinOgEquipment.cbNameCompany.DbItemID);
     tNameTypeOfEquipment : string = IntToStr(frmReceivinOgEquipment.cbNameTypeOfEquipment.DbItemID);
     tNameManufacturer : string = IntToStr(frmReceivinOgEquipment.cbNameManufacturer.DbItemID);
     tDate : string = FormatDateTime('yyyy-mm-dd',frmReceivinOgEquipment.dtDateInServise.DateTime);
     tCompanyOrApp : string = IntToStr(frmReceivinOgEquipment.cbnameclCompanyOrApp.DbItemID);
     tStatusName : string = IntToStr(frmReceivinOgEquipment.cbStatusName.DbItemID);
     tCount : string;
     sWarranty: string = frmReceivinOgEquipment.cbWarranty.sqlValue;
     sOnlyDiagnostic: string = frmReceivinOgEquipment.cbOnlyDiagnostic.sqlValue;
    begin
      tCount := frmReceivinOgEquipment.RecordCount.Text;
      //проверка на заполнение полей
      if (tTypeKC='-1') then ShowHint(frmReceivinOgEquipment.cbTCK, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (tDate='-1') then ShowHint(frmReceivinOgEquipment.dtDateInServise, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (tNameCompany='-1') then ShowHint(frmReceivinOgEquipment.cbNameCompany, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (tNameTypeOfEquipment='-1') then ShowHint(frmReceivinOgEquipment.cbNameTypeOfEquipment, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (tNameManufacturer='-1') then ShowHint(frmReceivinOgEquipment.cbNameManufacturer, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (frmReceivinOgEquipment.eModel.Text='') then ShowHint(frmReceivinOgEquipment.eModel, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (frmReceivinOgEquipment.eSerialNamber.Text='') then ShowHint(frmReceivinOgEquipment.eSerialNamber, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (frmReceivinOgEquipment.eEquipment.Text='') then ShowHint(frmReceivinOgEquipment.eEquipment, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (frmReceivinOgEquipment.mDescriptionATCsWords.Text='') then ShowHint(frmReceivinOgEquipment.mDescriptionATCsWords, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
      if (frmReceivinOgEquipment.mExternalStatus.Text='') then ShowHint(frmReceivinOgEquipment.mExternalStatus, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
    begin
      // запись в таблицы базы данных
      SQLExecute('INSERT INTO servise (dateInServise, id_status, id_Company, id_TypeOfEquipment, id_manufacturer, model, serialNamber, equipment, externalStatus, descriptionATCsWords, id_clCompanyOrApp, record_count, warranty, onlyDiiagnostics) VALUES ("'+tDate+'", "'+tStatusName+'", "'+tNameCompany+'", "'+ tNameTypeOfEquipment + '", "'+tNameManufacturer+'", "'+frmReceivinOgEquipment.eModel.Text+'", "'+frmReceivinOgEquipment.eSerialNamber.Text+ '", "'+frmReceivinOgEquipment.eEquipment.Text+ '", "'+ frmReceivinOgEquipment.mDescriptionATCsWords.Text+ '", "'+ frmReceivinOgEquipment.mExternalStatus.Text+ '", "'+tCompanyOrApp+'", "'+tCount+'", "'+sWarranty+'", "'+sOnlyDiagnostic+'")');
          // обновление таблицы данных главной формы
      frmServiceCen.tgList.dbUpdate;
      frmReceivinOgEquipment.RecordCount.Text := IntToStr(GetNewRecordCount('servise'));
      //закрытие формы
      frmReceivinOgEquipment.Close;
      frmServiceCen.bSearch.Click;
  end;
end;


//***********************************************************************************************
//--------------------- Передача инфомации из comboBox в edit -----------------------------------
//***********************************************************************************************
//***********************************************************************************************
// передача имени и цены прайслиста из множественного списка в поля имя и цена*******************
//***********************************************************************************************
procedure frmCompanyServiceWork_cbListWork_OnChange (Sender: TObject);
begin
    frmCompanyServiceWork.eNamePrice.text := sqlexecute('select namePrice from priceList where id =' +inttostr(frmCompanyServiceWork.cbListWork.dbitemid));
    frmCompanyServiceWork.ePrice.text := sqlexecute('select price from priceList where id =' +inttostr(frmCompanyServiceWork.cbListWork.dbitemid));
end;

//***********************************************************************************************
// передача списка комплектации из множественного списка в текстовое поле************************
//***********************************************************************************************
procedure frmReceivinOgEquipment_cbEquipment_OnChange (Sender: TObject);
begin
    frmReceivinOgEquipment.eEquipment.Text := frmReceivinOgEquipment.cbEquipment.Text;
end;

//***********************************************************************************************
// передача имени компании из множественного списка в текстовое поле*****************************
//***********************************************************************************************
procedure frmCompanyServiceWork_cbNameCompany_OnChange (Sender: TObject);
begin
    frmCompanyServiceWork.eSearchFalseVisible.Text := frmCompanyServiceWork.cbNameCompany.Text;
end;

//***********************************************************************************************
// передача  имени компании из множественного списка в текстовое поле****************************
//***********************************************************************************************
procedure frmCompanyServiceWork_cbCompanyNameSearch_OnChange (Sender: TObject);
begin
    frmCompanyServiceWork.eCompanyNameSearch.Text := frmCompanyServiceWork.cbCompanyNameSearch.Text;
end;

//***********************************************************************************************
//передача имени и цены прайслиста из множественного списка в поля имя и цена********************
//***********************************************************************************************
procedure frmListWorkR_cbNameWorkOff_OnChange (Sender: TObject);
begin
    frmListWorkR.eNameWorkOff.text := sqlexecute('select namePrice from priceList where id =' +inttostr(frmListWorkR.cbNameWorkOff.dbitemid));
    frmListWorkR.ePriceWorkOff.text := sqlexecute('select price from priceList where id =' +inttostr(frmListWorkR.cbNameWorkOff.dbitemid));
    //добавить в поле колличество 1
    frmListWorkR.eKlVoWorkOff.Text:= '1';
end;

//***********************************************************************************************
// передача из combobox в  edit *****************************************************************
//***********************************************************************************************
procedure frmListWorkR_OnShow (Sender: TObject; Action: string);
begin
    frmListWorkR.eIdServiceWork.Text := frmListWorkR.cbIdServiceWork.Text;
    //поиск по переданной записи
    frmListWorkR.bSearch.Click;
end;

//***********************************************************************************************
//  передача из  frmListWorkR.cbIdServiceWork в  frmMaterialsAndWork.cbIdServiceWork*************
//***********************************************************************************************
procedure frmListWorkR_bOpenMaterialsAndWork_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmMaterialsAndWork.cbIdServiceWork.DbItemID := frmListWorkR.cbIdServiceWork.DbItemID; 
end;

//***********************************************************************************************
//  передача из  frmCompanyServiceWork.cbNameCompany в  frmServiceComp.cbIdServiceWork***********
//***********************************************************************************************
procedure frmCompanyServiceWork_bOpenMaterialsAndWork_OnClick (Sender: TObject; var Cancel: boolean);
begin
 frmServiceComp.cbIdServiceWork.DbItemID:=frmCompanyServiceWork.cbNameCompany.DbItemID;
end;
//***********************************************************************************************
//--------------------------------------- Авторизация -------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//авторизация с поролем**************************************************************************
//***********************************************************************************************
 procedure frmLogin_bLoginOk_OnClick (Sender: TObject; var Cancel: boolean);
 var
  s,t,r: string;
  sStatus: string;
  ini, tini, CNNRS:TIniFile;
begin
tini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'logs\date.ini');
ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
CNNRS:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\db.ini');
   t:=ini.ReadString('Options', 'server', '');
    // Запрос SQL для проверки пользователя и пароля
     s := VarToStr(SQLExecute('SELECT count(id) FROM users WHERE (id = ' + IntToStr(frmLogin.cbStatus.dbItemID) + ') AND (password = ''' + frmLogin.ePassword.Text + ''');'));
     r:=SQLExecute('SELECT online FROM users WHERE id=1');
  // если логин выбран
if (frmLogin.cbStatus.dbItemID)<> -1 then
 begin
   // если поле пароль заполнено
  if (frmLogin.ePassword.Text)<>'' then
    begin
       // если SQL-запрос нашел логин и пароль
        if (s<>'0') AND (s<>'') then
          begin
            //скрыть форму авторизации
           frmLogin.Hide;
             // SQL-запрос прав пользователя
           sStatus := SQLExecute('SELECT id_userStatus FROM users WHERE id='+frmLogin.cbStatus.sqlValue);
           // если права пользователя * то открыть *
           if sStatus = '1' then frmAdmin.Show else  //администратор
           if sStatus = '2' then frmMasterWork.Show else  //мастер
           if sStatus = '3' then frmServiceCen.Show ;  //менеджер
            //--------------------------------- вызываем таймер резервного копирования -----------------------
           timecopydb;
            // если пара логин и пароль неверна
         end else MessageBox(langIniG.ReadString('message','00x17', 'Пароль неверен'),langIniG.ReadString('message','00x12x1', 'Ошибка подключения!'), MB_OK+MB_ICONSTOP);
          // если не указан пароль
    end else MessageBox(langIniG.ReadString('message','00x18', 'Укажите пароль'),langIniG.ReadString('message','00x12x1', 'Ошибка подключения!'), MB_OK+MB_ICONSTOP);
     // если логин не выбран
 end else MessageBox(langIniG.ReadString('message','00x19', 'Выбирите пользователя '),langIniG.ReadString('message','00x12x1', 'Ошибка подключения!'), MB_OK+MB_ICONSTOP);
end;

//***********************************************************************************************
//авторизация без пороля*************************************************************************
//***********************************************************************************************
procedure frmAdmin_cbNoPassword_OnClick (Sender: TObject);
begin
 if frmadmin.cbNoPassword.Checked then begin
   frmadmin.ePassword.Enabled:=False;
   frmadmin.ePassword.Text:=' ';
   end else
   frmadmin.ePassword.Enabled:=True;
end;

procedure frmLogin_bLoginOkNoPass_OnClick (Sender: TObject; var Cancel: boolean);
var
 s,t,r: string;
 sStatus: string;
 ini,CNNRS:TIniFile;
begin
    ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    CNNRS:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\db.ini');
    t:=ini.ReadString('Options', 'server', '');
    // Запрос SQL для проверки пользователя и пароля
     s:= VarToStr(SQLExecute('SELECT count(id) FROM users WHERE (id = ' + IntToStr(frmLogin.cbStatus.dbItemID) + ') AND (password = ''' + frmLogin.ePassword.Text + ''');'));
     r:=SQLExecute('SELECT online FROM users WHERE id=1');
     // если SQL-запрос нашел логин и пароль
        if (s<>'') then begin
         userIDs:=frmLogin.cbStatus.sqlValue;
         frmLogin.Hide;
          // SQL-запрос прав пользователя
         sStatus := SQLExecute('SELECT id_userStatus FROM users WHERE id='+frmLogin.cbStatus.sqlValue);
          // если права пользователя * то открыть *
         if sStatus = '1' then frmAdmin.Show else  //администратор
         if sStatus = '2' then frmMasterWork.Show else  //мастер
         if sStatus = '3' then frmServiceCen.Show ;  //менеджер
         SQLExecute('UPDATE users SET online="1" WHERE id = ' + IntToStr(frmLogin.cbStatus.dbItemID));
            //--------------------------------- вызываем таймер резервного копирования -----------------------
       timecopydb;
    end;
end;

//***********************************************************************************************
//подмена кнопки авторизации при выборе в комбобоксе логина без пароля***************************
//требуется для авторизации без пороля***********************************************************
//***********************************************************************************************
procedure frmLogin_cbStatus_OnClick (Sender: TObject);
begin
   // если выбранный логин имеет значение 1 (без пароля)
   if SQLExecute('SELECT pass FROM users WHERE id='+frmLogin.cbStatus.sqlValue)='1' then
   begin
    // скрыть поле пароль
    frmLogin.ePassword.Visible:=False;
    // скрыть кнопку авторизации по поролю
    frmLogin.bLoginOk.Visible:=False;
    // отобразить в поле статутаса права выбранного пользователя
    frmLogin.eStatus.text := sqlexecute('SELECT userStatus.userStatusName FROM users LEFT OUTER JOIN userStatus ON userStatus.id=users.id_userStatus WHERE users.id=' +frmLogin.cbStatus.sqlValue);
     end else
     //иначе если выбранный логин имеет значение не 1
     if  SQLExecute('SELECT pass FROM users WHERE id='+ frmLogin.cbStatus.sqlValue)<>'1' then
     begin
     // показать поле пароль
     frmLogin.ePassword.Visible:=True;
     // показать кнопку авторизации по поролю
     frmLogin.bLoginOk.Visible:=True;
    end;
end;

//***********************************************************************************************
//-------------------------------- работа по таймерам -------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
// резервное копирование базы данных*************************************************************
//***********************************************************************************************
procedure timecopydb;
var
sRBD:integer;
iniTime:TIniFile;
begin
  iniTime.Free;
  Timer.Free;
  iniTime :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
  if iniTime.ReadString('othersetting','time','')='0' then sRBD := SQLExecute('SELECT timeToCopy FROM uBD WHERE id=1')*60000;
  if iniTime.ReadString('othersetting','time','')='1' then sRBD := SQLExecute('SELECT timeToCopy FROM uBD WHERE id=1')*3600000;
  if iniTime.ReadString('othersetting','on','')='1' then begin
  Timer := TTimer.Create(frmLogin);
  Timer.OnTimer := @OnTimer;
  Timer.Interval := sRBD;
  Timer.Enabled := true;
  end;
end;

procedure OnTimer(Sender: TObject);
var
 ini:TIniFile;
begin
  FrmServiceCen.lLogUser.Caption:='Резервное копирование базы данных ';
  ini:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
  FrmServiceCen.lLogUser.Caption:='Резервное копирование базы данных';
  FrmServiceCen.pLog.Color:=$000080FF;
  CopyFile('sqlite.db', ini.ReadString('othersetting', 'DCopy', '.\Backup')+'\sqlite '+FormatDateTime('dd-mm-yyyy_hh.mm.ss', now)+'.db');  // запись резервного файла БД
  FrmServiceCen.pLog.Color:=clTeal;
  FrmServiceCen.lLogUser.Caption:='Резервное копирование базы данных завершено'; 
end;

//***********************************************************************************************
//---------------------- переключение окон базы данных ------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
// при нажатии на кнопку bMySQL в форме frmAdmin*************************************************
//***********************************************************************************************
procedure frmAdmin_bMySQL_OnClick (Sender: TObject; var Cancel: boolean);
begin
   frmAdmin.gbMySQL.Visible:=True;
   frmAdmin.gbSQLite.Visible:=False;
end;

//***********************************************************************************************
// при нажатии на кнопку bSQLite в форме frmAdmin************************************************
//***********************************************************************************************
procedure frmAdmin_bSQLite_OnClick (Sender: TObject; var Cancel: boolean);
begin
   frmAdmin.gbSQLite.Visible:=True;
   frmAdmin.gbMySQL.Visible:=False;
end;


//***********************************************************************************************
//--------------------------------- обновление записей ------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//обновление записи для чекбокса ВЕРСИЯ ДЛЯ ОДНОГО ПК********************************************
//***********************************************************************************************
procedure frmAdmin_ckbOn_OnClick (Sender: TObject);
var
tOne : string = IntToStr (frmAdmin.ckbOn.State);
begin
iniSetting :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
     iniSetting.WriteString('nologin', 'enabled',tOne);
end;

//***********************************************************************************************
//обновление записи для статуса оборудования на форме frmComServiceList**************************
//***********************************************************************************************
procedure frmComServiceList_cbStatusName_OnClick (Sender: TObject);
var
    sStatus : string = IntToStr ( frmClientServiсeList.cbStatusName.dbItemID );
begin
    If (sStatus > '0') then begin
     SQLExecute ('UPDATE servise SET id_status = "'+sStatus+'" WHERE id='+ frmServiceCen.tgList.sqlValue );
     SQLExecute ('UPDATE servise SET smsout = "0" WHERE id='+ frmServiceCen.tgList.sqlValue );
     UpdateDatabase('servise');
    end;
end;

//***********************************************************************************************
//обновление записи для статуса оборудования на форме frmClientServiceList***********************
//***********************************************************************************************
 procedure frmClientServiсeList_cbStatusName_OnClick (Sender: TObject);
var
    sStatus : string = IntToStr ( frmClientServiсeList.cbStatusName.dbItemID );
begin
    If (sStatus > '0') then begin
     SQLExecute ('UPDATE servise SET id_status = "'+sStatus+'" WHERE id='+ frmServiceCen.tgList.sqlValue );
     SQLExecute ('UPDATE servise SET smsout = "0" WHERE id='+ frmServiceCen.tgList.sqlValue );
     UpdateDatabase('servise');
    end;
end;

//***********************************************************************************************
//обновление записи для статуса оборудования на форме frmStatus**********************************
//***********************************************************************************************
procedure frmStatus_bOk_OnAfterClick (Sender: TObject);
begin
  if frmStatus.cbStatus.sqlValue <> SQLEXecute('SELECT servise.id_status FROM servise WHERE id='+frmServiceCen.tgList.sqlValue ) then
  begin
  SQLExecute ('UPDATE servise SET smsout = "0" WHERE id='+ frmServiceCen.tgList.sqlValue );
  UpdateDatabase('servise');
  end;
end;
//***********************************************************************************************
//---------------------------- удаление, очистка базы данных ------------------------------------
//***********************************************************************************************
//***********************************************************************************************
// удаление базы данных и перезагрузка программы*************************************************
//***********************************************************************************************
procedure frmDeleteDatabase_bDelete_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TInifile;
begin
ini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\db.ini');
frmLogin.SQLConnection.Connected := False;
if DeleteFile('sqlite.db') then begin
ShowMessage(langIniG.ReadString('message','00x25', 'База данных успешно удалена, программа будет перезагружена!'));
ini.WriteString ('Delete', 'Enabled','1' );
ini.Free;
frmLogin.Close;
OpenFile('start.bat');
end else
ShowMessage(langIniG.ReadString('message','00x26', 'Ошибка: файл не был удален!'));
end;

//***********************************************************************************************
// очистка базы данных и перезагрузка программы**************************************************
//***********************************************************************************************
procedure frmClearDatabase_Button2_OnClick (Sender: TObject; var Cancel: boolean);
begin
SQLEXecute('DELETE FROM servise ');
ShowMessage('База данных очищена, программа будет перезагружена');
frmLogin.Close;
OpenFile('start.bat');
end;


//***********************************************************************************************
//------------------------------- выподающее меню  ----------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//Выпадающее меню работает в трех формах frmAdmin, frmMasterWork и frmServiceCen*****************
//переменная mur содержит имя формы в которой должно отображаться выподающее меню****************
//***********************************************************************************************
procedure SwitchMenu (Sender, r: string);
var
   fiLang,reporfile:TStringList;
   i,s,t,c: integer;
   subfiLangi,mnFilereport,subfiLangiEdit,subfiLangirepor,subfiLangiDel,subfiLangiPrint: TMenuItem;
   subfiLangipdf,mnFile,mnfiLangi,subFileNextUser,subFileClose,mnDictionary,subDictionaryPriceList : TMenuItem;
   subDictionaryDash1,subDictionaryDash2,subDictionaryDash3,subDictionaryDash4,subDictionaryDash5,subDictionaryDash6: TMenuItem;
   subDictionaryStatusEquipment,subDictionaryCompany,subDictionaryEquipment,subDictionaryBrand : TMenuItem;
   subDictionaryAccessories,subabout,subFilereport,mnActivities,subEvents,subDonations, mnSetting, subTelMask,subKey : TMenuItem;
   mnshop,subFileShopIn,subFileShopInBack,subFileShopOutBad,subFileShopReport: TMenuItem;
   rta:TMainMenu;
   mur:TForm;
   icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, icon9, icon10, icon11, icon12, icon13, icon14, icon15, icon16: TBitmap;
   icon17: TBitmap;
begin
  icon1:= TBitmap.Create;
  icon2:= TBitmap.Create;
  icon3:= TBitmap.Create;
  icon4:= TBitmap.Create;
  icon5:= TBitmap.Create;
  icon6:= TBitmap.Create;
  icon7:= TBitmap.Create;
  icon8:= TBitmap.Create;
  icon9:= TBitmap.Create;
  icon10:= TBitmap.Create;
  icon11:= TBitmap.Create;
  icon12:= TBitmap.Create;
  icon13:= TBitmap.Create;
  icon14:= TBitmap.Create;
  icon15:= TBitmap.Create;
  icon16:= TBitmap.Create;
  icon17:= TBitmap.Create;

  // если открыта форма * то переменная содежит имя этой формы
  if sender = 'frmAdmin' then mur:=frmAdmin;
  if sender = 'frmMasterWork' then mur:=frmMasterWork;
  if sender = 'frmServiceCen' then mur:=frmServiceCen;
  if r = '1' then rta.free;

//************ создаем выподающее меню ***************************
       //меню файл
   mnFile := TMenuItem.Create (mur);
   mnFile.Caption := langIniG.ReadString('menu','Fa', 'Файл');

       subFileNextUser := TMenuItem.Create (mur);
       subFileNextUser.Caption := langIniG.ReadString('menu','nuser', 'Сменить пользователя ');
       subFileNextUser.OnClick := @MenuClick1;
       subFileNextUser.Bitmap.Width := 16;
       subFileNextUser.Bitmap.Height := 16;
       icon1.LoadFromFile('.\icons\user.bmp');
       subFileNextUser.BitMap.Canvas.Draw(0,0,icon1);


       subFileClose := TMenuItem.Create (mur);
       subFileClose.Caption := langIniG.ReadString('menu','ex', 'Выход');
       subFileClose.OnClick := @MenuClick2;
       subFileClose.Bitmap.Width := 16;
       subFileClose.Bitmap.Height := 16;
       icon2.LoadFromFile('.\icons\close.bmp');
       subFileClose.BitMap.Canvas.Draw(0,0,icon2);

       //меню словари
   mnDictionary := TMenuItem.Create (mur);
   mnDictionary.Caption := langIniG.ReadString('menu','lib', 'Словари');

       subDictionaryPriceList := TMenuItem.Create (mur);
       subDictionaryPriceList.Caption := langIniG.ReadString('menu','pr', 'Прайс лист');
       subDictionaryPriceList.OnClick := @MenuClick3;
       subDictionaryPriceList.Bitmap.Width := 16;
       subDictionaryPriceList.Bitmap.Height := 16;
       icon3.LoadFromFile('.\icons\price.bmp');
       subDictionaryPriceList.BitMap.Canvas.Draw(0,0,icon3);

       subDictionaryDash1:= TMenuItem.Create (mur);
       subDictionaryDash1.Caption := '-';
       subDictionaryDash1.Enabled:= False;

       subDictionaryStatusEquipment := TMenuItem.Create (mur);
       subDictionaryStatusEquipment.Caption := langIniG.ReadString('menu','st', 'Статус оборудования ');
       subDictionaryStatusEquipment.OnClick := @MenuClick5;
       subDictionaryStatusEquipment.Bitmap.Width := 16;
       subDictionaryStatusEquipment.Bitmap.Height := 16;
       icon4.LoadFromFile('.\icons\status.bmp');
       subDictionaryStatusEquipment.BitMap.Canvas.Draw(0,0,icon4);

       subDictionaryDash2:= TMenuItem.Create (mur);
       subDictionaryDash2.Caption := '-';
       subDictionaryDash2.Enabled:= False;

       subDictionaryCompany := TMenuItem.Create (mur);
       subDictionaryCompany.Caption := langIniG.ReadString('menu','co', 'Компании');
       subDictionaryCompany.OnClick := @MenuClick6;
       subDictionaryCompany.Bitmap.Width := 16;
       subDictionaryCompany.Bitmap.Height := 16;
       icon5.LoadFromFile('.\icons\company.bmp');
       subDictionaryCompany.BitMap.Canvas.Draw(0,0,icon5);

       subDictionaryEquipment := TMenuItem.Create (mur);
       subDictionaryEquipment.Caption := langIniG.ReadString('menu','eq', 'Оборудование');
       subDictionaryEquipment.OnClick := @MenuClick7;
       subDictionaryEquipment.Bitmap.Width := 16;
       subDictionaryEquipment.Bitmap.Height := 16;
       icon6.LoadFromFile('.\icons\equipment.bmp');
       subDictionaryEquipment.BitMap.Canvas.Draw(0,0,icon6);

       subDictionaryBrand := TMenuItem.Create (mur);
       subDictionaryBrand.Caption := langIniG.ReadString('menu','br', 'Бренды');
       subDictionaryBrand.OnClick := @MenuClick8;
       subDictionaryBrand.Bitmap.Width := 16;
       subDictionaryBrand.Bitmap.Height := 16;
       icon7.LoadFromFile('.\icons\brand.bmp');
       subDictionaryBrand.BitMap.Canvas.Draw(0,0,icon7);

       subDictionaryDash3:= TMenuItem.Create (mur);
       subDictionaryDash3.Caption := '-';
       subDictionaryDash3.Enabled:= False;

       subDictionaryAccessories := TMenuItem.Create (mur);
       subDictionaryAccessories.Caption := langIniG.ReadString('menu','eex', 'Комплектующие');
       subDictionaryAccessories.OnClick := @MenuClick9;
       subDictionaryAccessories.Bitmap.Width := 16;
       subDictionaryAccessories.Bitmap.Height := 16;
       icon8.LoadFromFile('.\icons\component.bmp');
       subDictionaryAccessories.BitMap.Canvas.Draw(0,0,icon8);

    // меню магазин
    mnshop:= TMenuItem.Create(mur);
    mnshop.Caption := 'Магазин';

         subFileShopIn:= TMenuItem.Create (mur);
         subFileShopIn.Caption := langIniG.ReadString('menu','mIn', 'Приход');
         subFileShopIn.OnClick := @ShopIn;
         subFileShopIn.Bitmap.Width := 16;
         subFileShopIn.Bitmap.Height := 16;
         icon9.LoadFromFile('.\icons\coming.bmp');
         subFileShopIn.BitMap.Canvas.Draw(0,0,icon9);

         subFileShopInBack:= TMenuItem.Create (mur);
         subFileShopInBack.Caption := langIniG.ReadString('menu','mRet', 'Возврат');
         subFileShopInBack.OnClick := @ShopInBack;
         subFileShopInBack.Bitmap.Width := 16;
         subFileShopInBack.Bitmap.Height := 16;
         icon10.LoadFromFile('.\icons\return.bmp');
         subFileShopInBack.BitMap.Canvas.Draw(0,0,icon10);

         subFileShopOutBad:= TMenuItem.Create (mur);
         subFileShopOutBad.Caption := langIniG.ReadString('menu','mOut', 'Списание');
         subFileShopOutBad.OnClick := @ShopOutBad;
         subFileShopOutBad.Bitmap.Width := 16;
         subFileShopOutBad.Bitmap.Height := 16;
         icon11.LoadFromFile('.\icons\write-off.bmp');
         subFileShopOutBad.BitMap.Canvas.Draw(0,0,icon11);

         subFileShopReport:= TMenuItem.Create (mur);
         subFileShopReport.Caption := langIniG.ReadString('menu','mRep', 'Очетность');
         subFileShopReport.OnClick := @ShopReport;
         subFileShopReport.Bitmap.Width := 16;
         subFileShopReport.Bitmap.Height := 16;
         icon12.LoadFromFile('.\icons\print.bmp');
         subFileShopReport.BitMap.Canvas.Draw(0,0,icon12);

      // Меню настройки
   mnSetting := TMenuItem.Create (mur);
   mnSetting.Caption := langIniG.ReadString('menu','ms', 'Настройки');

       subTelMask := TMenuItem.Create (mur);
       subTelMask.Caption := langIniG.ReadString('menu','tm', 'Маска телефона');
       subTelMask.OnClick := @MenuClick12;
       subTelMask.Bitmap.Width := 16;
       subTelMask.Bitmap.Height := 16;
       icon13.LoadFromFile('.\icons\mask.bmp');
       subTelMask.BitMap.Canvas.Draw(0,0,icon13);

      // меню помощь
   mnActivities := TMenuItem.Create (mur);
   mnActivities.Caption := langIniG.ReadString('menu','he', 'Помощь');

       subEvents := TMenuItem.Create (mur);
       subEvents.Caption := langIniG.ReadString('menu','si', 'Сайт программы');
       subEvents.OnClick := @MenuClick10;
       subEvents.Bitmap.Width := 16;
       subEvents.Bitmap.Height := 16;
       icon14.LoadFromFile('.\icons\site.bmp');
       subEvents.BitMap.Canvas.Draw(0,0,icon14);

       subDictionaryDash4:= TMenuItem.Create (mur);
       subDictionaryDash4.Caption := '-';
       subDictionaryDash4.Enabled:= False;

       subDonations := TMenuItem.Create (mur);
       subDonations.Caption := langIniG.ReadString('menu','ab', 'О программе');
       subDonations.OnClick := @MenuClick11;
       subDonations.Bitmap.Width := 16;
       subDonations.Bitmap.Height := 16;
       icon15.LoadFromFile('.\icons\About.bmp');
       subDonations.BitMap.Canvas.Draw(0,0,icon15);

       subKey := TMenuItem.Create (mur);
       subKey.Caption := langIniG.ReadString('menu','mReg', 'Регистрация ');
       subKey.OnClick := @MenuClick13;
       subKey.Bitmap.Width := 16;
       subKey.Bitmap.Height := 16;
       icon16.LoadFromFile('.\icons\registration.bmp');
       subKey.BitMap.Canvas.Draw(0,0,icon16);

      // меню отчет
 mnFilereport := TMenuItem.Create (mur);
 mnFilereport.Caption := langIniG.ReadString('menu','report', 'Отчеты');

         subFilereport:= TMenuItem.Create (mur);
         subFilereport.Caption := langIniG.ReadString('menu','reportnew', 'Новый отчет');
         subFilereport.OnClick := @clicknew;
         subFilereport.Bitmap.Width := 16;
         subFilereport.Bitmap.Height := 16;
         icon17.LoadFromFile('.\icons\new.bmp');
         subFilereport.BitMap.Canvas.Draw(0,0,icon17);

         subDictionaryDash5:= TMenuItem.Create (mur);
         subDictionaryDash5.Caption := '-';

 mnfiLangi := TMenuItem.Create (mur);
 mnfiLangi.Caption := langIniG.ReadString('menu','lang', 'Язык');



   // выводим выподающее меню
   rta:=TMainMenu.Create(mur);
   rta.Items.Add(mnFile);
       mnFile.Add(subFileNextUser);
       mnFile.Add(subFileClose);

   rta.Items.Add(mnDictionary);
        mnDictionary.Add(subDictionaryPriceList);
        mnDictionary.Add(subDictionaryDash1);
        mnDictionary.Add(subDictionaryStatusEquipment);
        mnDictionary.Add(subDictionaryDash2);
        mnDictionary.Add(subDictionaryCompany);
        mnDictionary.Add(subDictionaryEquipment);
        mnDictionary.Add(subDictionaryBrand);
        mnDictionary.Add(subDictionaryDash3);
        mnDictionary.Add(subDictionaryAccessories);
 // выводим в выподающем меню список файлов мультиязычности
 rta.Items.Add(mnfiLangi);

 fiLang := TStringList.Create;
 fiLang.Text := GetFilesList('languages','*.ini',False);
 s := fiLang.Count-1;
for i:=0  to s  do
 begin
  subfiLangi:= TMenuItem.Create (mur);
  subfiLangi.Caption := ExtractFileName(fiLang[i]);
  Delete(subfiLangi.Caption, Length(subfiLangi.Caption) -3 , 4);
  subfiLangi.Hint := (fiLang[i]);
  mnfiLangi.Add(subfiLangi);
  subfiLangi.OnClick := @clicklang;
  end;

 // выводим в выподющем меню список фалов отчетов
rta.Items.Add(mnFilereport);
   mnFilereport.Add(subFilereport);
   mnFilereport.Add(subDictionaryDash5);
reporfile := TStringList.Create;
    reporfile.Text := GetFilesList( 'Report\','*.fr3',True); //ExtractFilePath(Application.ExeName) +

     t := reporfile.Count-1;
     for i:=0  to t  do
     begin
         subfiLangirepor:= TMenuItem.Create (mur);
         subfiLangirepor.Caption := ExtractFileName(reporfile[i]);
         subfiLangirepor.Hint := (reporfile[i]);
         mnFilereport.Add(subfiLangirepor);

         Delete(subfiLangirepor.Caption, Length(subfiLangirepor.Caption) -3 , 4);

         subfiLangiEdit := TMenuItem.Create(mur);
         subfiLangiEdit.Caption := langIniG.ReadString('menu','reportedit', 'Редактировать');
         subfiLangiEdit.Hint := (reporfile[i]);
         subfiLangiDel := TMenuItem.Create(mur);
         subfiLangiDel.Caption := langIniG.ReadString('menu','reportdel', 'Удалить');
         subfiLangiDel.Hint := (reporfile[i]);
         //subfiLangipdf := TMenuItem.Create(mur);
         //subfiLangipdf.Caption := 'PDF';
         //subfiLangipdf.Hint := (fiLang[i]);
         subfiLangiPrint := TMenuItem.Create(mur);
         subfiLangiPrint.Caption := langIniG.ReadString('menu','reportprint', 'Печать');
         subfiLangiPrint.Hint := (reporfile[i]);

         subfiLangiEdit.OnClick := @clickEdit;
         subfiLangiDel.OnClick := @clickDel;
         subfiLangiPrint.OnClick := @clickPrint;
         //subfiLangipdf.OnClick := @clickpdf;
    
         subfiLangirepor.Add(subfiLangiEdit);
         subfiLangirepor.Add(subfiLangiDel);
         //subfiLangirepor.Add(subfiLangipdf);
         subfiLangirepor.Add(subfiLangiPrint);
     end;

   rta.Items.Add(mnshop);
        mnshop.Add(subFileShopIn);
        mnshop.Add(subFileShopInBack);
        mnshop.Add(subFileShopOutBad);
        mnshop.Add(subFileShopReport);

   rta.Items.Add(mnSetting);
        mnSetting.Add(subTelMask);

   rta.Items.Add(mnActivities);
        mnActivities.Add(subEvents);
        mnActivities.Add(subDictionaryDash4);
        mnActivities.Add(subDonations);
        mnActivities.Add(subKey);
end;


//***********************************************************************************************
//------------------------ обработчики событий выподаюшего меню----------------------------------
//***********************************************************************************************
//***********************************************************************************************
//обработчик смены языка*************************************************************************
//***********************************************************************************************
procedure clicklang (sender: string);
var
ini,langIni:TiniFile;
y,strshow,strlang:string;
i,c:integer;
rta: TMenuItem;
begin
y:=TMenuItem(Sender).Hint;
iniG:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
iniG.WriteString('lang','directlang',y);
 try
   FrmServiceCen.lLogUser.Caption:='Смена языка ';
   strshowG:=iniG.ReadString('lang','directlang', '');
   langIniG:=TIniFile.Create(ExtractFilePath (ParamStr (0))+ strshowG);
   SQLEXecute('UPDATE typeIn SET name="'+langIniG.ReadString('firw','in1', '')+'" WHERE id=1');
   SQLEXecute('UPDATE typeIn SET name="'+langIniG.ReadString('firw','in2', '')+'" WHERE id=2');
   SQLEXecute('UPDATE typeOut SET name="'+langIniG.ReadString('firw','out1', '')+'" WHERE id=1');
   SQLEXecute('UPDATE typeOut SET name="'+langIniG.ReadString('firw','out2', '')+'" WHERE id=2');
   SQLEXecute('UPDATE typeOut SET name="'+langIniG.ReadString('firw','out3', '')+'" WHERE id=3');
   SQLEXecute('UPDATE cbTCK SET cbTCKName="'+langIniG.ReadString('firw','TCK1', '')+'" WHERE id=1');
   SQLEXecute('UPDATE cbTCK SET cbTCKName="'+langIniG.ReadString('firw','TCK2', '')+'" WHERE id=2');
   SQLEXecute('UPDATE status SET statusName="'+langIniG.ReadString('firw','sn1', '')+'" WHERE id=1');
   SQLEXecute('UPDATE status SET statusName="'+langIniG.ReadString('firw','sn2', '')+'" WHERE id=2');
   SQLEXecute('UPDATE status SET statusName="'+langIniG.ReadString('firw','sn3', '')+'" WHERE id=3');
   SQLEXecute('UPDATE status SET statusName="'+langIniG.ReadString('firw','sn4', '')+'" WHERE id=4');
   SQLEXecute('UPDATE status SET statusName="'+langIniG.ReadString('firw','sn5', '')+'" WHERE id=5');
   SQLEXecute('UPDATE status SET statusName="'+langIniG.ReadString('firw','sn6', '')+'" WHERE id=6');
   SQLEXecute('UPDATE userStatus SET userStatusName="'+langIniG.ReadString('firw','usn1', '')+'" WHERE id=1');
   SQLEXecute('UPDATE userStatus SET userStatusName="'+langIniG.ReadString('firw','usn2', '')+'" WHERE id=2');
   SQLEXecute('UPDATE userStatus SET userStatusName="'+langIniG.ReadString('firw','usn3', '')+'" WHERE id=3');
   UpdateDatabase('cbTCK');
   UpdateDatabase('status');
   UpdateDatabase('userStatus');
   UpdateDatabase('typeOut');
   UpdateDatabase('typeIn');
   multilanguage(1);
   SwitchMenu('','1');
 finally
 FrmServiceCen.lLogUser.Caption:='Ok ';
end;
 end;

//***********************************************************************************************
//сменить пользователя***************************************************************************
//***********************************************************************************************
procedure MenuClick1 (Sender: string);
begin
      frmLogin.Close;
      OpenFile('start.bat')
end;

//***********************************************************************************************
//выход******************************************************************************************
//***********************************************************************************************
procedure MenuClick2 (Sender: string);
begin
     frmLogin.Close;
end;

//***********************************************************************************************
//прайс лист*************************************************************************************
//***********************************************************************************************
procedure MenuClick3 (Sender: string);
begin
     frmPriceList.Show;
end;

//***********************************************************************************************
//статус оборудования****************************************************************************
//***********************************************************************************************
procedure MenuClick5 (Sender: string);
begin
     frmallstatus.Show ;
     frmallstatus.tgStatus.dbUpdate;
end;

//***********************************************************************************************
//список компаний********************************************************************************
//***********************************************************************************************
procedure MenuClick6 (Sender: string);
begin
     frmAllListCompany.Show;
end;

//***********************************************************************************************
//список оборудования****************************************************************************
//***********************************************************************************************
procedure MenuClick7 (Sender: string);
begin
     frmAllListTypeOfEquipment.Show;
end;

//***********************************************************************************************
//список брендов оборудования********************************************************************
//***********************************************************************************************
procedure MenuClick8 (Sender: string);
begin
     frmAllListManufacturer.Show;
end;

//***********************************************************************************************
//список комплектующих***************************************************************************
//***********************************************************************************************
procedure MenuClick9 (Sender: string);
begin
     frmKompl.Show;
end;

//***********************************************************************************************
//сайт программы*********************************************************************************
//***********************************************************************************************
procedure MenuClick10 (Sender: string);
begin
     ShowMessage('Hello from Donations Database');
end;

//***********************************************************************************************
//о программе************************************************************************************
//***********************************************************************************************
procedure MenuClick11 (Sender: string);
begin
 frmAbout.Show;
end;

//***********************************************************************************************
//Маска телефона************************************************************************************
//***********************************************************************************************
procedure MenuClick12 (Sender: string);
begin
     frmMask.Show;
end;

//***********************************************************************************************
//лицензия************************************************************************************
//***********************************************************************************************
procedure MenuClick13 (Sender: string);
begin
     frmReg.Show;
end;

//***********************************************************************************************
//о программе************************************************************************************
//***********************************************************************************************
procedure MenuClick15 (Sender: string);
begin

end;


//***********************************************************************************************
//печать выбранного отчета***********************************************************************
//***********************************************************************************************
procedure clickPrint(sender: string);
var
y,strshow,strlang:string;
begin
  y:=TMenuItem(Sender).Hint;
  bReportOnClick('print',y);
end;

//***********************************************************************************************
//редактирование выбранного отчета***************************************************************
//***********************************************************************************************
procedure clickEdit(sender: string);
var
y,strshow,strlang:string;
begin
  y:=TMenuItem(Sender).Hint;
  bReportOnClick('edit',y);
end;

//***********************************************************************************************
//удаление выбранного отчета*********************************************************************
//***********************************************************************************************
procedure clickDel (sender: string);
var
y,strshow,strlang:string;
begin
   y:=TMenuItem(Sender).Hint;
   if IDYES = MessageBox (langIniG.ReadString('message','00x27', 'Вы действительно хотите удалить этот файл?'),y,MB_YESNO+MB_ICONINFORMATION)then begin
   DeleteFile(y);
   @SwitchMenu;
   end;
end;

//***********************************************************************************************
//печать в PDF выбранного отчета*****************************************************************
//***********************************************************************************************
procedure clickpdf (sender: string);
var
y,strshow,strlang:string;
begin
   y:=TMenuItem(Sender).Hint;
   showmessage('Вы нажали, PDF: ' +y);
end;

//***********************************************************************************************
//приход товара**********************************************************************************
//***********************************************************************************************
procedure ShopIn (sender: string);
begin
frmAllProduct.Show;
end;
//***********************************************************************************************
//возврат товара*********************************************************************************
//***********************************************************************************************
procedure ShopInBack (sender: string);
begin
  frmReasonForFReturn.Show;
end;
//***********************************************************************************************
//списание товара********************************************************************************
//***********************************************************************************************
procedure ShopOutBad (sender: string);
begin
  frmReasonForCancellation.Show;
end;
//***********************************************************************************************
//отчет магазина*********************************************************************************
//***********************************************************************************************
procedure ShopReport (sender: string);
begin
  frmReportShop.Show;
end;
//***********************************************************************************************
//новый отчет************************************************************************************
//***********************************************************************************************
procedure clicknew (sender: string);
var
y,strshow,strlang:string;
begin
 y:=TMenuItem(Sender).Hint;
 bReportOnClick('new','');
end;


//***********************************************************************************************
//-------------------------------------- отчеты -------------------------------------------------
//***********************************************************************************************
procedure bReportOnClick (ol,li: string);
var
    frxDBDataset1, frxDBDataset2,frxDBDataset3,frxDBDataset4,frxDBDataset5,frxDBDataset6,frxDBDataset7,frxDBDataset8,frxDBDataset9,frxDBDataset10,frxDBDataset11,frxDBDataset12: TfrxDBDataset;
    frxDBDataset13,frxDBDataset14,frxDBDataset15: TfrxDBDataset;
    ServiceWork, WorkOff, servise, listWorkOff,TypeOfEquipment,Manufacturer,Company,status,clCompanyOrApp,companyServiceWork, comDoc,TypeDoc, union : TDataSet;
    firstNameClient, twoNameClient, lastNameClient: TDataSet;
    i,c: integer;
    s:string;
begin
    //передача в дизайнер отчета
    SQLQuery('SELECT id AS "'+langIniG.ReadString('reportmess','dr1', '(id) Идентификатор клиента')+'",id_clCompanyOrApp AS "'+langIniG.ReadString('reportmess','dr2', '(id) Идентификатор типа клиента')+'",'+
             'id_company AS "'+langIniG.ReadString('reportmess','dr3', '(id) Идентификатор организации')+'",id_status AS "'+langIniG.ReadString('reportmess','dr4', '(id) Идентификатор статуса оборудования ')+'",'+
             'id_TypeOfEquipment AS "'+langIniG.ReadString('reportmess','dr5', '(id) Идентификатор типа оборудования ')+'",id_Manufacturer AS "'+langIniG.ReadString('reportmess','dr6', '(id) Идентификаторбренда оборудования ')+'",'+
             'telephonClient AS "'+langIniG.ReadString('reportmess','dr31', 'Телефон')+'",adresClient AS "'+langIniG.ReadString('reportmess','dr10', 'Адрес клиента')+'", passportNamberClient AS "'+langIniG.ReadString('reportmess','dr11', 'Серия паспорта клиента')+'", passportSeriesClient AS "'+langIniG.ReadString('reportmess','dr12', 'Номер паспорта клиента')+'",'+
             'serialNamber AS "'+langIniG.ReadString('reportmess','dr13', 'Серийный номер оборудования ')+'" ,descriptionATCsWords AS "'+langIniG.ReadString('reportmess','dr14', 'Описание неисправности')+'",externalStatus AS "'+langIniG.ReadString('reportmess','dr15', 'Внешний вид')+'",'+
             'model AS "'+langIniG.ReadString('reportmess','dr16', 'Модель оборудования ')+'",dateInServise AS "'+langIniG.ReadString('reportmess','dr17', 'Дата поступления ')+'",equipment AS "'+langIniG.ReadString('reportmess','dr18', 'Комплектация ')+'",'+
             'diagnostics AS "'+langIniG.ReadString('reportmess','dr19', 'Описание диагностики')+'",dateApplcation AS "'+langIniG.ReadString('reportmess','dr20', 'Дата ожидания мастера')+'",timeApplication AS "'+langIniG.ReadString('reportmess','dr21', 'Время ожидания мастера')+'",'+
             'warranty AS "'+langIniG.ReadString('reportmess','dr22', 'Гарантийный ДА/НЕТ')+'",onlyDiiagnostics AS "'+langIniG.ReadString('reportmess','dr23', 'Только диагностика ДА/НЕТ')+'"   FROM servise', servise);
    SQLQuery('SELECT name AS "'+langIniG.ReadString('reportmess','dr7', 'Имя клиента')+'"  FROM firstNameClient', firstNameClient);
    SQLQuery('SELECT name AS "'+langIniG.ReadString('reportmess','dr8', 'Фамилия клиента')+'"  FROM twoNameClient', twoNameClient);
    SQLQuery('SELECT name AS "'+langIniG.ReadString('reportmess','dr9', 'Отчество клиента')+'"  FROM lastNameClient', lastNameClient);
    SQLQuery('SELECT id_servise AS "'+langIniG.ReadString('reportmess','dr24', '(id) Идентификатор оборудования ')+'", priceWorkOff AS "'+langIniG.ReadString('reportmess','dr25', 'Цена')+'",klVoWorkOff AS "'+langIniG.ReadString('reportmess','dr26', 'Колличество')+'",nameWorkOff AS "'+langIniG.ReadString('reportmess','dr27', 'Наименование')+'" FROM listWorkOff', listWorkOff);
    SQLQuery('SELECT nameTypeOfEquipment "'+langIniG.ReadString('reportmess','dr28', 'Тип оборудования ')+'" FROM TypeOfEquipment', TypeOfEquipment);
    SQLQuery('SELECT nameManufacturer AS "'+langIniG.ReadString('reportmess','dr29', 'Бренд оборудования ')+'" FROM manufacturer', Manufacturer);
    SQLQuery('SELECT nameCompany AS "'+langIniG.ReadString('reportmess','dr30', 'Имя ')+'", telCompany AS "'+langIniG.ReadString('reportmess','dr31', 'Телефон')+'", streetCompany AS "'+langIniG.ReadString('reportmess','dr32', 'Улица')+'", houseCompany AS "'+langIniG.ReadString('reportmess','dr33', 'Дом')+'", fractionCompany AS "'+langIniG.ReadString('reportmess','dr34', 'Дробь')+'", officeCompany AS "'+langIniG.ReadString('reportmess','dr35', 'Офис')+'"  FROM company', Company);
    SQLQuery('SELECT statusName AS "'+langIniG.ReadString('reportmess','dr36', 'Статус оборудования ')+'" FROM status', status);
    SQLQuery('SELECT nameclCompanyOrApp AS "'+langIniG.ReadString('reportmess','dr37', 'Частный клиент,компания, заявка')+'" FROM clCompanyOrApp', clCompanyOrApp);
    SQLQuery('SELECT id_Company AS "'+langIniG.ReadString('reportmess','dr38', '(id) Идентификатор организации')+'",nameServise AS "'+langIniG.ReadString('reportmess','dr39', 'Тип работы')+'",priceServise AS "'+langIniG.ReadString('reportmess','dr40', 'Цена работы')+'",'+
             'dateServiseCompany AS"'+langIniG.ReadString('reportmess','dr41', 'Дата выполнения работы')+'",klVo "'+langIniG.ReadString('reportmess','dr42', 'Колличество')+'" FROM companyServiceWork', companyServiceWork);
    SQLQuery('SELECT id_TypeDoc AS "'+langIniG.ReadString('reportmess','dr43', '(id)Идентификатор Тип документа')+'",scanDoc AS "'+langIniG.ReadString('reportmess','dr44', 'Документ')+'",dateInDoc AS "'+langIniG.ReadString('reportmess','dr45', 'Дата')+'",nameDoc AS "'+langIniG.ReadString('reportmess','dr30', 'Имя ')+'",descriptionDoc "'+langIniG.ReadString('reportmess','dr46', 'Описание')+'" FROM comDoc', comDoc);
    SQLQuery('SELECT nameTypeDoc AS "'+langIniG.ReadString('reportmess','dr47', 'Тип документа')+'" FROM TypeDoc', TypeDoc);

    // передача в дизайнер отчета объединенных данных несколькоих таблиц
    SQLQuery('SELECT servise.id AS "'+langIniG.ReadString('reportmess','dr48', '(id)')+'",'+
             'servise.telephonClient AS "'+langIniG.ReadString('reportmess','dr85', '(частный клиент) Телефон')+'",servise.adresClient AS "'+langIniG.ReadString('reportmess','dr52', '(частный клиент) Адрес')+'", servise.passportNamberClient AS "'+langIniG.ReadString('reportmess','dr53', '(частный клиент) Серия паспорта')+'", servise.passportSeriesClient AS "'+langIniG.ReadString('reportmess','dr54', '(частный клиент) Номер паспорта')+'",'+
             'servise.serialNamber AS "'+langIniG.ReadString('reportmess','dr55', '(Оборудование) Серийный номер')+'" ,servise.descriptionATCsWords AS "'+langIniG.ReadString('reportmess','dr56', '(Оборудование) Описание неисправности')+'",servise.externalStatus AS "'+langIniG.ReadString('reportmess','dr57', '(Оборудование) Внешний вид')+'",'+
             'servise.model AS "'+langIniG.ReadString('reportmess','dr58', '(Оборудование) Модель')+'",servise.dateInServise AS "'+langIniG.ReadString('reportmess','dr59', '(Оборудование) Дата поступления ')+'",servise.equipment AS "'+langIniG.ReadString('reportmess','dr60', '(Оборудование) Комплектация ')+'",'+
             'servise.diagnostics AS "'+langIniG.ReadString('reportmess','dr61', '')+'",servise.dateApplcation AS "'+langIniG.ReadString('reportmess','dr62', '(Заявка) Дата ожидания мастера')+'",servise.timeApplication AS "'+langIniG.ReadString('reportmess','dr63', '(Заявка) Время ожидания мастера')+'",'+
             'servise.warranty AS "'+langIniG.ReadString('reportmess','dr64', '(Оборудование) Гарантийный ДА/НЕТ')+'",servise.onlyDiiagnostics AS "'+langIniG.ReadString('reportmess','dr65', '(Оборудование) Только диагностика ДА/НЕТ')+'", '+
             'firstNameClient.name AS "'+langIniG.ReadString('reportmess','dr49', '(частный клиент)  Имя ')+'",'+
             'twoNameClient.name AS "'+langIniG.ReadString('reportmess','dr50', '(частный клиент) Фамилия ')+'",'+
             'lastNameClient.name  AS "'+langIniG.ReadString('reportmess','dr51', '(частный клиент) Отчество ')+'",'+
             'listWorkOff.priceWorkOff AS "'+langIniG.ReadString('reportmess','dr66', '(Работы) Цена')+'",listWorkOff.klVoWorkOff  AS "'+langIniG.ReadString('reportmess','dr67', '(Работы) Цена')+'",listWorkOff.nameWorkOff AS "'+langIniG.ReadString('reportmess','dr68', '(Работы) Наименование')+'",'+
             'sumInPrice.inPrice AS "'+langIniG.ReadString('reportmess','dr69', '(Оплата работ) Сумма оплаты')+'",sumInPrice.dateINPrice AS "'+langIniG.ReadString('reportmess','dr70', '(Оплата работ) Дата оплаты')+'", '+
             'TypeOfEquipment.nameTypeOfEquipment AS "'+langIniG.ReadString('reportmess','dr71', '(Оборудование) Тип')+'", '+
             'manufacturer.nameManufacturer AS "'+langIniG.ReadString('reportmess','dr72', '(Оборудование) Бренд')+'", '+
             'company.nameCompany AS "'+langIniG.ReadString('reportmess','dr73', '(Компания) Имя ')+'", telCompany AS "'+langIniG.ReadString('reportmess','dr74', '(Компания) Телефон')+'", streetCompany AS "'+langIniG.ReadString('reportmess','dr75', '(Компания) Улица')+'", houseCompany AS "'+langIniG.ReadString('reportmess','dr76', '(Компания) Дом')+'", fractionCompany AS "'+langIniG.ReadString('reportmess','dr77', '(Компания) Дробь')+'", officeCompany AS "'+langIniG.ReadString('reportmess','dr78', '(Компания) Офис')+'", '+
             'status.statusName AS "'+langIniG.ReadString('reportmess','dr79', '(Оборудование) Статус')+'", '+
             'clCompanyOrApp.nameclCompanyOrApp AS "'+langIniG.ReadString('reportmess','dr80', '(Тип клиента) Частный клиент,компания, заявка')+'" '+
             'FROM servise '+
             'LEFT OUTER JOIN firstNameClient ON firstNameClient.id=servise.id_firstNameClient '+
             'LEFT OUTER JOIN twoNameClient ON twoNameClient.id=servise.id_twoNameClient '+
             'LEFT OUTER JOIN lastNameClient ON lastNameClient.id=servise.id_lastNameClient '+
             'LEFT OUTER JOIN listWorkOff ON listWorkOff.id_servise=servise.id '+
             'LEFT OUTER JOIN sumInPrice ON sumInPrice.id_servise=servise.id '+
             'LEFT OUTER JOIN TypeOfEquipment ON TypeOfEquipment.id=servise.id_TypeOfEquipment '+
             'LEFT OUTER JOIN manufacturer ON manufacturer.id=servise.id_manufacturer '+
             'LEFT OUTER JOIN company ON company.id=servise.id_Company '+
             'LEFT OUTER JOIN status ON status.id=servise.id_status '+
             'LEFT OUTER JOIN clCompanyOrApp ON clCompanyOrApp.id=servise.id_clCompanyOrApp '+
             'WHERE servise.id='+ frmServiceCen.tgList.sqlValue , WorkOff);
   if frmCompanyServiceWork.tgCompanyWork.SelectedColumn then
     begin
       c := frmCompanyServiceWork.tgCompanyWork.RowCount-1;
         for i := 0 to c do
          begin
          if frmCompanyServiceWork.tgCompanyWork.Selected[i] then s := s +IntToStr(frmCompanyServiceWork.tgCompanyWork.dbIndexToID(i)) + ' OR ';
        end;
        if s <> '' then
      begin
    SetLength(s, Length(s)-4);
    SQLQuery('SELECT companyServiceWork.id AS "'+langIniG.ReadString('reportmess','dr48', '(id)')+'", companyServiceWork.nameServise AS "'+langIniG.ReadString('reportmess','dr82', 'Имя услуги')+'", companyServiceWork.priceServise AS "'+langIniG.ReadString('reportmess','dr83', 'Цена услуги')+'", companyServiceWork.dateServiseCompany  AS "'+langIniG.ReadString('reportmess','dr84', 'Дата окозания услуги')+'" ,'+
             'companyServiceWork.klVo AS "'+langIniG.ReadString('reportmess','dr42', 'Колличество')+'",'+
             'company.nameCompany AS "'+langIniG.ReadString('reportmess','dr73', '(Компания) Имя ')+'", telCompany AS "'+langIniG.ReadString('reportmess','dr74', '(Компания) Телефон')+'", streetCompany AS "'+langIniG.ReadString('reportmess','dr75', '(Компания) Улица')+'", houseCompany AS "'+langIniG.ReadString('reportmess','dr76', '(Компания) Дом')+'", fractionCompany AS "'+langIniG.ReadString('reportmess','dr77', '(Компания) Дробь')+'", officeCompany AS "'+langIniG.ReadString('reportmess','dr78', '(Компания) Офис')+'" '+
             'FROM companyServiceWork '+
             'LEFT OUTER JOIN company ON company.id=companyServiceWork.id_Company '+
             'WHERE companyServiceWork.id='+s, ServiceWork);
    end;
   end else
     begin
     SQLQuery('SELECT companyServiceWork.id AS "'+langIniG.ReadString('reportmess','dr48', '(id)')+'", companyServiceWork.nameServise AS "'+langIniG.ReadString('reportmess','dr82', 'Имя услуги')+'", companyServiceWork.priceServise AS "'+langIniG.ReadString('reportmess','dr83', 'Цена услуги')+'", companyServiceWork.dateServiseCompany  AS "'+langIniG.ReadString('reportmess','dr84', 'Дата окозания услуги')+'" ,'+
             'companyServiceWork.klVo AS "'+langIniG.ReadString('reportmess','dr42', 'Колличество')+'",'+
             'company.nameCompany AS "'+langIniG.ReadString('reportmess','dr73', '(Компания) Имя ')+'", telCompany AS "'+langIniG.ReadString('reportmess','dr74', '(Компания) Телефон')+'", streetCompany AS "'+langIniG.ReadString('reportmess','dr75', '(Компания) Улица')+'", houseCompany AS "'+langIniG.ReadString('reportmess','dr76', '(Компания) Дом')+'", fractionCompany AS "'+langIniG.ReadString('reportmess','dr77', '(Компания) Дробь')+'", officeCompany AS "'+langIniG.ReadString('reportmess','dr78', '(Компания) Офис')+'" '+
             'FROM companyServiceWork '+
             'LEFT OUTER JOIN company ON company.id=companyServiceWork.id_company '+
             'WHERE companyServiceWork.id='+frmCompanyServiceWork.tgCompanyWork.sqlValue , ServiceWork);
    end;
    frxDBDataset1 := TfrxDBDataset.Create(frmLogin);
    frxDBDataset1.UserName        := langIniG.ReadString('reportmess','UserName1', '');
    frxDBDataset1.CloseDataSource := True;
    frxDBDataset1.OpenDataSource  := True;
    frxDBDataset1.DataSet         := servise;


    frxDBDataset2 := TfrxDBDataset.Create(listWorkOff);
    frxDBDataset2.UserName        := langIniG.ReadString('reportmess','UserName2', '');
    frxDBDataset2.CloseDataSource := True;
    frxDBDataset2.OpenDataSource  := True;
    frxDBDataset2.DataSet         := listWorkOff;


    frxDBDataset3 := TfrxDBDataset.Create(TypeOfEquipment);
    frxDBDataset3.UserName        := langIniG.ReadString('reportmess','UserName3', '');
    frxDBDataset3.CloseDataSource := True;
    frxDBDataset3.OpenDataSource  := True;
    frxDBDataset3.DataSet         := TypeOfEquipment;


    frxDBDataset4 := TfrxDBDataset.Create(Manufacturer);
    frxDBDataset4.UserName        := langIniG.ReadString('reportmess','UserName4', '');
    frxDBDataset4.CloseDataSource := True;
    frxDBDataset4.OpenDataSource  := True;
    frxDBDataset4.DataSet         := Manufacturer;


    frxDBDataset5 := TfrxDBDataset.Create(Company);
    frxDBDataset5.UserName        := langIniG.ReadString('reportmess','UserName5', '');
    frxDBDataset5.CloseDataSource := True;
    frxDBDataset5.OpenDataSource  := True;
    frxDBDataset5.DataSet         := Company;


    frxDBDataset6 := TfrxDBDataset.Create(status);
    frxDBDataset6.UserName        := langIniG.ReadString('reportmess','UserName6', '');
    frxDBDataset6.CloseDataSource := True;
    frxDBDataset6.OpenDataSource  := True;
    frxDBDataset6.DataSet         := status;


    frxDBDataset7 := TfrxDBDataset.Create(clCompanyOrApp);
    frxDBDataset7.UserName        := langIniG.ReadString('reportmess','UserName7', '');
    frxDBDataset7.CloseDataSource := True;
    frxDBDataset7.OpenDataSource  := True;
    frxDBDataset7.DataSet         := clCompanyOrApp;


    frxDBDataset8 := TfrxDBDataset.Create(companyServiceWork);
    frxDBDataset8.UserName        := langIniG.ReadString('reportmess','UserName8', '');
    frxDBDataset8.CloseDataSource := True;
    frxDBDataset8.OpenDataSource  := True;
    frxDBDataset8.DataSet         := companyServiceWork;


    frxDBDataset9 := TfrxDBDataset.Create(comDoc);
    frxDBDataset9.UserName        := langIniG.ReadString('reportmess','UserName9', '');
    frxDBDataset9.CloseDataSource := True;
    frxDBDataset9.OpenDataSource  := True;
    frxDBDataset9.DataSet         := comDoc;


    frxDBDataset10 := TfrxDBDataset.Create(TypeDoc);
    frxDBDataset10.UserName        := langIniG.ReadString('reportmess','UserName10', '');
    frxDBDataset10.CloseDataSource := True;
    frxDBDataset10.OpenDataSource  := True;
    frxDBDataset10.DataSet         := TypeDoc;

    frxDBDataset11 := TfrxDBDataset.Create(WorkOff);
    frxDBDataset11.UserName        := langIniG.ReadString('reportmess','UserName11', '');
    frxDBDataset11.CloseDataSource := True;
    frxDBDataset11.OpenDataSource  := True;
    frxDBDataset11.DataSet         := WorkOff;

    frxDBDataset12 := TfrxDBDataset.Create(ServiceWork);
    frxDBDataset12.UserName        := langIniG.ReadString('reportmess','UserName12', '');
    frxDBDataset12.CloseDataSource := True;
    frxDBDataset12.OpenDataSource  := True;
    frxDBDataset12.DataSet         := ServiceWork;

    frxDBDataset13 := TfrxDBDataset.Create(firstNameClient);
    frxDBDataset13.UserName        := langIniG.ReadString('reportmess','UserName13', '');
    frxDBDataset13.CloseDataSource := True;
    frxDBDataset13.OpenDataSource  := True;
    frxDBDataset13.DataSet         := firstNameClient;

    frxDBDataset14 := TfrxDBDataset.Create(twoNameClient);
    frxDBDataset14.UserName        := langIniG.ReadString('reportmess','UserName14', '');
    frxDBDataset14.CloseDataSource := True;
    frxDBDataset14.OpenDataSource  := True;
    frxDBDataset14.DataSet         := twoNameClient;

    frxDBDataset15 := TfrxDBDataset.Create(lastNameClient);
    frxDBDataset15.UserName        := langIniG.ReadString('reportmess','UserName15', '');
    frxDBDataset15.CloseDataSource := True;
    frxDBDataset15.OpenDataSource  := True;
    frxDBDataset15.DataSet         := lastNameClient;

    frmLogin.frxReport.Clear;
    //frmLogin.frxReport.DataSets.Clear;
    frmLogin.frxReport.DataSets.Add(frxDBDataset1);
    frmLogin.frxReport.DataSets.Add(frxDBDataset13);
    frmLogin.frxReport.DataSets.Add(frxDBDataset14);
    frmLogin.frxReport.DataSets.Add(frxDBDataset15);
    frmLogin.frxReport.DataSets.Add(frxDBDataset2);
    frmLogin.frxReport.DataSets.Add(frxDBDataset3);
    frmLogin.frxReport.DataSets.Add(frxDBDataset4);
    frmLogin.frxReport.DataSets.Add(frxDBDataset5);
    frmLogin.frxReport.DataSets.Add(frxDBDataset6);
    frmLogin.frxReport.DataSets.Add(frxDBDataset7);
    frmLogin.frxReport.DataSets.Add(frxDBDataset8);
    frmLogin.frxReport.DataSets.Add(frxDBDataset9);
    frmLogin.frxReport.DataSets.Add(frxDBDataset10);
    frmLogin.frxReport.DataSets.Add(frxDBDataset11);
    frmLogin.frxReport.DataSets.Add(frxDBDataset12);


    frxDBDataset1.DataSet.Close;
    frxDBDataset2.DataSet.Close;
    frxDBDataset3.DataSet.Close;
    frxDBDataset4.DataSet.Close;
    frxDBDataset5.DataSet.Close;
    frxDBDataset6.DataSet.Close;
    frxDBDataset7.DataSet.Close;
    frxDBDataset8.DataSet.Close;
    frxDBDataset9.DataSet.Close;
    frxDBDataset10.DataSet.Close;
    frxDBDataset11.DataSet.Close;
    frxDBDataset12.DataSet.Close;
    frxDBDataset13.DataSet.Close;
    frxDBDataset14.DataSet.Close;
    frxDBDataset15.DataSet.Close;


         if (ol='print') then begin
            frmLogin.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+li);
            frmLogin.frxReport.ShowReport;
          end;

          if (ol='edit') then begin
           frmLogin.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+li);
           frmLogin.mniReport.Click;
         end;

         if (ol='new') then frmLogin.mniReport.Click;

    frxDBDataset1.Free;
    frxDBDataset2.Free;
    frxDBDataset3.Free;
    frxDBDataset4.Free;
    frxDBDataset5.Free;
    frxDBDataset6.Free;
    frxDBDataset7.Free;
    frxDBDataset8.Free;
    frxDBDataset9.Free;
    frxDBDataset10.Free;
    frxDBDataset11.Free;
    frxDBDataset12.Free;

end;

//***********************************************************************************************
//сохранение адреса отчета для кнопки печати отчета в ini****************************************
//***********************************************************************************************
procedure frmreports_bOk_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TiniFile;
begin
 ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
 ini.WriteString('reports',h,frmreports.eAdressReport.Text);
end;


//***********************************************************************************************
//Форма настройки адреса отчета для кнопки отчета************************************************
//***********************************************************************************************
procedure frmreports_OnShow (Sender: TObject; Action,s: string);
var
reporfile:TStringList;
ini:TiniFile;
i,t:integer;
begin
 ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
 frmreports.eAdressReport.Text:=ini.ReadString('reports',h,'' );

 frmreports.cbAdressReport.Clear;

 reporfile := TStringList.Create;
 reporfile.Text := GetFilesList('report','*.fr3',False);
   t := reporfile.Count-1;
    for i:=0  to t  do
     begin
      frmreports.cbAdressReport.items.add(reporfile[i]);
     end;

 reporfile.free;
end;
//***********************************************************************************************
//Передать адрес формы отчета из cb d edit*******************************************************
//***********************************************************************************************
procedure frmreports_cbAdressReport_OnClick (Sender: TObject);
begin
 frmreports.eAdressReport.Text:=frmreports.cbAdressReport.Text;
end;
//***********************************************************************************************
//Присвоение глобальной переменной ключа формы отчета в ini**************************************
//***********************************************************************************************

procedure frmCompanyServiceWork_bEditReport_OnClick (Sender: TObject; var Cancel: boolean);
begin
  h:='cWoin';
end;

procedure frmCompanyServiceWork_bCoWprintReportSeting_OnClick (Sender: TObject; var Cancel: boolean);
begin
  h:='cWoin';
end;

procedure frmComServiceList_bPrintDiagnosticReportSeting_OnClick (Sender: TObject; var Cancel: boolean);
begin
  h:='comdi';
end;

procedure frmComServiceList_bPrintExidReportSeting_OnClick (Sender: TObject; var Cancel: boolean);
begin
  h:='comex';
end;

procedure frmComServiceList_bPrinterReportSeting_OnClick (Sender: TObject; var Cancel: boolean);
begin
  h:='comqu';
end;

procedure frmClientServiсeList_bPrintDiagnosticReportSeting_OnClick (Sender: TObject; var Cancel: boolean);
begin
  h:='di';
end;

procedure frmClientServiсeList_bPrintExidReportSeting_OnClick (Sender: TObject; var Cancel: boolean);
begin
  h:='ex';
end;

procedure frmClientServiсeList_bPrinterReportSeting_OnClick (Sender: TObject; var Cancel: boolean);
begin
  h:='qu';
end;

procedure frmServiceCen_bInReportSetting_OnClick (Sender: TObject; var Cancel: boolean);
begin
  h:='in';
end;

//***********************************************************************************************
//Кнопки печати отчета***************************************************************************
//***********************************************************************************************

procedure frmCompanyServiceWork_bCoWprint_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TiniFile;
s:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
  s:=ini.ReadString('reports','cWoin','' );
  bReportOnClick('print',s);
end;

procedure frmComServiceList_bPrintDiagnostic_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TiniFile;
s:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
  s:=ini.ReadString('reports','comdi','' );
  bReportOnClick('print',s);
end;

procedure frmComServiceList_bPrintExid_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TiniFile;
s:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
  s:=ini.ReadString('reports','comex','' );
  bReportOnClick('print',s);
end;

procedure frmComServiceList_bPrinter_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TiniFile;
s:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
  s:=ini.ReadString('reports','comqu','' );
  bReportOnClick('print',s);
end;

procedure frmClientServiсeList_bPrintDiagnostic_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TiniFile;
s:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
  s:=ini.ReadString('reports','di','' );
  bReportOnClick('print',s);
end;

procedure frmClientServiсeList_bPrintExid_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TiniFile;
s:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
  s:=ini.ReadString('reports','ex','' );
  bReportOnClick('print',s);
end;

procedure frmClientServiсeList_bPrinter_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TiniFile;
s:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
  s:=ini.ReadString('reports','qu','' );
  bReportOnClick('print',s);
end;

procedure frmServiceCen_bInReport_OnClick (Sender: TObject; var Cancel: boolean);
var
ini:TiniFile;
s:string;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\reports.ini');
  s:=ini.ReadString('reports','in','' );
  bReportOnClick('print',s);
end;



//***********************************************************************************************
//-------------------------------------- смс ----------------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//передача параметров смс сообщения содержащее логин, пороль, имя отправителя, номер, текст смс**
//***********************************************************************************************
//***********************************************************************************************
//передача смс сообщения в зависимости от выбора смс оператора***********************************
//***********************************************************************************************
    function Switchsms(smessage, SMS: string): boolean;
var
    ini : TInifile;
    ClickatellCom :TClickatellCom;
    TurboSmsUa :TTurboSmsUa;
    s, sResult, sLog, SMSPhone, SMSMessage,r,INFO: string;
    url: string;
begin
    ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
    SMSLogin:=ini.ReadString('senderlog','SMSLogin','');  // получаем логин
    SMSPassword:=ini.ReadString('senderlog','SMSPassword','');  // получаем пароль
    SMSAPI_ID:=ini.ReadString('senderlog','SMSAPI_ID','');  // получаем  required
    SMSSender:=ini.ReadString('senderlog','SMSSender','');  // получаем подпись отправителя
    SMSPhone:=SQLEXecute('SELECT telephonClient FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);  // получаем номер
    SMSMessage:= smessage;  // получаем сообщение
    smst:= SMSPhone;
    stdId:= SQLEXecute('SELECT id FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
    try
      //если выбран смс оператор epochta
      if SMS = 'epochta' then
        begin
          url:='http://api.myatompark.com/members/sms/xml.php';
          if not ping('mail.ru')then ShowMessage('нет соединения ') else  begin
          smsquestion:=createoleobject('WinHttp.WinHttpRequest.5.1');
          smsquestion.open('POST', url, true);
          smsquestion.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
          smsquestion.send('<SMS>'+
              '<operations>'+
              '<operation>SEND</operation>'+
              '</operations>'+
              '<authentification>'+
              '<username>'+SMSLogin+'</username>'+
              '<password>'+SMSPassword+'</password>'+
              '</authentification>'+
              '<message>'+
              '<sender>'+SMSSender+'</sender>'+
              '<text>'+SMSMessage+' [UTF-8]</text>'+
              '</message>'+
              '<numbers>'+
              '<number>'+SMSPhone+'</number>'+
              '</numbers>'+
              '</SMS>');

          smsAn:= 'epochta';

          smsTimer:=Ttimer.create(frmServiceCen);
          smsTimer.Enabled:=True;
          smsTimer.Interval:=1000;
          smsTimer.OnTimer:=@smsAnswer;
         end;
        end;
      //если выбран смс оператор SMS.RU
      if SMS = 'SMS.RU' then
         begin
          url:='https://sms.ru/sms/send';
          if not ping(url)then ShowMessage('нет соединения ') else  begin
          smsquestion:=createoleobject('WinHttp.WinHttpRequest.5.1');
          smsquestion.open('POST', url, true);
          smsquestion.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
          smsquestion.send('api_id='+SMSAPI_ID+'&to='+SMSPhone+'&from='+SMSSender+'&msg='+SMSMessage+'&partner_id=265885&json=1');
          smsAn:= 'SMS.RU';

          smsTimer:=Ttimer.create(frmServiceCen);
          smsTimer.Enabled:=True;
          smsTimer.Interval:=1000;
          smsTimer.OnTimer:=@smsAnswer;
          end;
         end;
       //если выбран смс оператор smsc
       if SMS = 'smsc' then
         begin
          url:='https://smsc.ru/sys/send.php';
          if not ping(url)then ShowMessage('нет соединения ') else  begin
          smsquestion:=createoleobject('WinHttp.WinHttpRequest.5.1');
          smsquestion.open('POST', url, true);
          smsquestion.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
          smsquestion.send('login='+HttpEncode(SMSLogin)+'&psw='+HttpEncode(SMSPassword)+'&phones='+HttpEncode(SMSPhone)+'&sender='+SMSSender+'&mes='+SMSMessage);
          smsAn:= 'smsc';

          smsTimer:=Ttimer.create(frmServiceCen);
          smsTimer.Enabled:=True;
          smsTimer.Interval:=1000;
          smsTimer.OnTimer:=@smsAnswer;
          end;
         end;
    finally
        ini.Free;
    end;
end;

function smsAnswer(sdata:string):string;
var
JSONObject, JSONObjProp, JSONObjProp2: TJSONObject;
JSONString: TJSONString;
sD: string = ReplaceStr(smst, '+', '');
begin
  try
    if smsquestion.Status() = 200 then
     begin
       if smsAn = 'epochta' then begin
           if Pos('<status>1</status>', smsquestion.responsetext) then SQLEXecute('UPDATE servise SET smsout="1" WHERE id='+stdId) ;
           if Pos('<status>-1</status>', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x75', 'Неправильный логин и/или пароль'));
           if Pos('<status>-2</status>', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x76', 'Неправильный формат XML')) ;
           if Pos('<status>-3</status>', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x77', 'Недостаточно кредитов на аккаунте пользователя ')) ;
           if Pos('<status>-4</status>', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x78', 'Нет верных номеров получателей')) ;
           if Pos('<status>-5</status>', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x79', 'Неверный текст')) ;
           if Pos('<status>-7</status>', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x80', 'Ошибка в имени отправителя ')) ;
      end;
       if smsAn = 'SMS.RU' then begin
         JSONObject := nil;
         JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(smsquestion.responsetext));
        if JSONObject <> nil then
          begin
             JSONString := TJSONString(JSONObject.GetPairByName('status_code').JsonValue);
             if Pos('100',JSONString.Value) then begin
             JSONObjProp := TJSONObject(JSONObject.GetPairByName('sms').JsonValue);
             JSONObjProp2 := TJSONObject( JSONObjProp.GetPairByName(sD).JsonValue);
             JSONString := TJSONString(JSONObjProp2.GetPairByName('status_code').JsonValue);
             end;
             if Pos('100',JSONString.Value) then SQLEXecute('UPDATE servise SET smsout="1" WHERE id='+stdId);
             if Pos('232',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x80', 'Превышен лимит одинаковых сообщений на этот номер в день'));
             if Pos('-1',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x81', 'Сообщение не найдено'));
             if Pos('107',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x82', 'Не может быть доставлено: неизвестная причина'));
             if Pos('108',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x83', 'Не может быть доставлено: отклонено'));
             if Pos('200',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x84', 'Неправильный api_id'));
             if Pos('201',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x85', 'Не хватает средств на лицевом счету'));
             if Pos('202',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x86', 'Неправильно указан номер телефона получателя, либо на него нет маршрута'));
             if Pos('203',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x87', 'Нет текста сообщения '));
             if Pos('204',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x88', 'Имя отправителя не согласовано с администрацией'));
             if Pos('209',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x89', 'Вы добавили этот номер (или один из номеров) в стоп-лист'));
             if Pos('220',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x90', 'Сервис временно недоступен, попробуйте чуть позже'));
             if Pos('230',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x91', 'Превышен общий лимит количества сообщений на этот номер в день'));
             if Pos('231',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x92', 'Превышен лимит одинаковых сообщений на этот номер в минуту'));
             if Pos('233',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x93', 'Превышен лимит отправки повторных сообщений с кодом на этот номер за короткий промежуток времени ("защита от мошенников"), можно отключить в разделе "Настройки")'));
             if Pos('301',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x94', 'Неправильный api_id, либо логин/пароль'));
             if Pos('205',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x95', 'Сообщение слишком длинное (превышает 8 СМС)'));
             if Pos('206',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x96', 'Будет превышен или уже превышен дневной лимит на отправку сообщений '));
             if Pos('207',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x97', 'На этот номер нет маршрута для доставки сообщений'));
             if Pos('302',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x98', 'Пользователь авторизован, но аккаунт не подтвержден (пользователь не ввел код, присланный в регистрационной смс)'));
             if Pos('500',JSONString.Value) then ShowMessage(langIniG.ReadString('message','00x99', 'Ошибка на сервере. Повторите запрос'));
           end;
          end;
        if smsAn = 'smsc' then begin
           if Pos('OK', smsquestion.responsetext) then SQLEXecute('UPDATE servise SET smsout="1" WHERE id='+stdId) ;
           if Pos('ERROR = 1 ', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x100', 'Ошибка в параметрах')) ;
           if Pos('ERROR = 2 ', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x101', 'Неверный логин или пароль')) ;
           if Pos('ERROR = 3 ', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x102', 'Недостаточно средств на счете Клиента')) ;
           if Pos('ERROR = 4 ', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x103', 'IP-адрес временно заблокирован из-за частых ошибок в запросах')) ;
           if Pos('ERROR = 5 ', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x104', 'Неверный формат даты')) ;
           if Pos('ERROR = 6 ', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x105', 'Сообщение запрещено (по тексту или по имени отправителя)')) ;
           if Pos('ERROR = 7 ', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x106', 'Неверный формат номера телефона')) ;
           if Pos('ERROR = 8 ', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x107', 'Сообщение на указанный номер не может быть доставлено')) ;
           if Pos('ERROR = 9 ', smsquestion.responsetext) then ShowMessage(langIniG.ReadString('message','00x108', 'Отправка более одного одинакового запроса на передачу SMS-сообщения в течение минуты')) ;
      end;
     end;
   except
   FrmServiceCen.lLogUser.Caption:='Передача СМС сообщения ';
 end;
 frmServiceCen.tgList.dbUpdate;
 smsTimer.Enabled:=False;
end;

//***********************************************************************************************
//выбор смс сообщения в соотвествии с настройками************************************************
//***********************************************************************************************
function smstr(str: string): string;
var
ini,langIni,inir:TiniFile;
s,t,strshow,sS,sDl,sNM,sAM:string;
sFirstName:string = SQLExecute('SELECT name FROM firstNameClient LEFT OUTER JOIN  servise  ON firstNameClient.id = servise.id_firstNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
sTwoName:string = SQLExecute('SELECT name FROM twoNameClient LEFT OUTER JOIN  servise  ON twoNameClient.id = servise.id_twoNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
sLastName:string = SQLExecute('SELECT name FROM lastNameClient LEFT OUTER JOIN  servise  ON lastNameClient.id = servise.id_lastNameClient WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
sModel:string = SQLEXecute('SELECT model FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sSN:string = SQLEXecute('SELECT serialNamber FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sTO:string = SQLEXecute('SELECT nameTypeOfEquipment FROM TypeOfEquipment LEFT OUTER JOIN servise ON TypeOfEquipment.id=servise.id_TypeOfEquipment WHERE servise.id=' +frmServiceCen.tgList.sqlValue);
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  inir :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
  strshow:=inir.ReadString('lang','directlang', '');
  langIni:=TIniFile.Create(ExtractFilePath (ParamStr (0))+ strshow);
  sS:= SQLExecute('SELECT IFNULL(SUM(sumInPrice.inPrice),0) FROM sumInPrice LEFT OUTER JOIN servise ON servise.id=sumInPrice.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
  sDl:= IntToStr(SQLExecute('SELECT IFNULL(SUM(listWorkOff.priceWorkOff * listWorkOff.klVoWorkOff),0)-"'+sS+'" FROM listWorkOff LEFT OUTER JOIN servise ON servise.id=listWorkOff.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue));
  sAM:=inir.ReadString('othersetting','AdressMas','');
  sNM:=inir.ReadString('othersetting','NameMas','');
  try
   //если нажата кнопка отправки сообщения в форме frmServiceCen
   if (str='frmServiceCen') then begin
         //загрузить статус оборудования
         t:=SQLEXecute('SELECT id_status FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
              //если статус оборудования * и сообщение включно то вернуть в результат текст сообщения %0:s
              if (t='1')  then begin
                         if (ini.ReadString('smstr','et','')='1')  then  result:= Format (langIni.ReadString('smstr','et',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] )else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='2')  then begin
                         if (ini.ReadString('smstr','etd','')='1')  then  result:=Format (langIni.ReadString('smstr','etd',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='3')  then begin
                         if (ini.ReadString('smstr','dr','')='1')  then  result:=Format (langIni.ReadString('smstr','dr',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='4')  then begin
                         if (ini.ReadString('smstr','epae','')='1')  then  result:=Format (langIni.ReadString('smstr','epae',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='5')  then begin
                         if (ini.ReadString('smstr','eur','')='1')  then  result:=Format (langIni.ReadString('smstr','eur',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='6')  then begin
                         if(ini.ReadString('smstr','eaatic','')='1')  then  result:=Format (langIni.ReadString('smstr','eaatic',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] )else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
            end;
     //если нажата кнопка отправки сообщения в форме frmMasterWork
     if (str='frmMasterWork') then begin
         //загрузить статус оборудования
         t:=SQLEXecute('SELECT id_status FROM servise WHERE id=' +IntToStr(frmMasterWork.tgListServise.dbItemID));
              //если статус оборудования * и сообщение включно то вернуть в результат текст сообщения
if (t='1')  then begin
                         if (ini.ReadString('smstr','et','')='1')  then  result:=Format (langIni.ReadString('smstr','et',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='2')  then begin
                         if (ini.ReadString('smstr','etd','')='1')  then  result:=Format (langIni.ReadString('smstr','etd',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='3')  then begin
                         if (ini.ReadString('smstr','dr','')='1')  then  result:=Format (langIni.ReadString('smstr','dr',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='4')  then begin
                         if (ini.ReadString('smstr','epae','')='1')  then  result:=Format (langIni.ReadString('smstr','epae',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='5')  then begin
                         if (ini.ReadString('smstr','eur','')='1')  then  result:=Format (langIni.ReadString('smstr','eur',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='6')  then begin
                         if(ini.ReadString('smstr','eaatic','')='1')  then  result:=Format (langIni.ReadString('smstr','eaatic',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] )else
                           MessageBox(langIniG.ReadString('message','00x28', 'СМС сообщение не установленно! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
                         end;
            end;
      finally
    end;
ini.free;
inir.free;
LangIni.free;

end;

//***********************************************************************************************
//кнопка передачи смс сообщения******************************************************************
//***********************************************************************************************
procedure frmServiceCen_bsmsout_OnClick (Sender: TObject; var Cancel: boolean);
var
smsini:TInifile;
smsmessage: string;
begin
smsini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
//если смс оператор выбран
   if smsini.ReadString('sender', 'sendersms', '') <> '' then begin
    //вызвать функцию smstr и получить текст смс сообщения
    smsmessage:=smstr('frmServiceCen');
     // если есть текст в смс сообщении
     if IDYES = MessageBox(smsmessage,smsini.ReadString('sender', 'sendersms', 'SMS'), MB_YESNO+MB_ICONINFORMATION) then begin
       //передать в функцию Switchsms текст смс и имя оператора
       if smsini.ReadString('sender', 'sendersms', '') = 'epochta' then Switchsms (smsmessage,'epochta') else
       if smsini.ReadString('sender', 'sendersms', '') = 'SMS.RU' then Switchsms (smsmessage,'SMS.RU') else
       if smsini.ReadString('sender', 'sendersms', '') = 'smsc' then Switchsms (smsmessage,'smsc');
    end;
  //если смс оператор не выбран
  end else  MessageBox(langIniG.ReadString('message','00x29', 'СМС оператор не установлен! Перейдите в настройки или обратитесь к администратору.'), langIniG.ReadString('message','00x28x1', 'Ошибка!'), MB_OK+MB_ICONINFORMATION);
end;

//***********************************************************************************************
//ссылка на оператора turbosms*******************************************************************
//***********************************************************************************************
procedure frmAdmin_bSMSRU_OnClick (Sender: TObject; var Cancel: boolean);
begin
 OpenURL('http://sms.ru/');
end;

//***********************************************************************************************
//ссылка на оператора epochta********************************************************************
//***********************************************************************************************
procedure frmAdmin_bEpochta_OnClick (Sender: TObject; var Cancel: boolean);
begin
 OpenURL('https://www.epochta.ru/');
end;

//***********************************************************************************************
//ссылка на оператора clickatell*****************************************************************
//***********************************************************************************************
procedure frmAdmin_bsmsc_OnClick (Sender: TObject; var Cancel: boolean);
begin
 OpenURL('https://www.smsc.ru/');
end;

//***********************************************************************************************
//выбор авторизации пользователя*****************************************************************
//***********************************************************************************************
procedure frmUserEdit_chbNoPassword_OnClick (Sender: TObject);
begin
  if frmUserEdit.chbNoPassword.Checked then begin
   frmUserEdit.ePassword.Enabled:=False;
   frmUserEdit.ePassword.Text:=' ';
   end else
   frmUserEdit.ePassword.Enabled:=True;
end;

//***********************************************************************************************
//показать ссылку на оператора в соответствии выбором в настройках оператора*********************
//***********************************************************************************************
procedure frmAdmin_cbSmsSend_OnClick (Sender: TObject);
begin

   if frmAdmin.cbSmsSend.ItemIndex=0 then begin
   frmAdmin.bEpochta.Visible:=True;
   frmAdmin.bSMSRU.Visible:=False;
   frmAdmin.bsmsc.Visible:=False;
   end;

   if frmAdmin.cbSmsSend.ItemIndex=1 then begin
   frmAdmin.bEpochta.Visible:=False;
   frmAdmin.bSMSRU.Visible:=True;
   frmAdmin.bsmsc.Visible:=False;
   end;

   if frmAdmin.cbSmsSend.ItemIndex=2 then begin
   frmAdmin.bEpochta.Visible:=False;
   frmAdmin.bSMSRU.Visible:=False;
   frmAdmin.bsmsc.Visible:=True;
   end;
end;

//***********************************************************************************************
//сохранение SMSAPI_ID***************************************************************************
//***********************************************************************************************
procedure frmAdmin_eSMSAPI_OnChange (Sender: TObject);
var
ini:TiniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  ini.WriteString('senderlog','SMSAPI_ID',frmAdmin.eSMSAPI.Text);
end;

//***********************************************************************************************
//сохранение имени смс отправителя***************************************************************
//***********************************************************************************************
procedure frmAdmin_eSenderSms_OnChange (Sender: TObject);
var
ini:TiniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  ini.WriteString('senderlog','SMSSender',frmAdmin.eSenderSms.Text);
end;

//***********************************************************************************************
//сохранение пароля смс оператора****************************************************************
//***********************************************************************************************
procedure frmAdmin_ePasswordSms_OnChange (Sender: TObject);
var
ini:TiniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  ini.WriteString('senderlog','SMSPassword',frmAdmin.ePasswordSms.Text );
end;

//***********************************************************************************************
//сохранение логина смс оператора****************************************************************
//***********************************************************************************************
procedure frmAdmin_eLoginSms_OnChange (Sender: TObject);
var
ini:TiniFile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  ini.WriteString('senderlog','SMSLogin',frmAdmin.eLoginSms.Text );
end;

//***********************************************************************************************
//запись значения смс комбобокса ****************************************************************
//***********************************************************************************************
procedure frmAdmin_cbSmsSend_OnChange (Sender: TObject);
var
ini:TiniFile;
begin
ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
ini.WriteString('sender','sendersms',frmAdmin.cbSmsSend.text);
ini.Free;
end;

//***********************************************************************************************
//чекбокс включения/выключения смс сообщений*****************************************************
//***********************************************************************************************
procedure frmAdmin_chbEnableSMSmessages_OnClick (Sender: TObject);
var
ini:TInifile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  ini.WriteBool('smstr','EnableSMSmessages',frmAdmin.chbEnableSMSmessages.Checked);
  if frmAdmin.chbEnableSMSmessages.Checked then
  begin
    frmAdmin.gbLogin.Enabled:=True;
    frmAdmin.gbMessag.Enabled:=True;
    frmAdmin.gbOperator.Enabled:=True;
  end else begin
    frmAdmin.gbLogin.Enabled:=False;
    frmAdmin.gbMessag.Enabled:=False;
    frmAdmin.gbOperator.Enabled:=False;
    end;
end;

//***********************************************************************************************
//запись текста смс сообщения********************************************************************
//***********************************************************************************************
procedure frmAdmin_eEaatic_OnChange (Sender: TObject);
begin
 langIniG.WriteString('smstr','eaatic', frmAdmin.eEaatic.Text);
end;

//***********************************************************************************************
//запись текста смс сообщения********************************************************************
//***********************************************************************************************
procedure frmAdmin_eEur_OnChange (Sender: TObject);
begin
 langIniG.WriteString('smstr','eur', frmAdmin.eEur.Text);
end;

//***********************************************************************************************
//запись текста смс сообщения********************************************************************
//***********************************************************************************************
procedure frmAdmin_eEpae_OnChange (Sender: TObject);
begin
 langIniG.WriteString('smstr','epae', frmAdmin.eEpae.Text);
end;

//***********************************************************************************************
//запись текста смс сообщения********************************************************************
//***********************************************************************************************
procedure frmAdmin_eDr_OnChange (Sender: TObject);
begin
 langIniG.WriteString('smstr','dr', frmAdmin.eDr.Text);
end;

//***********************************************************************************************
//запись текста смс сообщения********************************************************************
//***********************************************************************************************
procedure frmAdmin_eEtd_OnChange (Sender: TObject);
begin
 langIniG.WriteString('smstr','etd', frmAdmin.eEtd.Text);
end;

//***********************************************************************************************
//запись текста смс сообщения********************************************************************
//***********************************************************************************************
procedure frmAdmin_eEt_OnChange (Sender: TObject);
begin
 langIniG.WriteString('smstr','et', frmAdmin.eEt.Text);
end;

//***********************************************************************************************
//запись значения чекбокса***********************************************************************
//***********************************************************************************************
procedure frmAdmin_chbEquipmenAwaitsCenter_OnClick (Sender: TObject);
var
ini:TInifile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  Ini.WriteBool('smstr','eaatic',frmAdmin.chbEquipmenAwaitsCenter.Checked);
end;

//***********************************************************************************************
//запись значения чекбокса***********************************************************************
//***********************************************************************************************
procedure frmAdmin_chbEquipmentRepair_OnClick (Sender: TObject);
var
ini:TInifile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  Ini.WriteBool('smstr','eur',frmAdmin.chbEquipmentRepair.Checked);
end;

//***********************************************************************************************
//запись значения чекбокса***********************************************************************
//***********************************************************************************************
procedure frmAdmin_chbEquipmentExpected_OnClick (Sender: TObject);
var
ini:TInifile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  Ini.WriteBool('smstr','epae',frmAdmin.chbEquipmentExpected.Checked);
end;

//***********************************************************************************************
//запись значения чекбокса***********************************************************************
//***********************************************************************************************
procedure frmAdmin_chbDiagnosticResults_OnClick (Sender: TObject);
var
ini:TInifile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  Ini.WriteBool('smstr','dr',frmAdmin.chbDiagnosticResults.Checked);
end;

//***********************************************************************************************
//запись значения чекбокса***********************************************************************
//***********************************************************************************************
procedure frmAdmin_chbEquipmenTakenDiagnose_OnClick (Sender: TObject);
var
ini:TInifile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  Ini.WriteBool('smstr','etd',frmAdmin.chbEquipmenTakenDiagnose.Checked);
end;

//***********************************************************************************************
//запись значения чекбокса***********************************************************************
//***********************************************************************************************
procedure frmAdmin_chbEquipmenTaken_OnClick (Sender: TObject);
var
ini:TInifile;
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  Ini.WriteBool('smstr','et',frmAdmin.chbEquipmenTaken.Checked);
end;

//***********************************************************************************************
//--------------------- переключение на свободную форму и обратно -------------------------------
//***********************************************************************************************
//***********************************************************************************************
//когда мастер указывает в работах затраченные материалы он может указать их в свободной форме***
//***********************************************************************************************
 procedure frmMaterialsAndWork_bNotSPh_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmMaterialsAndWork.cbKompl.Visible:=True ;
    frmMaterialsAndWork.bSPh.Visible:=True;
end;

procedure frmMaterialsAndWork_bSPh_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmMaterialsAndWork.cbKompl.Visible:=False ;
    frmMaterialsAndWork.bSPh.Visible:=False;
end;

procedure frmServiceComp_bNotSPh_OnClick (Sender: TObject; var Cancel: boolean);
begin
   frmServiceComp.cbKompl.Visible:=True ;
   frmServiceComp.bSPh.Visible:=True;
end;

procedure frmServiceComp_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmServiceComp.cbKompl.Visible:=False ;
    frmServiceComp.bSPh.Visible:=False;
end;

//***********************************************************************************************
//передаем выбранный материал в eNameWorkOff для сохранения записи*******************************
//***********************************************************************************************
procedure frmMaterialsAndWork_cbKompl_OnClick (Sender: TObject);
begin
      frmMaterialsAndWork.eNameWorkOff.Text:= frmMaterialsAndWork.cbKompl.Text;
end;

//***********************************************************************************************
//передаем выбранный материал в eNameWorkOff для сохранения записи*******************************
//***********************************************************************************************
procedure frmServiceComp_cbKompl_OnClick (Sender: TObject);
begin
 frmMaterialsAndWork.eNameWorkOff.Text:= frmMaterialsAndWork.cbKompl.Text;
end;
//***********************************************************************************************
//-------------------------------- авторизация по клавише ---------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//нажимаем кнопку авторизации клавишей интер*****************************************************
//***********************************************************************************************
procedure frmLogin_OnKeyDown (Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
   if Key = 13 then frmLogin.bLoginOk.Click;
end;

//***********************************************************************************************
//---------------------------------- стоимость работы -------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//передаем глобальной переменной из какой формы открыта форма оплаты*****************************
//***********************************************************************************************
procedure frmComServiceList_bPriceOff_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmdolg:=frmComServiceList;
end;

procedure frmClientServiсeList_bPriceOff_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmdolg:=frmClientServiсeList;
end;

procedure frmAppl_bPriceOn_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmdolg:=frmAppl;
end;
//***********************************************************************************************
//после полной или частичной оплаты долга и нажатии клавиши карточка оборудования отобразить*****
//сумму******************************************************************************************
//***********************************************************************************************
procedure frmb_bOK_OnAfterClick (Sender: TObject);
var s:string ;
begin
  s:= SQLExecute('SELECT IFNULL(SUM(sumInPrice.inPrice),0) FROM sumInPrice LEFT OUTER JOIN servise ON servise.id=sumInPrice.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
  TdbEdit(frmdolg.FindComponent('eDolg')).Text:='"'+langIniG.ReadString('message','00x8', 'Сумма долга:')+'"'+ IntToStr(SQLExecute('SELECT IFNULL(SUM(listWorkOff.priceWorkOff * listWorkOff.klVoWorkOff),0)-"'+s+'" FROM listWorkOff LEFT OUTER JOIN servise ON servise.id=listWorkOff.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue));
end;

//***********************************************************************************************
//текстовое поле отображает общий долг клиента за рамонт оборудования*****************************
//***********************************************************************************************
procedure frmb_OnShow (Sender: TObject; Action: string);
var s:string ;
begin
  s:= SQLExecute('SELECT IFNULL(SUM(sumInPrice.inPrice),0) FROM sumInPrice LEFT OUTER JOIN servise ON servise.id=sumInPrice.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
  frmb.eSumm.Text:= IntToStr(SQLExecute('SELECT IFNULL(SUM(listWorkOff.priceWorkOff * listWorkOff.klVoWorkOff),0)-"'+s+'" FROM listWorkOff LEFT OUTER JOIN servise ON servise.id=listWorkOff.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue));
  frmb.cbIdService.dbItemID:= SQLExecute('SELECT id FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
end;

//***********************************************************************************************
//---------------------------------- завершение работы ------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//закрытие формы frmAdmin************************************************************************
//***********************************************************************************************
procedure frmAdmin_OnClose (Sender: TObject; Action: string);
begin
    iniSetting :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
    //sOne := iniSetting.ReadString('nologin', 'Enabled', '');
    //sLite := iniSetting.ReadString('liteserver', 'Enabled', '');
    frmAdmin.cbSmsSend.Clear;
    frmAdmin.cbKM.Clear;
    if (sOne = '0')then begin
    frmLogin.Close;
    end;
  ChangeKeyboardLayout(frmAdmin.eloginst.Tag);
  ChangeKeyboardLayout(frmAdmin.ePass.Tag);
  ChangeKeyboardLayout(frmAdmin.eIdService.Tag);
  frmAdOnOF:=0;
end;

//***********************************************************************************************
//закрытие формы frmMasterWork*******************************************************************
//***********************************************************************************************
procedure frmMasterWork_OnClose (Sender: TObject; Action: string);
begin
    sOne := iniSetting.ReadString('nologin', 'Enabled', '');
    if (sOne = '0') then  frmLogin.Close;
end;

//***********************************************************************************************
//закрытие формы frmServiceCen*******************************************************************
//***********************************************************************************************
procedure frmServiceCen_OnClose (Sender: TObject; Action: string);
begin
    // это основная рабочая форма выход из нее всегда кретичен, потому меняем значение пользователя и закрываем программу
    if userIDs<>'' then   SQLExecute('UPDATE users SET online="0" WHERE id = ' +userIDs);
    frmLogin.Close;
end;

//***********************************************************************************************
//закрытие формы frmLogin************************************************************************
//***********************************************************************************************
procedure frmLogin_OnClose (Sender: TObject; Action: string);
var
newIni:TIniFile;
begin
    newIni:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'logs\'+DateToStr(Date)+'.ini');
    newIni.WriteString('log',TimeToStr(Time), 'close programm');
    Timer.Free;
    newIni.Free;
    smsTimer.free;
end;
//***********************************************************************************************
//процедура мильтиязычности**********************************************************************
//***********************************************************************************************
procedure multilanguage (swch: integer);
var
c,i: integer;
s:string;
begin
 iniG :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
 strshowG:=iniG.ReadString('lang','directlang', '');
 langIniG:=TIniFile.Create(ExtractFilePath (ParamStr (0))+ strshowG);
 // форма настроек frmAdmin
 frmAdmin.lLogin.Caption:=langIniG.ReadString('label','L_L', 'Логин');
 frmAdmin.lPassword.Caption:=langIniG.ReadString('label','L_P', 'Пароль');
 frmAdmin.lDescriptSQLite.Caption:= langIniG.ReadString('label','lDescriptSQLite\line1', 'SQLite – это встраиваемая библиотека. SQLite может работать')+ #13 + #10
 +langIniG.ReadString('label','lDescriptSQLite\line2', 'в крошечном объёме выделяемой для неё памяти, гораздо')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptSQLite\line3', 'меньшем, чем в любых других системах БД. Это делает SQLite')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptSQLite\line4', 'очень удобным инструментом с возможностью использования ')+ #13 + #10
 +langIniG.ReadString('label','lDescriptSQLite\line5', 'практически в любых задачах возлагаемых на базу данных.')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptSQLite\line6', '')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptSQLite\line7', 'SQLite используется по умолчанию, но если Вы переключились на')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptSQLite\line8', 'MySQL или Lite server, то для того что бы вернутся к SQLite  вам ')+ #13 + #10
 +langIniG.ReadString('label','lDescriptSQLite\line9', 'нужно просто нажать кнопку ниже.')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptSQLite\line10', '')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptSQLite\line11', '');    
 frmAdmin.lDescriptMySQL.Caption:= langIniG.ReadString('label','lDescriptMySQL\line1', 'База данных MySQL — это самая популярная в мире база данных')+ #13 + #10
 +langIniG.ReadString('label','lDescriptMySQL\line2', 'с открытым кодом. Благодаря своей проверенной')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptMySQL\line3', 'производительности, надежности и простоте использования база')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptMySQL\line4', 'данных MySQL наиболее часто используется для веб-приложений')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptMySQL\line5', 'на таких ресурсах, как Facebook, Twitter, YouTube. Кроме того, ее ')+ #13 + #10
 +langIniG.ReadString('label','lDescriptMySQL\line6', 'особенно часто выбирают в качестве встроенной базы данных,')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptMySQL\line7', 'распространяемой тысячами поставщиков программного обеспечения ')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptMySQL\line8', 'и производителей оборудования.')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptMySQL\line9', '')+ #13 + #10 
 +langIniG.ReadString('label','lDescriptMySQL\line10', '');
 frmAdmin.lLogi.Caption:=langIniG.ReadString('label','L_L', 'Логин');
 frmAdmin.lPi.Caption:=langIniG.ReadString('label','L_P', 'Пароль');
 frmAdmin.lNameSen.Caption:=langIniG.ReadString('label','L_N_S', 'Имя отправителя ');
 frmAdmin.lTimeCopy.Caption:=langIniG.ReadString('label','L_T_C', 'Время резервного копирования SQLite');
 frmAdmin.lDCopy.Caption:=langIniG.ReadString('label','L_D_C', 'Место резервного копирования SQLite');
 frmAdmin.lNameMas.Caption:=langIniG.ReadString('label','L_N_M_M_E', 'Название мастерской');
 frmAdmin.lAdressMas.Caption:=langIniG.ReadString('label','L_A_M', 'Адрес мастерской ');
 frmAdmin.lUMP.Caption:=langIniG.ReadString('label','L_U_M_P', 'Пользователи мобильной программы');
 frmAdmin.lUDC.Caption:=langIniG.ReadString('label','L_U_D_C', 'обновлять данные через каждые:');
 frmAdmin.lPassIDS.Caption:=langIniG.ReadString('label','L_P', 'Пароль');
 frmAdmin.lLogIDS.Caption:=langIniG.ReadString('label','L_L', 'Логин');
 frmAdmin.Caption:=langIniG.ReadString('FrmCap','F_A', 'Сервисный центр - Настройки');
 frmAdmin.bBeackSQLite.Caption:=langIniG.ReadString('button','B_B_S_L', 'Вернуться к использованию SQLite');
 frmAdmin.bDeleteDB.Caption:=langIniG.ReadString('button','B_D_D_B', 'Удалить базу данных');
 frmAdmin.bDawnloadingMySQLserver.Caption:=langIniG.ReadString('button','B_D_D_M_S_Q_L', 'Скачать  базу данных MySQL');
 frmAdmin.bStartMySQL.Caption:=langIniG.ReadString('button','B_S_M_S_Q_L', 'Переключиться на базу данных MySQL');
 frmAdmin.bIP.Caption:=langIniG.ReadString('button','B_I_P', 'Заблакировать IP');
 frmAdmin.bListIP.Caption:=langIniG.ReadString('button','B_L_I_P', 'Список заблакированных IP');
 frmAdmin.bLogin.Caption:=langIniG.ReadString('button','B_L_O_O', 'Заблакировать логин');
 frmAdmin.bListLogin.Caption:=langIniG.ReadString('button','B_L_L', 'Список заблакированных логинов');
 frmAdmin.bOtherKon.Caption:=langIniG.ReadString('button','B_O_K', 'Дополнительно');
 frmAdmin.bOtherKonOff.Caption:=langIniG.ReadString('button','B_O_K', 'Дополнительно');
 frmAdmin.bNM.Caption:=langIniG.ReadString('button','B_N_M', 'Название мастерской');
 frmAdmin.bAM.Caption:=langIniG.ReadString('button','B_A_M', 'Адрес мастерской ');
 frmAdmin.bTO.Caption:=langIniG.ReadString('button','B_T_O', 'Тип оборудования ');
 frmAdmin.bFn.Caption:=langIniG.ReadString('button','B_F_N', 'Имя ');
 frmAdmin.bTn.Caption:=langIniG.ReadString('button','B_L_N', 'Фамилия ');
 frmAdmin.bLn.Caption:=langIniG.ReadString('button','B_T_N', 'Отчество');
 frmAdmin.bM.Caption:=langIniG.ReadString('button','B_M', 'Модель');
 frmAdmin.bSn.Caption:=langIniG.ReadString('button','B_S_N', 'Серийный номер');
 frmAdmin.bSs.Caption:=langIniG.ReadString('button','B_S_S', 'Стоимость выполненных услуг');
 frmAdmin.bExC.Caption:=langIniG.ReadString('button','B_I_C_S_V', 'Экспорт в CSV');
 frmAdmin.bImpC.Caption:=langIniG.ReadString('button','B_F_C_S_V', 'Импорт из CSV');
 frmAdmin.bNew.Caption:=langIniG.ReadString('button','B_N', 'Новый');
 frmAdmin.bReq.Caption:=langIniG.ReadString('button','B_R_Q', 'Напомнить');
 frmAdmin.bAutorization.Caption:=langIniG.ReadString('button','B_A', 'Авторизация ');
 frmAdmin.bDays.Caption:=langIniG.ReadString('button','B_D', 'Осталось дней');
 frmAdmin.bBeackSQLite.CommandLinkHint:=langIniG.ReadString('hint','B_S_Q_L_C_A_P', 'SQLite используется программой по умолчанию');
 frmAdmin.bStartMySQL.CommandLinkHint:=langIniG.ReadString('hint','B_S_M_Y_S_Q_L_C_H', 'Внимание! вы не сможите вернутся к настройкам пока не авторезуетесь в базе данных MySQL');
 frmAdmin.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');
 frmAdmin.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmAdmin.bEdit.Hint:=langIniG.ReadString('hint','B_E', 'Редактировать');
 frmAdmin.bNewUser.Hint:=langIniG.ReadString('hint','B_N_U', 'Новый Пользователь');
 frmAdmin.bDeleteUser.Hint:=langIniG.ReadString('hint','B_D_U', 'Удалить пользователя ');
 frmAdmin.bEditUser.Hint:=langIniG.ReadString('hint','B_E_U', 'Редактировать пользователя ');
 frmAdmin.Eet.Text:=langIniG.ReadString('smstr','et', '');
 frmAdmin.Eetd.Text:=langIniG.ReadString('smstr','etd', '');
 frmAdmin.Edr.Text:=langIniG.ReadString('smstr','dr', '');
 frmAdmin.Eepae.Text:=langIniG.ReadString('smstr','epae', '');
 frmAdmin.Eeur.Text:=langIniG.ReadString('smstr','eur', '');
 frmAdmin.Eeaatic.Text:=langIniG.ReadString('smstr','eaatic', '');
 frmAdmin.tsListuser.Caption:=langIniG.ReadString('ts','T_L_U', 'Пользователи');
 frmAdmin.tsOtherSetting.Caption:=langIniG.ReadString('ts','T_O_S', 'Прочие настройки');
 frmAdmin.tsMDU.Caption:=langIniG.ReadString('ts','T_M_D_U', 'Мобильные устройства');
 frmAdmin.tsSMS.Caption:=langIniG.ReadString('ts','T_S_M_S', 'CMC');
 frmAdmin.ckbOn.Caption:=langIniG.ReadString('ck','C_K_O_N', 'Без авторизации');
 frmAdmin.cbNoPassword.Caption:=langIniG.ReadString('cb','C_B_N_P', 'без пароля ');
 frmAdmin.cbStatus.TextHint:=langIniG.ReadString('cb','C_B_S', 'Группа');
 frmAdmin.chbEnableSMSmessages.Caption:=langIniG.ReadString('ch','C_H_E_S_M_S', 'Включить смс сообщения ');
 frmAdmin.dblist.Caption:=langIniG.ReadString('db','D_B_B', 'База данных');
 frmAdmin.gbKon.Caption:=langIniG.ReadString('gb','G_B_K', 'Конструктор');
 frmAdmin.gbNewUser.Caption:=langIniG.ReadString('gb','G_B_N_U', 'Новый пользователь');
 frmAdmin.gbInU.Caption:=langIniG.ReadString('gb','G_B_I_U', 'К базе подключены');
 frmAdmin.gbL.Caption:=langIniG.ReadString('gb','G_B_L', 'Логи');
 frmAdmin.gbLogin.Caption:=langIniG.ReadString('gb','G_B_L_O_N', 'Данные авторизации');
 frmAdmin.gbOperator.Caption:=langIniG.ReadString('gb','G_B_O', 'Ссылка на оператора');
 frmAdmin.gbMessag.Caption:=langIniG.ReadString('gb','G_B_M', 'Cообщения ');
 frmAdmin.gbMobileData.Caption:='       '+langIniG.ReadString('gb','G_B_M_D', 'Oбмен данными');
 frmAdmin.bCNNRSQLite.Caption:=langIniG.ReadString('button','B_C_N_N_R_S_Q_L', 'Подключиться к удаленной БД SQLite');

 //форма местера frmMasterWork
 frmMasterWork.Caption:=langIniG.ReadString('FrmCap','M_S_W', 'Сервисный центр - Мастерская ');
 frmMasterWork.lname.Caption:=langIniG.ReadString('label','L_N_M', 'Имя ');
 frmMasterWork.lPhon.Caption:=langIniG.ReadString('label','L_P_H', 'Тел:');
 frmMasterWork.bDiagnostic.Caption:=langIniG.ReadString('button','B_D_S_C', 'Диагностика');
 frmMasterWork.bWorkOff.Caption:=langIniG.ReadString('button','B_W_O_F_F', 'Выполненые работы');
 frmMasterWork.bStatus.Caption:=langIniG.ReadString('button','B_S_T_S', 'Статус');
 frmMasterWork.bEq.Caption:=langIniG.ReadString('button','B_E_Q', 'Комплектация ');
 frmMasterWork.bSearchApp.Caption:=langIniG.ReadString('button','B_S_A', 'Поиск заявок');
 frmMasterWork.bComp.Caption:=langIniG.ReadString('button','B_C_M_P', 'Словарь комплектующих');
 frmMasterWork.bSearch.Hint:=langIniG.ReadString('hint','B_S_C_H', 'Поиск');
 frmMasterWork.bSearchCancel.Hint:=langIniG.ReadString('hint','B_S_C_H_C', 'Сбросить поиск');
 frmMasterWork.gbSearch.Caption:=langIniG.ReadString('gb','B_S_C_H', 'Поиск');

 //форма frmUserEdit
 frmUserEdit.Caption:=langIniG.ReadString('FrmCap','F_R_P', 'Редактор пользователя ');
 frmUserEdit.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');
 frmUserEdit.lLogin.Caption:=langIniG.ReadString('label','L_L', 'Логин');
 frmUserEdit.lPassword.Caption:=langIniG.ReadString('label','L_P', 'Пароль');
 frmUserEdit.gbUser.Caption:=langIniG.ReadString('gb','G_B_U', 'Пользователь');
 frmUserEdit.chbNoPassword.Caption:=langIniG.ReadString('ch','C_H_N_P', 'Без пароля ');
 frmUserEdit.cbStatus.TextHint:=langIniG.ReadString('cb','C_B_S', 'группа');
 
  //форма frmDeleteDatabase
 frmDeleteDatabase.Caption:=langIniG.ReadString('FrmCap','D_D_B', 'Yдаление');
 frmDeleteDatabase.lDelete.Caption:=langIniG.ReadString('label','lDelete\line1', 'Восстановление базы данных не возможно!');
 frmDeleteDatabase.lDelete2.Caption:=langIniG.ReadString('label','lDelete\line12', 'Вы действительно хотите удалить базу данных ?');
 frmDeleteDatabase.bDelete.Caption:=langIniG.ReadString('button','B_D_P', 'Удалить');
 frmDeleteDatabase.bCancel.Caption:=langIniG.ReadString('button','B_C', 'Отменить');
 
 //форма frmSQLiteServer
 frmSQLiteServer.bOk.Caption:=langIniG.ReadString('button','B_O_K_P', 'Запустить');
 frmSQLiteServer.bCancel.Caption:=langIniG.ReadString('button','B_C', 'Отменить');
 
 //форма frmListIP
 frmListIP.Caption:=langIniG.ReadString('FrmCap','L_F_A_P', 'Заблокированные IP');
 frmListIP.bListIP.Caption:=langIniG.ReadString('button','B_L_I_P_C', 'Разблакировать');
 
 //форма frmListLogin
 frmListLogin.Caption:=langIniG.ReadString('FrmCap','L_F_A_L', 'Заблокированные логины');
 frmListLogin.bListLogin.Caption:=langIniG.ReadString('button ','B_L_I_P_C', 'Разблакировать');

//форма frmDiagnostics
 frmDiagnostics.Caption:=langIniG.ReadString('FrmCap','F_D', 'Диагностика');
 frmDiagnostics.lDiagnostics.Caption:=langIniG.ReadString('label','L_B_S_S', 'Укажите результаты диагностики');
 frmDiagnostics.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 frmDiagnostics.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 
 //форма frmListWorkR
 frmListWorkR.Caption:=langIniG.ReadString('FrmCap','F_L_W_R', 'Список выполненных работ');
 frmListWorkR.bOpenMaterialsAndWork.Caption:=langIniG.ReadString('button','B_O_M_L_A_W', 'Указать затраченные материалы или иные виды работ');
 frmListWorkR.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');
 frmListWorkR.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 
 //форма frmMaterialsAndWork
 frmMaterialsAndWork.Caption:=langIniG.ReadString('FrmCap','F_M_L_A_W', 'Затраченные материалы или иные виды работ');
 frmMaterialsAndWork.ePriceWorkOff.Hint:=langIniG.ReadString('hint','B_P_W_R', 'Цена');
 frmMaterialsAndWork.eKlVoWorkOff.Hint:=langIniG.ReadString('hint','B_K_L_V', 'Колличество');
 frmMaterialsAndWork.bSPh.Hint:=langIniG.ReadString('hint','B_S_P_H', 'В свобоной форме');
 frmMaterialsAndWork.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmMaterialsAndWork.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');
 
 //форма frmStatus
 frmStatus.Caption:=langIniG.ReadString('FrmCap','F_F_S', 'Cтатус оборудования ');
 frmStatus.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmStatus.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 
 //форма frmCmop
 frmCmop.Caption:=langIniG.ReadString('FrmCap','F_C', 'Комплектация оборудования ');
 frmCmop.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmCmop.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 
 //форма frmKompl
 frmKompl.Caption:=langIniG.ReadString('FrmCap','F_C_L', 'Комплектующие');
 frmKompl.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmKompl.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmKompl.bEdit.Hint:=langIniG.ReadString('hint','B_E', 'Редактировать');
 frmKompl.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');
 
 //форма frmServiceCen
 frmServiceCen.Caption:=langIniG.ReadString('FrmCap','F_S_C_C', 'Сервисный центр');
 frmServiceCen.bCompanyService.Caption:=langIniG.ReadString('button','B_C_S_I_N', 'Принять в сервис');
 frmServiceCen.bServiceWork.Caption:=langIniG.ReadString('button','B_B_S_W', 'Сервисное обслуживание');
 frmServiceCen.bNewApplication.Caption:=langIniG.ReadString('button','B_B_N_A_L', 'Новая заявка');
 frmServiceCen.bPriceList.Caption:=langIniG.ReadString('button','B_B_P_L', 'Прайслист');
 frmServiceCen.bDoc.Caption:=langIniG.ReadString('button','B_D_S_D', 'Документы');
 frmServiceCen.bsmsout.Caption:=langIniG.ReadString('button','D_S_M_S_O', 'СМС');
 frmServiceCen.bsetting.Caption:=langIniG.ReadString('button','B_B_S_N', 'Настройки');
 frmServiceCen.bMasterWork.Caption:=langIniG.ReadString('button','B_M_W', 'Мастерская ');
 frmServiceCen.bInReport.Caption:=langIniG.ReadString('button','B_I_N_R', 'Акт приёма');
 frmServiceCen.bListApplication.Hint:=langIniG.ReadString('hint','B_L_A_L', 'Список заявок');
 frmServiceCen.eserialNamberSearch.TextHint:=langIniG.ReadString('hint','E_S_N_S', 'Серийный номер');
 frmServiceCen.emodelSearch.TextHint:=langIniG.ReadString('hint','E_M_S', 'Модель');
 frmServiceCen.cbstatusNameSearch.TextHint:=langIniG.ReadString('cb','C_B_S_N_S', 'Cтатус');
 frmServiceCen.cbCompanySearch.TextHint:=langIniG.ReadString('cb','C_B_C_S', 'организация ');
 frmServiceCen.bInReportSetting.Hint:=langIniG.ReadString('hint','B_R_S', 'Настроить');
 frmServiceCen.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmServiceCen.bSearch.Hint:=langIniG.ReadString('hint','B_S_C_H', 'Поиск');
 frmServiceCen.gbSearch.Caption:=langIniG.ReadString('gb','B_S_C_H', 'Поиск');
 frmServiceCen.eFirstNameAppSearch.TextHint:=langIniG.ReadString('hint','H_B_F_N_C', 'Имя ');
 frmServiceCen.eLastNameAppSearch.TextHint:=langIniG.ReadString('hint','H_B_T_N_C', 'Фамилия ');
 frmServiceCen.eTelephoneAppSearch.TextHint:=langIniG.ReadString('hint','E_T_C', 'Телефон');
 frmServiceCen.eAdresAppSearch.TextHint:=langIniG.ReadString('hint','H_B_A_C', 'Адрес');
 frmServiceCen.eWorkMAppSearch.TextHint:=langIniG.ReadString('hint','H_A_T_W', 'Мастер');
 frmServiceCen.lAppSearch.Caption:=langIniG.ReadString('label','L_A_S', 'Дата заявки');
 frmServiceCen.bsearchNone.Hint:=langIniG.ReadString('hint','H_B_S_H_N', 'Завершить поиск заявок');

 //форма frmReceivinOgEquipment
 frmReceivinOgEquipment.Caption:=langIniG.ReadString('FrmCap','F_P_O_B', 'Прием оборудования ');
 frmReceivinOgEquipment.lEquipment.Caption:=langIniG.ReadString('label','L_E_P_M', 'Комплектация ');
 frmReceivinOgEquipment.lPassport.Caption:=langIniG.ReadString('label','L_P_S_S_P', 'Паспорт');
 frmReceivinOgEquipment.lDescriptionATCsWords.Caption:=langIniG.ReadString('label','L_D_A_W', 'Неисправность со слов клиента');
 frmReceivinOgEquipment.lExternalStatus.Caption:=langIniG.ReadString('label','L_E_L_S', 'Описание внешнего вида');
 frmReceivinOgEquipment.cbTCK.TextHint:=langIniG.ReadString('cb','C_B_T_C_K', 'Выбрать тип клиента');
 frmReceivinOgEquipment.cbNameTypeOfEquipment.TextHint:=langIniG.ReadString('cb','C_B_N_T_O_E', 'Выбрать тип оборудования ');
 frmReceivinOgEquipment.cbNameManufacturer.TextHint:=langIniG.ReadString('cb','C_B_N_M_F', 'Бренд');
 frmReceivinOgEquipment.cbNameCompany.TextHint:=langIniG.ReadString('cb','C_B_N_C', 'Выбрать компанию');
 frmReceivinOgEquipment.cbOnlyDiagnostic.Caption:=langIniG.ReadString('cb','C_B_L_D_S', 'Только диагностика');
 frmReceivinOgEquipment.cbWarranty.Caption:=langIniG.ReadString('cb','C_B_W', 'Гарантийный');
 frmReceivinOgEquipment.gbCustomer.Caption:=langIniG.ReadString('gb','G_B_C_K', 'Клиент');
 frmReceivinOgEquipment.gbCompany.Caption:=langIniG.ReadString('gb','G_B_C', 'Компания ');
 frmReceivinOgEquipment.eModel.TextHint:=langIniG.ReadString('hint','B_D_M', 'Укажите модель');
 frmReceivinOgEquipment.eSerialNamber.TextHint:=langIniG.ReadString('hint','B_S_N', 'Укажите серийный номер'); 
 frmReceivinOgEquipment.eFirstNameClient.TextHint:=langIniG.ReadString('hint','H_B_F_N_C', 'Имя ');
 frmReceivinOgEquipment.eTwoNameClient.TextHint:=langIniG.ReadString('hint','H_B_T_N_C', 'Фамилия ');
 frmReceivinOgEquipment.eLastNameClient.TextHint:=langIniG.ReadString('hint','H_B_L_N_C', 'Отчество');
 frmReceivinOgEquipment.eAdresClient.TextHint:=langIniG.ReadString('hint','H_B_A_C', 'Адрес');
 frmReceivinOgEquipment.ePassportSeriesClient.TextHint:=langIniG.ReadString('hint','E_P_S_C', 'Серия ');
 frmReceivinOgEquipment.ePassportNamberClient.TextHint:=langIniG.ReadString('hint','E_P_S_N_C', 'Номер');
 frmReceivinOgEquipment.eTelephonClient.TextHint:=langIniG.ReadString('hint','E_T_C', 'Телефон');
 frmReceivinOgEquipment.bAllListTypeOfEquipment.Hint:=langIniG.ReadString('hint','B_A_L_L', 'Список');
 frmReceivinOgEquipment.bAllListManufacturer.Hint:=langIniG.ReadString('hint','B_A_L_L', 'Список');
 frmReceivinOgEquipment.bListEquipment.Hint:=langIniG.ReadString('hint','B_A_L_L', 'Список');
 frmReceivinOgEquipment.bNameCompany.Hint:=langIniG.ReadString('hint','B_A_L_L', 'Список');
 frmReceivinOgEquipment.bOkCompany.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 frmReceivinOgEquipment.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 frmReceivinOgEquipment.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');

 //форма frmAllListTypeOfEquipment
 frmAllListTypeOfEquipment.Caption:=langIniG.ReadString('FrmCap','F_L_O_L', 'Список оборудования ');
 frmAllListTypeOfEquipment.bNew.Hint:=langIniG.ReadString('hint','H_B_N', 'Добавить');
 frmAllListTypeOfEquipment.bEdit.Hint:=langIniG.ReadString('hint','B_E', 'Редактировать');
 frmAllListTypeOfEquipment.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmAllListTypeOfEquipment.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmAddTypeOfEquipment
 frmAddTypeOfEquipment.Caption:=langIniG.ReadString('FrmCap','F_O_R_L', 'Оборудование');
 frmAddTypeOfEquipment.eNameTypeOfEquipment.TextHint:=langIniG.ReadString('hint','H_E_N_T_E', 'Укажите имя оборудования ');
 frmAddTypeOfEquipment.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmAddTypeOfEquipment.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');

 //форма frmAllListManufacturer
 frmAllListManufacturer.Caption:=langIniG.ReadString('FrmCap','F_A_M_F', 'Список брендов');
 frmAllListManufacturer.bNew.Hint:=langIniG.ReadString('hint','H_B_N', 'Добавить');
 frmAllListManufacturer.bEdit.Hint:=langIniG.ReadString('hint','B_E', 'Редактировать');
 frmAllListManufacturer.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmAllListManufacturer.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmAddManufacturer
 frmAddManufacturer.Caption:=langIniG.ReadString('FrmCap','F_A_A_M_F', 'Бренд');
 frmAddManufacturer.eNameManufacturer.TextHint:=langIniG.ReadString('hint','H_E_N_M_F', 'Укажите имя бренда');
 frmAddManufacturer.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmAddManufacturer.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');

 //форма frmAllListEquipment
 frmAllListEquipment.Caption:=langIniG.ReadString('FrmCap','F_A_E', 'Список элементов комплектации');
 frmAllListEquipment.bNew.Hint:=langIniG.ReadString('hint','H_B_N', 'Добавить');
 frmAllListEquipment.bEdit.Hint:=langIniG.ReadString('hint','B_E', 'Редактировать');
 frmAllListEquipment.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmAllListEquipment.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmAddEquipment
 frmAddEquipment.Caption:=langIniG.ReadString('FrmCap','F_A_D_D_A_E', 'Элемент комплектации');
 frmAddEquipment.eNameEquipment.TextHint:=langIniG.ReadString('hint','H_E_N_T_R', 'Укажите имя элемента комплектации');
 frmAddEquipment.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmAddEquipment.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');

 //форма frmAllListCompany
 frmAllListCompany.Caption:=langIniG.ReadString('FrmCap','F_A_C', 'Список компаний');
 frmAllListCompany.bNew.Hint:=langIniG.ReadString('hint','H_B_N', 'Добавить');
 frmAllListCompany.bEdit.Hint:=langIniG.ReadString('hint','B_E', 'Редактировать');
 frmAllListCompany.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmAllListCompany.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmAddCompany
 frmAddCompany.Caption:=langIniG.ReadString('FrmCap','F_A_D_D_A_C', 'Компания ');
 frmAddCompany.eNameCompany.TextHint:=langIniG.ReadString('hint','B_N_C_E', 'Имя компании');
 frmAddCompany.eStreetCompany.TextHint:=langIniG.ReadString('hint','H_E_S_T_C', 'Улица');
 frmAddCompany.eHouseCompany.TextHint:=langIniG.ReadString('hint','H_E_H_C', 'Дом');
 frmAddCompany.eFractionCompany.TextHint:=langIniG.ReadString('hint','H_E_F_C', 'Дробь');
 frmAddCompany.eOfficeCompany.TextHint:=langIniG.ReadString('hint','H_E_O_C', 'Офис');
 frmAddCompany.eTelCompany.TextHint:=langIniG.ReadString('hint','E_T_C', 'Телефон');
 frmAddCompany.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmAddCompany.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');

 //форма frmCompanyServiceWork
 frmCompanyServiceWork.Caption:=langIniG.ReadString('FrmCap','F_C_S_W', 'Лист сервисного обслужевания компании');
 frmCompanyServiceWork.cbNameCompany.TextHint:=langIniG.ReadString('cb','C_B_N_C', 'Выбрать компанию');
 frmCompanyServiceWork.cbCompanyNameSearch.TextHint:=langIniG.ReadString('cb','C_B_N_C', 'Выбрать компанию');
 frmCompanyServiceWork.cbListWork.TextHint:=langIniG.ReadString('cb','C_B_L_W', 'Прайс');
 frmCompanyServiceWork.bEditReport.Hint:=langIniG.ReadString('hint','H_B_N_R_O', 'Настройки отчета');
 frmCompanyServiceWork.bNameCompany.Hint:=langIniG.ReadString('hint','B_A_L_L', 'Список');
 frmCompanyServiceWork.bSearch.Hint:=langIniG.ReadString('hint','B_S_C_H', 'Поиск');
 frmCompanyServiceWork.bCoWprint.Hint:=langIniG.ReadString('hint','H_B_C_W_P', 'Печать');
 frmCompanyServiceWork.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmCompanyServiceWork.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 frmCompanyServiceWork.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');
 frmCompanyServiceWork.bOpenMaterialsAndWork.Hint:=langIniG.ReadString('hint','H_B_O_M_T_A_W', 'Комплектующие или иные виды работ');
 frmCompanyServiceWork.ePrice.TextHint:=langIniG.ReadString('hint','B_P_W_R', 'Цена');

 //форма frmNewApplication
 frmNewApplication.Caption:=langIniG.ReadString('FrmCap','F_C_N_A', 'Новая заявка');
 frmNewApplication.gbClient.Caption:=langIniG.ReadString('gb','G_B_C_K', 'Клиент');
 frmNewApplication.eFirstNameClient.TextHint:=langIniG.ReadString('hint','H_B_F_N_C', 'Имя ');
 frmNewApplication.eTwoNameClient.TextHint:=langIniG.ReadString('hint','H_B_T_N_C', 'Фамилия ');
 frmNewApplication.eLastNameClient.TextHint:=langIniG.ReadString('hint','H_B_L_N_C', 'Отчество');
 frmNewApplication.eAdresClient.TextHint:=langIniG.ReadString('hint','H_B_A_C', 'Адрес');
 frmNewApplication.eTelephonClient.TextHint:=langIniG.ReadString('hint','E_T_C', 'Телефон');
 frmNewApplication.lDescriptionOfTheProblem.Caption:=langIniG.ReadString('label','L_D_O_T_P', 'Описание проблемы');
 frmNewApplication.lDateOROTMaster.Caption:=langIniG.ReadString('label','L_D_O_R_O_T_M', 'Дата приема мастера');
 frmNewApplication.lTimeOROTMaster.Caption:=langIniG.ReadString('label','L_T_O_R_O_T_M', 'Время приема мастера');
 frmNewApplication.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmNewApplication.bOk.Hint:=langIniG.ReadString('hint','B_O ', 'Принять');

 //форма frmPriceList
 frmPriceList.Caption:=langIniG.ReadString('FrmCap','F_P_L', 'Прайс лист');
 frmPriceList.bNew.Hint:=langIniG.ReadString('hint','H_B_N ', 'Добавить');
 frmPriceList.bEdit.Hint:=langIniG.ReadString('hint','B_E_U', 'Редактировать');
 frmPriceList.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmPriceList.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmAddPriceList
 frmAddPriceList.Caption:=langIniG.ReadString('FrmCap','F_A_D_D_P_L', 'Добавить услугу');
 frmAddPriceList.eNamePrice.TextHint:=langIniG.ReadString('hint','H_E_N_P', 'Имя услуги');
 frmAddPriceList.ePrice.TextHint:=langIniG.ReadString('hint','B_P_W_R', 'Цена');
 frmAddPriceList.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmAddPriceList.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');

 //форма frmServiceComp
 frmServiceComp.Caption:=langIniG.ReadString('FrmCap','F_H_M_L_A_W', 'Затраченные материалы или иные виды работ');
 frmServiceComp.ePriceWorkOff.Hint:=langIniG.ReadString('hint','B_P_W_R', 'Цена');
 frmServiceComp.eKlVoWorkOff.Hint:=langIniG.ReadString('hint','B_K_L_V', 'Колличество');
 frmServiceComp.bSPh.Hint:=langIniG.ReadString('hint','B_S_P_H', 'В свобоной форме');
 frmServiceComp.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmServiceComp.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');

 //форма frmTypeDoc
 frmTypeDoc.Caption:=langIniG.ReadString('FrmCap','F_T_D', 'Тип документа');
 frmTypeDoc.bNew.Hint:=langIniG.ReadString('hint','H_B_N', 'Добавить');
 frmTypeDoc.bEdit.Hint:=langIniG.ReadString('hint','B_E', 'Редактировать');
 frmTypeDoc.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmTypeDoc.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmAddTypeDoc
 frmAddTypeDoc.Caption:=langIniG.ReadString('FrmCap','F_T_D', 'Тип документа');
 frmAddTypeDoc.eTypeDoc.TextHint:=langIniG.ReadString('hint','H_E_T_D_N_N', 'Укажите тип документа');
 frmAddTypeDoc.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmAddTypeDoc.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');

 //форма frmComDoc
 frmComDoc.Caption:=langIniG.ReadString('FrmCap','F_C_D', 'Документы');
 frmComDoc.gbNewDocument.Caption:=langIniG.ReadString('gb','G_B_N_D', 'Новый документ');
 frmComDoc.eNameDoc.TextHint:=langIniG.ReadString('hint','H_E_N_N_D', 'Укажите имя документа');
 frmComDoc.eSearchNameDoc.TextHint:=langIniG.ReadString('hint','H_E_N_D', 'Имя документа');
 frmComDoc.eSearchDesDoc.TextHint:=langIniG.ReadString('hint','H_E_N_D_D', 'Описание документа');
 frmComDoc.bOpenListTypeDoc.Hint:=langIniG.ReadString('hint','B_A_L_L', 'Список');
 frmComDoc.lTipyDoc.Caption:=langIniG.ReadString('label','L_T_P_D', 'Тип документа');
 frmComDoc.bSave.Hint:=langIniG.ReadString('hint','B_S', 'Cохранить');
 frmComDoc.bSearch.Hint:=langIniG.ReadString('hint','B_S_C_H', 'Поиск');
 frmComDoc.bDelete.Hint:=langIniG.ReadString('hint','B_D', 'Удалить');
 frmComDoc.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 frmComDoc.bPrint.Hint:=langIniG.ReadString('hint','H_B_C_W_P', 'Печать');
 frmComDoc.gbSearchDoc.Caption:=langIniG.ReadString('hint','B_S_C_H', 'Поиск');

 //форма frmreports
 frmreports.Caption:=langIniG.ReadString('FrmCap','F_R_M_R', 'Настройки отчета');
 frmreports.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmreports.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmEditStatus
 frmEditStatus.Caption:=langIniG.ReadString('FrmCap','F_R_M_E_S_T', 'Редактировать');
 frmEditStatus.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmEditStatus.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmComServiceList
 frmComServiceList.Caption:=langIniG.ReadString('FrmCap','F_R_M_C_S_L', 'Карточка оборудования компании');
 frmComServiceList.lNameTypeOfEquipment.Caption:=langIniG.ReadString('label','L_N_T_O_E_T', 'Тип оборудования ');
 frmComServiceList.lNameManufacturer.Caption:=langIniG.ReadString('label','L_N_M_F_R', 'Бренд');
 frmComServiceList.lModel.Caption:=langIniG.ReadString('label','L_M', 'Модель');
 frmComServiceList.lSerialNamber.Caption:=langIniG.ReadString('label','L_S_N', 'Серийный номер');
 frmComServiceList.lEquipment.Caption:=langIniG.ReadString('label','L_E_P_M', 'Комплектация ');
 frmComServiceList.lDescriptionATCsWords.Caption:=langIniG.ReadString('label','L_D_A_W', 'Неисправность со слов клиента');
 frmComServiceList.lStatus.Caption:=langIniG.ReadString('label','L_S', 'Статус оборудования ');
 frmComServiceList.lExternalStatus.Caption:=langIniG.ReadString('label','L_E_L_S', 'Описание внешнего вида');
 frmComServiceList.lDiagnostics.Caption:=langIniG.ReadString('label','L_R_D_S_C', 'Результаты диагностики');
 frmComServiceList.lServiseList.Caption:=langIniG.ReadString('label','L_S_S_L_T', 'Список выполненых работ');
 frmComServiceList.lAdres.Caption:=langIniG.ReadString('label','L_S_T_R', 'Улица');
 frmComServiceList.lHouse.Caption:=langIniG.ReadString('label','L_H_U_S', 'Дом');
 frmComServiceList.lOffice.Caption:=langIniG.ReadString('label','L_O_F_F', 'Офис');
 frmComServiceList.lTel.Caption:=langIniG.ReadString('label','L_T_E_L_P', 'Телефон');
 frmComServiceList.gbCompany.Caption:=langIniG.ReadString('gb','G_B_C', 'Компания ');
 frmComServiceList.cbOnlD.Caption:=langIniG.ReadString('cb','C_B_O_I_D', 'Только диагностика');
 frmComServiceList.cbWarra.Caption:=langIniG.ReadString('cb','C_B_W', 'Гарантийный');
 frmComServiceList.bPriceOff.Caption:=langIniG.ReadString('button','B_T_O_N_P_O', 'Оплатить');
 frmComServiceList.bPrinter.Caption:=langIniG.ReadString('button','B_T_O_N_W', 'Гарантия ');
 frmComServiceList.bPrintExid.Caption:=langIniG.ReadString('button','B_T_O_N_A_V_R', 'Акт вып. работ');
 frmComServiceList.bPrintDiagnostic.Caption:=langIniG.ReadString('button','B_T_O_N_P_D', 'Акт диагностики');
 frmComServiceList.bPrinterReportSeting.Hint:=langIniG.ReadString('hint','H_B_N_R_O', 'Настройки отчета');
 frmComServiceList.bPrintExidReportSeting.Hint:=langIniG.ReadString('hint','H_B_N_R_O', 'Настройки отчета');
 frmComServiceList.bPrintDiagnosticReportSeting.Hint:=langIniG.ReadString('hint','H_B_N_R_O', 'Настройки отчета');
 frmComServiceList.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmClientServiсeList
 frmClientServiсeList.Caption:=langIniG.ReadString('FrmCap','F_R_M_C_K_L', 'Карточка клиентского оборудования ');
 frmClientServiсeList.lAdresClient.Caption:=langIniG.ReadString('label','L_F_C_S_L', 'Адрес');
 frmClientServiсeList.lPasport.Caption:=langIniG.ReadString('label','L_P_S_S_P', 'Паспорт');
 frmClientServiсeList.lTel.Caption:=langIniG.ReadString('label','L_P_H', 'Тел:');
 frmClientServiсeList.lNameTypeOfEquipment.Caption:=langIniG.ReadString('label','L_N_T_O_E_T', 'Тип оборудования ');
 frmClientServiсeList.lNameManufacturer.Caption:=langIniG.ReadString('label','L_N_M_F_R', 'Бренд');
 frmClientServiсeList.lModel.Caption:=langIniG.ReadString('label','L_M', 'Модель');
 frmClientServiсeList.lSerialNamber.Caption:=langIniG.ReadString('label','L_S_N', 'Серийный номер');
 frmClientServiсeList.lEquipment.Caption:=langIniG.ReadString('label','L_E_P_M', 'Комплектация ');
 frmClientServiсeList.lDescriptionATCsWords.Caption:=langIniG.ReadString('label','L_D_A_W', 'Неисправность со слов клиента');
 frmClientServiсeList.lStatus.Caption:=langIniG.ReadString('label','L_S', 'Статус оборудования ');
 frmClientServiсeList.lExternalStatus.Caption:=langIniG.ReadString('label','L_E_L_S', 'Описание внешнего вида');
 frmClientServiсeList.lDiagnostics.Caption:=langIniG.ReadString('label','L_R_D_S_C', 'Результаты диагностики');
 frmClientServiсeList.lServiseList.Caption:=langIniG.ReadString('label','L_S_S_L_T', 'Список выполненых работ');
 frmClientServiсeList.gbNameCli.Caption:=langIniG.ReadString('gb','G_B_C_K', 'Клиент');
 frmClientServiсeList.cbOnlD.Caption:=langIniG.ReadString('cb','C_B_O_I_D', 'Только диагностика');
 frmClientServiсeList.cbWarra.Caption:=langIniG.ReadString('cb','C_B_W', 'Гарантийный');
 frmClientServiсeList.bPriceOff.Caption:=langIniG.ReadString('button','B_T_O_N_P_O', 'Оплатить');
 frmClientServiсeList.bPrinter.Caption:=langIniG.ReadString('button','B_T_O_N_W', 'Гарантия ');
 frmClientServiсeList.bPrintExid.Caption:=langIniG.ReadString('button','B_T_O_N_A_V_R', 'Акт вып. работ');
 frmClientServiсeList.bPrintDiagnostic.Caption:=langIniG.ReadString('button','B_T_O_N_P_D', 'Акт диагностики');
 frmClientServiсeList.bPrinterReportSeting.Hint:=langIniG.ReadString('hint','H_B_N_R_O', 'Настройки отчета');
 frmClientServiсeList.bPrintExidReportSeting.Hint:=langIniG.ReadString('hint','H_B_N_R_O', 'Настройки отчета');
 frmClientServiсeList.bPrintDiagnosticReportSeting.Hint:=langIniG.ReadString('hint','H_B_N_R_O', 'Настройки отчета');
 frmClientServiсeList.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmAppl
 frmAppl.Caption:=langIniG.ReadString('FrmCap','F_R_T_A_P', 'Карточка заявки');
 frmAppl.lpr.Caption:=langIniG.ReadString('label','L_D_O_T_P', 'Описание проблемы');
 frmAppl.lDateApplcation.Caption:=langIniG.ReadString('label','L_D_O_R_O_T_M', 'Дата приема мастера');
 frmAppl.lTimeApplication.Caption:=langIniG.ReadString('label','L_T_O_R_O_T_M', 'Время приема мастера');
 frmAppl.lServiseList.Caption:=langIniG.ReadString('label','L_S_S_L_T', 'Список выполненых работ');
 frmAppl.bPriceOn.Caption:=langIniG.ReadString('button','B_T_O_N_P_O', 'Оплатить');
 frmAppl.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 frmAppl.lAdr.Caption:=langIniG.ReadString('label','L_F_C_S_L', 'Адрес');
 frmAppl.lTel.Caption:=langIniG.ReadString('label','L_T_E_L_P ', 'Телефон');
 //форма frmb
 frmb.Caption:=langIniG.ReadString('FrmCap','F_R_O_O_M', 'Оплата');
 frmb.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 frmb.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 //форма frmallstatus
 frmallstatus.Caption:=langIniG.ReadString('FrmCap','F_R_S_Q', 'Статус оборудования ');
 frmallstatus.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 // форма frmMask
 frmMask.Caption:=langIniG.ReadString('FrmCap','F_R_M_T', 'Маска');
 frmMask.lMask.Caption:=langIniG.ReadString('label','L_H_C_M_K', 'Укажите маску');
 frmMask.lexample.Caption:=langIniG.ReadString('label','L_H_C_L_E', 'Пример:');
 frmMask.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 // форма frmReg
 frmReg.Caption:=langIniG.ReadString('FrmCap','F_R_M_R_R', 'Регистрация ');
 frmReg.gbMail.Caption:=langIniG.ReadString('gb','G_B_V_E_A', 'Введите электронный адрес');
 frmReg.gbKey.Caption:=langIniG.ReadString('gb','G_B_K_L', 'Введите лицензионный ключ');
 frmReg.bMail.Caption:=langIniG.ReadString('button','B_O_T_M_K', 'Выслать ключ');
 frmReg.bKey.Caption:=langIniG.ReadString('button','B_O_T_A_K', 'Активировать');
 frmReg.bBuy.Caption:=langIniG.ReadString('button','B_B_B_K', 'Купить');
 frmReg.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');

 // форма frmAbout
 frmAbout.Caption:=langIniG.ReadString('FrmCap','F_R_M_A_B', 'О программе');

 // форма frmLServerOff
 frmLServerOff.Caption:=langIniG.ReadString('FrmCap','F_R_S_O_F_F', 'Выход из LiteServer');
 frmLServerOff.lLiteEx.Caption:=langIniG.ReadString('label','lLiteEx\line1', 'Вы действительно хотите выйти из LiteServer? ')+ #13 + #10
 +langIniG.ReadString('label','lLiteEx\line2', '');
 frmLServerOff.bExid.Caption:=langIniG.ReadString('hint','B_C_E_M_E', 'Выйти');
 frmLServerOff.bCancel.Caption:=langIniG.ReadString('hint','B_C', 'Отменить');

  // импорт/экспорт данных
 frmdbCoreImport.Caption := langIniG.ReadString('FrmCap','F_R_M_I_M_P', 'Импорт');
 frmdbCoreImport.gbFileAndSettings.Caption := langIniG.ReadString('frmdbCore','G_B_F_A_S', '1. Файл и настройка');
 frmdbCoreImport.lbFile.Caption := langIniG.ReadString('frmdbCore','L_B_F_C_S_V', 'CSV Файл');
 frmdbCoreImport.lbColumnsSeparator.Caption := langIniG.ReadString('frmdbCore','L_B_C_S', 'Разделитель полей');
 frmdbCoreImport.lbEncoding.Caption := langIniG.ReadString('frmdbCore','L_B_E_C', 'Кодировка');
 frmdbCoreImport.chbColumnNamesRow.Caption := langIniG.ReadString('frmdbCore','C_H_C_N_R', 'Первая строка - название полей');
 frmdbCoreImport.lbDateFormat.Caption := langIniG.ReadString('frmdbCore','L_B_D_F', 'Фомат даты');
 frmdbCoreImport.cbTimeFormat.Items[0] := langIniG.ReadString('frmdbCore','C_B_D_F', 'SQL Формат');
 frmdbCoreImport.cbTimeFormat.Items[1] := langIniG.ReadString('frmdbCore','C_B_D_F_R', 'Региональный формат');
 frmdbCoreImport.cbDateFormat.Items[0] := langIniG.ReadString('frmdbCore','C_B_D_F', 'SQL Формат');
 frmdbCoreImport.cbDateFormat.Items[1] := langIniG.ReadString('frmdbCore','C_B_D_F_R', 'Региональный формат');
 frmdbCoreImport.lbTimeFormat.Caption := langIniG.ReadString('frmdbCore','L_B_T_F', 'Фомат времени');
 frmdbCoreImport.gbData.Caption := langIniG.ReadString('frmdbCore','G_B_D ', '2. Данные');
 frmdbCoreImport.lbImportTable.Caption := langIniG.ReadString('frmdbCore','L_B_I_T', 'Таблица для импорта');
 frmdbCoreImport.lbFieldsAndColumns.Caption := langIniG.ReadString('frmdbCore','L_B_F_A_C', 'Присвойте колонкам поля базы данных');
 frmdbCoreImport.lbSqliteWarning.Caption := langIniG.ReadString('frmdbCore','L_B_S_W', 'Сделайте резервную копию базы данных.'+#13+'База данных может быть повреждена если компьютер будет выключен во время импорта данных.');
 frmdbCoreImport.bImport.Caption := langIniG.ReadString('frmdbCore','B_I', 'Импортировать');
 frmdbCoreExport.Caption := langIniG.ReadString('FrmCap','F_R_M_C_A_P_R', 'Экспорт');
 TdbStringGridEx(frmdbCoreExport.gridTables).Columns[0].Header.Caption := langIniG.ReadString('frmdbCore','T_D_B_S_G_E', 'Таблицы');
 TdbStringGridEx(frmdbCoreExport.gridFields).Columns[1].Header.Caption := langIniG.ReadString('frmdbCore','T_D_B_S_G_P', 'Поля ');
 frmdbCoreExport.lbSettings.Caption := langIniG.ReadString('frmdbCore','L_B_S', 'Настройка');
 frmdbCoreExport.chbColumnNamesRow.Caption := langIniG.ReadString('frmdbCore','C_H_C_N_R', 'Первая строка - название полей');
 frmdbCoreExport.lbColumnsSeparator.Caption := langIniG.ReadString('frmdbCore','L_B_C_S', 'Разделитель полей');
 frmdbCoreExport.lbEndOfLine.Caption := langIniG.ReadString('frmdbCore','L_B_E_O_L', 'Конец строки');
 frmdbCoreExport.chbEnclosing.Caption := langIniG.ReadString('frmdbCore','C_H_E_L', 'Обрамлять поля двойными кавычками');
 frmdbCoreExport.lbSQLFilter.Caption := langIniG.ReadString('frmdbCore','L_B_S_Q_L_F', 'SQL фильтр (WHERE условия)');
 frmdbCoreExport.bExport.Caption := langIniG.ReadString('frmdbCore','B_E', 'Экспортировать в CSV');
 frmdbCoreImportProgress.Caption := langIniG.ReadString('frmdbCore','P_C', 'Импорт...');
 frmdbCoreImportProgress.bMore.Caption := langIniG.ReadString('frmdbCore','P_P_M', 'Подробнее');
 frmdbCoreImportProgress.bCancel.Caption := langIniG.ReadString('frmdbCore','P_C_L', 'Отменить');
 Translate('Export', langIniG.ReadString('frmdbCore','E_E', 'Экспорт'));
 Translate('Import', langIniG.ReadString('frmdbCore','I_I', 'Импорт'));
 Translate('Records_exported', langIniG.ReadString('frmdbCore','Records_exported', 'Записи экспортированы'));
 Translate('Records_imported', langIniG.ReadString('frmdbCore','Records_imported', 'Записи импортированы'));
 Translate('Export_is_not_configured_correctly', langIniG.ReadString('frmdbCore','Export_is_not_configured_correctly', 'Экспорт настроен не правильно.') );
 Translate('Import_is_not_configured_correctly', langIniG.ReadString('frmdbCore','Import_is_not_configured_correctly', 'Импорт настроен не правильно.') );

 // форма frmNewID
 frmNewID.Caption:=langIniG.ReadString('FrmCap','F_R_M_N_I_D', 'Создать IDService');
 frmNewID.lLogin.Caption:=langIniG.ReadString('label','L_L', 'Логин');
 frmNewID.lPass.Caption:=langIniG.ReadString('label','L_P', 'Пароль');
 frmNewID.bNew.Caption:=langIniG.ReadString('button','B_B_N_I', 'Создать');
 // форма frmReqID
 frmReqID.Caption:=langIniG.ReadString('FrmCap','F_R_M_R_I_D', 'Напомнить');
 frmReqID.bOk.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 frmReqID.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 // форма frmNewUser
 frmNewUser.Caption:=langIniG.ReadString('FrmCap','F_R_M_R_N_U', 'Новый пользователь');
 frmNewUser.eLogin.TextHint:=langIniG.ReadString('hint','H_E_L_N_U', 'Логин');
 frmNewUser.ePassword.TextHint:=langIniG.ReadString('hint','H_E_N_U_P', 'Пароль');
 frmNewUser.eFirstName.TextHint:=langIniG.ReadString('hint','H_B_F_N_C', 'Имя ');
 frmNewUser.eLastName.TextHint:=langIniG.ReadString('hint','H_B_T_N_C', 'Фамилия ');
 frmNewUser.bNewUser.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 frmNewUser.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 // форма frmEditUser
 frmEditUser.Caption:=langIniG.ReadString('FrmCap','F_R_M_R_E_U', 'Редактировать пользователя ');
 frmEditUser.eLogin.TextHint:=langIniG.ReadString('hint','H_E_L_N_U', 'Логин');
 frmEditUser.ePassword.TextHint:=langIniG.ReadString('hint','H_E_N_U_P', 'Пароль');
 frmEditUser.eFirstName.TextHint:=langIniG.ReadString('hint','H_B_F_N_C', 'Имя ');
 frmEditUser.eLastName.TextHint:=langIniG.ReadString('hint','H_B_T_N_C', 'Фамилия ');
 frmEditUser.bEditUser.Hint:=langIniG.ReadString('hint','B_O', 'Принять');
 frmEditUser.bCancel.Hint:=langIniG.ReadString('hint','B_C', 'Отменить');
 
 //форма frmAddProduct
 frmAddProduct.Caption:= langIniG.ReadString('FrmCap','F_R_A_D_D_P', 'Новый товар');
 frmAddProduct.lCode.Caption:= langIniG.ReadString('label','L_C', 'Штрих код');
 frmAddProduct.lName.Caption:= langIniG.ReadString('label','L_N', 'Имя товара');
 frmAddProduct.lQuantity.Caption:= langIniG.ReadString('label','L_Q_A', 'Колличество');
 frmAddProduct.lPrice.Caption:= langIniG.ReadString('label','L_L_P_L', 'Цена');
 frmAddProduct.bAdd.Caption:= langIniG.ReadString('button','B_A_P', 'Добавить товар');
 frmAddProduct.bCancel.Caption:= langIniG.ReadString('button','B_C', 'Отменить');

 //форма frmEditProduct
 frmEditProduct.Caption:= langIniG.ReadString('FrmCap','F_R_A_D_E_P', 'Новое поступление');
 frmEditProduct.lCode.Caption:= langIniG.ReadString('label','L_C', 'Штрих код');
 frmEditProduct.lName.Caption:= langIniG.ReadString('label','L_N', 'Имя товара');
 frmEditProduct.lQuantity.Caption:= langIniG.ReadString('label','L_Q_A', 'Колличество');
 frmEditProduct.bSave.Caption:= langIniG.ReadString('button','B_S_A_L', 'Cохранить');
 frmEditProduct.bCancel.Caption:= langIniG.ReadString('button','B_C', 'Отменить');

 //форма frmAllProduct
 frmAllProduct.Caption:= langIniG.ReadString('FrmCap','F_R_A_L_L_P', 'Приход');
 frmAllProduct.bNew.hint:= langIniG.ReadString('hint','H_B_N', 'Добавить');
 frmAllProduct.bEdit.hint:= langIniG.ReadString('hint','B_E', 'Редактировать');
 frmAllProduct.bDelete.hint:= langIniG.ReadString('hint','B_D', 'Удалить');
 frmAllProduct.bOk.hint:= langIniG.ReadString('hint','B_O', 'Принять');

 //форма frmReasonForCancellation
 frmReasonForCancellation.Caption:= langIniG.ReadString('FrmCap','R_F_C', 'Списание товара');
 frmReasonForCancellation.lCode.Caption:= langIniG.ReadString('label','L_C', 'Штрих код');
 frmReasonForCancellation.lName.Caption:= langIniG.ReadString('label','L_N', 'Имя товара');
 frmReasonForCancellation.lQuantity.Caption:= langIniG.ReadString('label','L_Q_A', 'Колличество');
 frmReasonForCancellation.lReason.Caption:= langIniG.ReadString('label','L_R', 'Причина');
 frmReasonForCancellation.bWriteOff.Caption:= langIniG.ReadString('button','B_W_O', 'Списать');
 frmReasonForCancellation.bCancel.Caption:= langIniG.ReadString('button','B_C', 'Отменить');

 //форма frmReasonForFReturn
 frmReasonForFReturn.Caption:= langIniG.ReadString('FrmCap','R_F_R', 'Возврат товара');
 frmReasonForFReturn.lCode.Caption:= langIniG.ReadString('label','L_C', 'Штрих код');
 frmReasonForFReturn.lName.Caption:= langIniG.ReadString('label','L_N', 'Имя товара');
 frmReasonForFReturn.lQuantity.Caption:= langIniG.ReadString('label','L_Q_A', 'Колличество');
 frmReasonForFReturn.lReason.Caption:= langIniG.ReadString('label','L_R', 'Причина');
 frmReasonForFReturn.bWriteOff.Caption:= langIniG.ReadString('button','B_W_O_R', 'Вернуть');
 frmReasonForFReturn.bCancel.Caption:= langIniG.ReadString('button','B_C', 'Отменить');

 //форма frmReportShop
 frmReportShop.Caption:= langIniG.ReadString('FrmCap','R_S', 'Отчеты магазина');
 frmReportShop.lTypeReport.Caption:= langIniG.ReadString('label','L_T_R', 'Выбирете тип отчета');
 frmReportShop.lDate.Caption:= langIniG.ReadString('label','L_D_D', 'Укажите  дату');
 frmReportShop.lSettingReporpt.Caption:= langIniG.ReadString('label','L_S_R', 'Настройте отчет');
 frmReportShop.lPrintReport.Caption:= langIniG.ReadString('label','L_P_R', 'Распечатайте отчет');
 frmReportShop.lMoveExel.Caption:= langIniG.ReadString('label','L_M_E', 'Передайте отчет в Exel');
 frmReportShop.lFrom.Caption:= langIniG.ReadString('label','L_F', 'ОТ');
 frmReportShop.lBefore.Caption:= langIniG.ReadString('label','L_B', 'ДО');
 frmReportShop.bQuantity.Caption:= langIniG.ReadString('button','B_Q', 'Остаток');
 frmReportShop.bin.Caption:= langIniG.ReadString('button','B_I', 'Приход');
 frmReportShop.bOut.Caption:= langIniG.ReadString('button','B_O', 'Расход');
 frmReportShop.bBay.Caption:= langIniG.ReadString('button','B_B', 'Продажа');
 frmReportShop.bOutCancel.Caption:= langIniG.ReadString('button','B_O_C', 'Списание');
 frmReportShop.bInBak.Caption:= langIniG.ReadString('button','B_I_B', 'Возврат');
 frmReportShop.bSetting.Caption:= langIniG.ReadString('button','B_S', 'Настройки');
 frmReportShop.bPrint.Caption:= langIniG.ReadString('button','B_P', 'Печать');
 frmReportShop.bPrintOut.Caption:= langIniG.ReadString('button','B_P', 'Печать');
 frmReportShop.bPrintQuantity.Caption:= langIniG.ReadString('button','B_P', 'Печать');
 frmReportShop.bExel.Caption:= langIniG.ReadString('button','B_E', 'Exel');
 frmReportShop.bOpenQuantity.hint:= langIniG.ReadString('B_hint','B_O_R', 'Выбрать файл отчета');
 frmReportShop.bOpenIn.hint:= langIniG.ReadString('hint','B_O_R', 'Выбрать файл отчета');
 frmReportShop.bOpenOut.hint:= langIniG.ReadString('hint','B_O_R', 'Выбрать файл отчета');
 frmReportShop.bOpenBay.hint:= langIniG.ReadString('hint','B_O_R', 'Выбрать файл отчета');
 frmReportShop.bOpenOutCancel.hint:= langIniG.ReadString('hint','B_O_R', 'Выбрать файл отчета');
 frmReportShop.bOpenbInBak.hint:= langIniG.ReadString('hint','B_O_R', 'Выбрать файл отчета');
 frmReportShop.bEditQuantity.hint:= langIniG.ReadString('hint','B_E_R', 'Редактировать отчет');
 frmReportShop.bEditIn.hint:= langIniG.ReadString('hint','B_E_R', 'Редактировать отчет');
 frmReportShop.bEditOut.hint:= langIniG.ReadString('hint','B_E_R', 'Редактировать отчет');
 frmReportShop.bEditBay.hint:= langIniG.ReadString('hint','B_E_R', 'Редактировать отчет');
 frmReportShop.bEditOutCancel.hint:= langIniG.ReadString('hint','B_E_R', 'Редактировать отчет');
 frmReportShop.bEditbInBak.hint:= langIniG.ReadString('hint','B_E_R', 'Редактировать отчет');
 frmReportShop.bNewQuantity.hint:= langIniG.ReadString('hint','B_N_R', 'Создать новый отчет');
 frmReportShop.bNewIn.hint:= langIniG.ReadString('hint','B_N_R', 'Создать новый отчет');
 frmReportShop.bNewOut.hint:= langIniG.ReadString('hint','B_N_R', 'Создать новый отчет');
 frmReportShop.bNewBay.hint:= langIniG.ReadString('hint','B_N_R', 'Создать новый отчет');
 frmReportShop.bNewOutCancel.hint:= langIniG.ReadString('hint','B_N_R', 'Создать новый отчет');
 frmReportShop.bNewbInBak.hint:= langIniG.ReadString('hint','B_N_R', 'Создать новый отчет');

 //форма frmShop
 frmShop.Caption:= langIniG.ReadString('FrmCap','F_S', 'Касса');
 frmShop.lUseSearchProduct.Caption:= langIniG.ReadString('label','L_U_S_P_S', 'Используйте поисковую '
 +'строку для поиска товара в ручную или примените сканер штрих кода');
 frmShop.bAdd.Caption:= langIniG.ReadString('button','B_A_P', 'Добавить товар');
 frmShop.bDelete.Caption:= langIniG.ReadString('button','B_D_P', 'Удалить');
 frmShop.bCleaner.Caption:= langIniG.ReadString('button','B_C_P', 'Очистить');
 frmShop.bBay.Caption:= langIniG.ReadString('button','B_B_P', 'Покупка');
 frmShop.bCancel.Caption:= langIniG.ReadString('button','B_C', 'Отменить');
  if swch = 1 then begin
     if ServicetgList = 0 then
         begin
            s := langIniG.ReadString('col','col0', 'ID');
            s := s + ','+ langIniG.ReadString('col','col1', 'Оборудование');
            s := s + ','+ langIniG.ReadString('col','col2', 'Производитель');
            s := s + ','+ langIniG.ReadString('col','col3', 'Модель');
            s := s + ','+ langIniG.ReadString('col','col4', 'Серийный номер');
            s := s + ','+ langIniG.ReadString('col','col5', 'Дата приёма');
            s := s + ','+ langIniG.ReadString('col','col6', 'Статус');
            s := s + ','+ langIniG.ReadString('col','col7', 'Гарантийный');
            s := s + ','+ langIniG.ReadString('col','col8', 'Только диагностика');
            s := s + ','+ langIniG.ReadString('col','col9', 'СМС отправленно');
            frmServiceCen.bSearch.dbListFieldsNames := s;
         end;
          if ServicetgList = 1 then begin
             s := langIniG.ReadString('col','col10', 'Дата заявки');
             s := s + ','+langIniG.ReadString('col','col11', 'Имя ');
             s := s + ','+langIniG.ReadString('col','col12', 'Фамилия ');
             s := s + ','+langIniG.ReadString('col','col13', 'Телефон');
             s := s + ','+langIniG.ReadString('col','col14', 'Дата ожидания ');
             s := s + ','+langIniG.ReadString('col','col15', 'Время ожидания ');
             s := s + ','+langIniG.ReadString('col','col16', 'Заявку принял');
             s := s + ','+langIniG.ReadString('col','col17', 'Статус заявки');
             frmServiceCen.bListApplication.dbListFieldsNames := s;
         end;
         if Servicetgmaster = 0 then begin
             frmMasterWork.tgListServise.Columns[0].Header.Caption:= langIniG.ReadString('col','col0', 'ID');
             frmMasterWork.tgListServise.Columns[1].Header.Caption:= langIniG.ReadString('col','col3', 'Модель');
             frmMasterWork.tgListServise.Columns[2].Header.Caption:= langIniG.ReadString('col','col4', 'Серийный номер');
             frmMasterWork.tgListServise.Columns[3].Header.Caption:= langIniG.ReadString('col','col6', 'Статус');
         end;
         if Servicetgmaster = 1 then begin
             frmMasterWork.tgListServise.Columns[0].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
             frmMasterWork.tgListServise.Columns[1].Header.Caption:= langIniG.ReadString('col','col12', 'Фамилия ');
             frmMasterWork.tgListServise.Columns[2].Header.Caption:= langIniG.ReadString('col','col13', 'Телефон');
         end;
         if frmAdOnOF = 1 then begin
             frmAdmin.tgUsers.Columns[0].Header.Caption:= langIniG.ReadString('col','col18', 'Логин');
             frmAdmin.tgUsers.Columns[1].Header.Caption:= langIniG.ReadString('col','col19', 'Пароль');
             frmAdmin.tgUsers.Columns[2].Header.Caption:= langIniG.ReadString('col','col20', 'Права');
             frmAdmin.tgUsers.Columns[3].Header.Caption:= langIniG.ReadString('col','col21', 'Авторизация без пароля ');
             frmAdmin.tgUserApp.Columns[0].Header.Caption:= langIniG.ReadString('col','col0', 'ID');
             frmAdmin.tgUserApp.Columns[1].Header.Caption:= langIniG.ReadString('col','col18', 'Логин');
             frmAdmin.tgUserApp.Columns[2].Header.Caption:= langIniG.ReadString('col','col19', 'Пароль');
             frmAdmin.tgUserApp.Columns[3].Header.Caption:= langIniG.ReadString('col','col11', 'Имя ');
             frmAdmin.tgUserApp.Columns[4].Header.Caption:= langIniG.ReadString('col','col12', 'Фамилия ');
             frmAdmin.tgLog.Columns[0].Header.Caption:= langIniG.ReadString('col','col22', 'Действие');
             frmAdmin.tgLog.Columns[1].Header.Caption:= langIniG.ReadString('col','col23', 'Время ');
             frmAdmin.tgUsersl.Columns[0].Header.Caption:= langIniG.ReadString('col','col18', 'Логин');
         end;
     end;

  frmServiceCen.lMenu7.Caption:=frmServiceCen.bsmsout.Caption;
  frmServiceCen.lMenu6.Caption:=frmServiceCen.bDoc.Caption;
  frmServiceCen.lMenu5.Caption:=frmServiceCen.bPriceList.Caption;
  frmServiceCen.lMenu4.Caption:=frmServiceCen.bShop.Caption;
  frmServiceCen.lMenu3.Caption:=frmServiceCen.bNewApplication.Caption;
  frmServiceCen.lMenu2.Caption:=frmServiceCen.bServiceWork.Caption;
  frmServiceCen.lMenu1.Caption:=frmServiceCen.bCompanyService.Caption;

  frmMasterWork.lMenu1.Caption:=frmMasterWork.bDiagnostic.Caption;
  frmMasterWork.lMenu2.Caption:=frmMasterWork.bWorkOff.Caption;
  frmMasterWork.lMenu3.Caption:=frmMasterWork.bStatus.Caption;
  frmMasterWork.lMenu4.Caption:=frmMasterWork.bEq.Caption;
  frmMasterWork.lMenu5.Caption:=frmMasterWork.bComp.Caption;
  frmMasterWork.lMenu6.Caption:=frmMasterWork.bStor.Caption;
end;




//***********************************************************************************************
// безопастность*********************************************************************************
//***********************************************************************************************

procedure reegedit (Action:String);
 var
  reg : TRegistry;
begin
if Action='addAutorun' then  begin
    reg:= TRegistry.Create;
    reg.Access := KEY_ALL_ACCESS;
    reg.RootKey:= HKEY_CURRENT_USER;
    reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True);
    reg.WriteString('service', '"'+Application.ExeName+'"');
    reg.CloseKey;
    reg.Free;
  end;
if Action='deleteAutorun' then  begin
reg:= TRegistry.Create;
    reg.Access := KEY_ALL_ACCESS;
    reg.RootKey:= HKEY_CURRENT_USER;
    reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True);
    reg.DeleteValue('service');
    reg.CloseKey;
    reg.Free;
  end;
end;


// функция сравнения e-mail..
function CheckCSV(Str: string): boolean;
var
  sl: TStringList;
  p:string;
begin
  result := False;
  p:=DecryptRC5('476E68289553807E473EE519642111E9230FCD17CC12EBE4A6797'+
  '28ADC889CC9742FDBEEC5A4A0DE14687D9C2A40A154639859D09F6D6'+
  'F5ACF24D3BCEEAEC6B66E87BC67D4E73888EF6C34096DB12E6D34373'+
  'CDBCD4A10430000','passwordlistweb');
  sl := TStringList.Create;
  sl.Add('action=csv');
  sl.Add('password='+p);
  //загрузка текста csv файла. Укажите свой url адрес
  sl.text:=HTTPPOST('https://service-vv.ru/api/index.php',sl);
  // если e-mail есть в списке, вернуть правду
  if Pos(Str, sl.Text) > 0 then Result := True;
  sl.Free;
end;
// кнопка проверки e-mail адреса
procedure frmReg_bMail_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if CheckCSV(frmReg.eMail.Text) then mailKey else ShowMessage(langIniG.ReadString('message','00x39', 'Указан не верный адрес электронной почты!'));
end;

//процедура отправки ключа
procedure mailKey;
var
sl: TStringList;
mmMessage,s, key: string;
begin
   sl := TStringList.Create;
   mmMessage:=langIniG.ReadString('message','00x73', 'Здравствуйте! Ваш ключ авторизации: ')+' '+EncryptRC5(GetHardDiskSerial(ExtractFileDrive (paramstr(0))),'SibprogsistemKHMAONefteyugansk');
   s:=mailerphp(frmReg.eMail.Text , langIniG.ReadString('message','00x74', 'Ключ авторизации') , mmMessage );
   sl.text:=(s);
   if Pos('Data restored', sl.Text) > 0 then showmessage(langIniG.ReadString('message','00x41', '') +frmReg.eMail.Text );
   sl.Free;
end;

function mailerphp (mailTo,Subject,mailMessage: string ): string;
var
    slParam: TStringList;
    p:string;
begin
    p:='5588A3BBF5FA5947D333F74BC0B404A232CF258CE42E195441F8FA5A5546FCA48FCFF2AF40906'+
    'F4129D11AE5B6278D0C709AC9756464B6971CFA9DC219B05BB6564E439CAF9C817D9F398A676695D5'+
    '5650414474BA93915967E6F2AEECBA6AFCB295DB07BE1B9690ACAA74C97CC2CE977B71D26282CA4B4'+
    '934373CDBCD4A10430000';  // пороль страницы
    slParam := TStringList.Create;
    slParam.Add('password='+DecryptRC5(p,'passwordlistweb'));
    slParam.Add('e-mail='+mailTo);
    slParam.Add('Subject='+Subject);
    slParam.Add('mmessage='+mailMessage);

    result:= HTTPPost('http://service-vv.ru/mail/sendmail.php',slParam);
end;


//кнопка регистрации программы
procedure frmReg_bKey_OnClick (Sender: TObject; var Cancel: boolean);
var
    reg: TRegistry;
begin
 if EncryptRC5(GetHardDiskSerial(ExtractFileDrive (paramstr(0))),'SibprogsistemKHMAONefteyugansk') = frmReg.eKey.Text then
     begin
         reg := TRegistry.Create;
         reg.Access := KEY_ALL_ACCESS;
         reg.RootKey := HKEY_CURRENT_USER;
         reg.OpenKey('software\service', True);//+APP_NAME - имя вашей программы
         reg.WriteString('Key', frmReg.eKey.Text);
         reg.CloseKey;
         reg.Free;
         ShowMessage(langIniG.ReadString('message','00x42', 'Спасибо за регистрацию!'));
         registrKey;
     end else
     begin
         ShowMessage(langIniG.ReadString('message','00x43', 'Не верный ключ!'));
     end;

end;

// процедура проверки регистрации
procedure registrKey;
var
   reg: TRegistry;
   iDays: integer;
   sKey: string;
begin
     sKey := '';
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\service', True);//+APP_NAME - имя вашей программы
     if not reg.ValueExists('StartDate') then reg.WriteDate('StartDate', Now+20); // демо версия (Now+20)=20 дней
     iDays := Trunc(reg.ReadDate('StartDate')) - Trunc(Now); // time left days
     sKey := reg.ReadString('Key');

     reg.CloseKey;
     reg.Free;

     if sKey=EncryptRC5(GetHardDiskSerial(ExtractFileDrive (paramstr(0))),'SibprogsistemKHMAONefteyugansk') then
     begin
        // настройте на свой вкус, что если программа зарегистрированна
         frmReg.gbMail.Visible:=false;
         frmReg.gbKey.Visible:=false;
         frmReg.bBuy.Visible:=false;
         frmReg.lOk.Visible:=True;
         frmServiceCen.Caption:=langIniG.ReadString('FrmCap','F_S_C_C', 'Сервисный центр');
         //frmServiceCen.tgList.Width:=1100;
         //frmServiceCen.pAdds.Visible:=False;
         frmServiceCen.lBlock_1.Visible:=False;
         frmServiceCen.lBlock_2.Visible:=False;
         frmServiceCen.lBlock_3.Visible:=False;

     end else begin
        if iDays < 1 then
            begin
             // настройте на свой вкус, что если закончился пробный период
              ShowMessage(langIniG.ReadString('message','00x44', 'Пробный период завершен!'));
              //frmServiceCen.tgList.Width:=800;
              //frmServiceCen.pAdds.Visible:=True;
              frmServiceCen.lBlock_1.Visible:=True;
              frmServiceCen.lBlock_2.Visible:=True;
              frmServiceCen.lBlock_3.Visible:=True;
              webAdds;
            end else
              // настройте на свой вкус, что если программа не зарегестрированна
              frmServiceCen.caption:=frmServiceCen.caption+' '+ langIniG.ReadString('message','00x45', 'Осталось')+ ' ' + IntToStr(iDays) +' '+ langIniG.ReadString('message','00x46', 'дней');
       end;
end;

procedure webAdds;
begin

end;

//***********************************************************************************************
// -----------------------работа с веб---------------------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
// создание IDService****************************************************************************
//***********************************************************************************************
procedure frmNewID_bNew_OnClick (Sender: TObject; var Cancel: boolean);
var
 i:integer;
 slParam: TStringList;
 pass, qui:string;
 JSONObject: TJSONObject;
 JSONString: TJSONString;
begin
  if (Pos('@', frmNewID.eMail.Text) = 0) or (Pos('.', frmNewID.eMail.Text) = 0) then
    begin
        Cancel := True;
        frmNewID.eMail.SetFocus;
        ShowHint(frmNewID.eMail, langIniG.ReadString('message','00x47', 'Введите E-mail'));
    end else
  if ( frmNewID.eMail.Text=''  ) then ShowHint(frmNewID.eMail, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка дата приема мастера
  if ( frmNewID.eLogin.Text=''  ) then ShowHint(frmNewID.eLogin, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else  // проверка дата приема мастера
  if ( frmNewID.ePass.Text=''  ) then ShowHint(frmNewID.ePass, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else // проверка дата приема мастера
    try

      slParam := TStringList.Create;
      slParam.Add('action=newid');
      slParam.Add('password='+DecryptRC5('A2E52F2576EA9178B4A24F3D86C149533FEDA3E44C2909EC0805B8A242E08542E85B'+
      '5635C66D7DA07AF7B3C739D3BBD6D33549705E00F32401A16929DC0897705B274386B5566E8BB7FD66B3071D931DAC97F47B380'+
      'D5A9700000000','passwordnefteyuganskkhmaovladimircosmos'));
      slParam.Add('login='+frmNewID.eLogin.Text);
      slParam.Add('pass='+frmNewID.ePass.Text);
      slParam.Add('e-mail='+frmNewID.eMail.Text);

      slParam.text:= HTTPPost('https://service-vv.ru/api/index.php',slParam);

      JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(slParam.text));
      JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
       if Pos('-3', JSONString.Value) > 0  then ShowHint(frmNewID.eLogin,langIniG.ReadString('message','00x48', 'При создании аккаунта возникла ошибка!'))else
       if Pos('-2', JSONString.Value) > 0  then ShowHint(frmNewID.eLogin,langIniG.ReadString('message','00x49', 'Такой логин уже существует!'))else
       if Pos('-1', JSONString.Value) > 0  then ShowHint(frmNewID.eMail,langIniG.ReadString('message','00x50', 'Такой E-mail уже существует!'))else
       if Pos('0', JSONString.Value) > 0  then ShowHint(frmNewID.bNew,langIniG.ReadString('message','00x51', 'Ошибка передачи данных!'))else
       if Pos('1', JSONString.Value) > 0  then begin
           JSONString:=TJSONString(JSONObject.GetPairByName('message').JsonValue);
           frmAdmin.eloginst.Text:=frmNewID.eLogin.Text;
           frmAdmin.ePass.Text:=frmNewID.ePass.Text;
           frmAdmin.eIdService.Text:=JSONString.Value;
           frmNewID.Close;
          end;
    except
   end;
end;

//***********************************************************************************************
// напоминание IDService*************************************************************************
//***********************************************************************************************
procedure frmReqID_bOk_OnClick (Sender: TObject; var Cancel: boolean);
 var
    slParam: TStringList;
begin
 if (frmReqID.eEmail.Text=''  ) then ShowHint(frmReqID.eEmail, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
     try
      slParam := TStringList.Create;
      slParam.Add('action=remindid');
      slParam.Add('password='+DecryptRC5('A516194AB8434868375F9E94F614383A6CC13A21D302115537675B8E3'+
      '888B788652FA848BC4EB947312E333BAC47CCD38C7861ECF38E1EDBAC97F47B380D5A970000','passwordnefteyuganskkhmaovladimircosmos'));
      slParam.Add('e-mail='+frmReqID.eEmail.Text);

      slParam.text:= HTTPPost('https://service-vv.ru/api/index.php',slParam);

       if Pos('Wrong request for asterization', slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x52', 'Ошибка обработки запроса!'))else
       if Pos('data transfer error', slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x51', 'Ошибка передачи данных!'))else
       if Pos('specified address not found',  slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x53', 'Указанный E-mail адрес не обнаружен!'))else
       if Pos('an error occurred while trying to recover the data',  slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x54', 'при попытке восстановления данных произошла ошибка!'))else
       if Pos('Data restored',  slParam.text) > 0  then begin
       frmReqID.Close;
       Showmessage(langIniG.ReadString('message','00x55', 'Данные авторизации переданы на указанный Вами E-mail адрес!'))end;

    except
   end;
end;

//***********************************************************************************************
// новый пользователь****************************************************************************
//***********************************************************************************************
procedure frmNewUser_bNewUser_OnClick (Sender: TObject; var Cancel: boolean);
var
slParam: TStringList;
begin

     if (frmNewUser.eLogin.Text=''  ) then ShowHint(frmNewUser.eLogin, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
     if (frmNewUser.ePassword.Text=''  ) then ShowHint(frmNewUser.ePassword, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
     if (frmNewUser.eFirstName.Text=''  ) then ShowHint(frmNewUser.eFirstName, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
     if (frmNewUser.eLastName.Text=''  ) then ShowHint(frmNewUser.eLastName, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
     try
      slParam := TStringList.Create;
      slParam.Add('action=newuser');
      slParam.Add('password='+DecryptRC5('EEAD4B4D5385FB1BDBB555E8B814D825A139B7347B66BDB1740C1DD6348AA2A30E505'+
      '99A42BA79612D00F71D4D10CFA8271D2EB67FED657EC13E56E9C8A2C7545C927EDFE1DA567114E207A05EC59F7AF9C975DDA0D6D'+
      'BA8D74C61C5CE38DB9DE1160A4BF63F877357DB17B0B1973FC17BDAA89CC79B3FBCAC97F47B380D5A9700000000','passwordnefteyuganskkhmaovladimircosmos'));
      slParam.Add('login='+frmNewUser.eLogin.Text);
      slParam.Add('pass='+frmNewUser.ePassword.Text);
      slParam.Add('firstname='+frmNewUser.eFirstName.Text);
      slParam.Add('lastname='+frmNewUser.eLastName.Text);
      slParam.Add('idservice='+frmAdmin.eIdService.Text);

      slParam.text:= HTTPPost('https://service-vv.ru/api/index.php',slParam);

       if Pos('0', slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x52','Ошибка обработки запроса!' ))else
       if Pos('-4', slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x56x1', 'Такого ID Service: ' )+' '+frmAdmin.eIdService.Text+' '+langIniG.ReadString('message','00x56x2','не найдено!' ))else
       if Pos('-3', slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x51','Ошибка передачи данных!' ))else
       if Pos('-2',  slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x49','Такой логин уже есть!' ))else
       if Pos('-1',  slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x58','При попытке записи произошла ошибка!' ))else
       if Pos('1',  slParam.text) > 0  then begin
       userall;
       Showmessage(langIniG.ReadString('message','00x59x1','Пользователь ')+' '+frmNewUser.eLogin.Text+' ' +langIniG.ReadString('message','00x59x2',' создан' ))end;
       frmNewUser.Close;
      except
   end;
end;

//***********************************************************************************************
// удалить пользователя**************************************************************************
//***********************************************************************************************

procedure frmAdmin_bDeleteUser_OnClick (Sender: TObject; var Cancel: boolean);
var
slParam: TStringList;
idusers:integer;
Tlogin:TIniFile;
begin
Tlogin:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');

if  frmAdmin.tgUserApp.SelectedRow >-1   then begin
 if IDYES = MessageBox('Вы действительно хотите удалить запись?','Удаление', MB_YESNO+MB_ICONINFORMATION)then begin

     idusers:= frmAdmin.tgUserApp.SelectedRow;
     try
      slParam := TStringList.Create;
      slParam.Add('action=deleteuser');
      slParam.Add('password='+DecryptRC5('6BD73C36A22B2918C6C3B5B1EBF3934952A8A9E323CFF56C87F7EC21E1F23E4D0563C05F51'+
      '5F28F6897AF023770E5B186967FFBCD068546DD00EF37D38596FE07317BC59EE8C82A54E900CBBECE63C95CB3489C76E1AD5222EFE491'+
      '43405B94B7DF15BC66904203E10603FB6385825B86EE57BA1D990A560AC97F47B380D5A9700000000','passwordnefteyuganskkhmaovladimircosmos'));
      slParam.Add('idusers='+frmAdmin.tgUserApp.Cells[0,idusers]);
      //slParam.Add('login='+Tlogin.ReadString('online','login',''));
      //slParam.Add('pass='+Tlogin.ReadString('online','password',''));
      slParam.Add('idservice='+Tlogin.ReadString('online','IDservice',''));

      slParam.text:= HTTPPost('https://service-vv.ru/api/index.php',slParam);

       if Pos('0', slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x52','Ошибка обработки запроса!'))else
       if Pos('-1',  slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x60','Пользователь не найден!'))else
       if Pos('-2',  slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x53','Ошибка передачи данных!'))else
       if Pos('1',  slParam.text) > 0  then begin
       userall;
       Showmessage(langIniG.ReadString('message','00x61','Пользователь удален!'));
       end;
      except
   end;
 end;
 end else
  Showmessage(langIniG.ReadString('message','00x62','Запись не выбрана!'));
end;


//***********************************************************************************************
// редактировать пользователя********************************************************************
//***********************************************************************************************

procedure frmEditUser_bEditUser_OnClick (Sender: TObject; var Cancel: boolean);
var
slParam: TStringList;
idusers:integer;
begin
 if  frmAdmin.tgUserApp.SelectedRow >-1   then begin
     idusers:= frmAdmin.tgUserApp.SelectedRow;
     try
      slParam := TStringList.Create;
      slParam.Add('action=edituser');
      slParam.Add('password='+DecryptRC5('752812FB418B8BA48E8FBE306D28AF17B5BCE4907F5C154CEDDB47657B4C22928084BE2'+
      '3AE5FE70AFFFD266D6864E98EC1DDEA9C0876323E6C8C69325FAC1069429CB276C96497E88ED26CFF6CA9CD1BCD12C79C714A1563E'+
      'A470A79CF8C02814A8E76887E2084FD1DBDA26EF555EDF8B7983FD6824FB52EAC97F47B380D5A9700000000','passwordnefteyuganskkhmaovladimircosmos'));
      slParam.Add('idusers='+frmAdmin.tgUserApp.Cells[0,idusers]);
      slParam.Add('login='+frmEditUser.eLogin.Text);
      slParam.Add('pass='+frmEditUser.ePassword.Text);
      slParam.Add('firstname='+frmEditUser.eFirstName.Text);
      slParam.Add('lastname='+frmEditUser.eLastName.Text);

      slParam.text:= HTTPPost('https://service-vv.ru/api/index.php',slParam);
       showmessage(slParam.text);
       if Pos('0', slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x52','Ошибка обработки запроса!'))else
       if Pos('-2',  slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x51','Ошибка передачи даных!'))else
       if Pos('-1',  slParam.text) > 0  then Showmessage(langIniG.ReadString('message','00x63','Ошибка редактирования!'))else
       if Pos('1',  slParam.text) > 0  then begin

       userall;
       Showmessage(langIniG.ReadString('message','00x64','Данные пользователя изминены!'));
       frmEditUser.Close;
       end;
      except
   end;
    end else
  Showmessage(langIniG.ReadString('message','00x62','Запись не выбрана!'));
end;

//***********************************************************************************************
// форма редактирования пользователя*************************************************************
//***********************************************************************************************
procedure frmEditUser_OnShow (Sender: TObject; Action: string);
var
idusers: integer;
begin
  idusers:= frmAdmin.tgUserApp.SelectedRow;
  frmEditUser.eLogin.Text:=frmAdmin.tgUserApp.Cells[1,idusers];
  frmEditUser.ePassword.Text:=frmAdmin.tgUserApp.Cells[2,idusers];
  frmEditUser.eFirstName.Text:=frmAdmin.tgUserApp.Cells[3,idusers];
  frmEditUser.eLastName.Text:=frmAdmin.tgUserApp.Cells[4,idusers];
end;

//***********************************************************************************************
// создание соединения***************************************************************************
//***********************************************************************************************

{соединяемся с удаленной БД
 если idUserOnline=1 значит соединение уже было созданно, в этом случае при нажатии на кнопку соединение
 произвйдет переподключение к удаленной БД}
procedure frmAdmin_bAutorization_OnClick (Sender: TObject; var Cancel: boolean);
var
url,s,p:string;
Tlogin:TIniFile;
begin
 Tlogin:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');

  Tlogin.WriteString('online','login',frmAdmin.eloginst.Text);
  Tlogin.WriteString('online','password',frmAdmin.ePass.Text);
  Tlogin.WriteString('online','IDservice',frmAdmin.eIdService.Text);

  if (idUserOnline=1) then begin
      url:='https://service-vv.ru/api/index.php';
      http:=createoleobject('WinHttp.WinHttpRequest.5.1');
      http.open('POST', url, True);
      http.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      http.send('action=logout');
      timerAu.Enabled:=True;
      timerAu.Interval:=1000;
      timerAu.OnTimer:=@userlogout;

 end else

  if ( frmAdmin.eloginst.Text=''  ) then ShowHint(frmAdmin.eloginst, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
  if ( frmAdmin.ePass.Text=''  ) then ShowHint(frmAdmin.ePass, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
  if ( frmAdmin.eIdService.Text=''  ) then ShowHint(frmAdmin.eIdService, langIniG.ReadString('message','00x11', 'данное поле обязательное для заполнения!'))else
    try
      p:=DecryptRC5('B040CE4CE7019333952266CE6F039ADCEAFAD39F980FC70348B33F5B5C792DA78556A0A7826A866B5'+
      '4CA6176AE6C82AF2E9B81C40F240DC7FBAAD949590CEBAAD333746E81508E6F616D54F598C175988A8B96C451E1DE65'+
      'FE269F1472AE5CE3400191685E4157F1AC97F47B380D5A970000','passwordnefteyuganskkhmaovladimircosmos');
      url:='https://service-vv.ru/api/index.php';
      http:=createoleobject('WinHttp.WinHttpRequest.5.1');
      http.open('POST', url, True);
      http.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      http.send('action=login&password='+HttpEncode(p)+'&login='+HttpEncode(frmAdmin.eloginst.Text)+'&pass='+HttpEncode(frmAdmin.ePass.Text)+'&sservice='+HttpEncode(frmAdmin.eIdService.Text)+'');
      timerAu:=TTimer.create(frmLogin);
      timerAu.Enabled:=True;
      timerAu.Interval:=1000;
      timerAu.OnTimer:=@asinkhronnost;
    except
   end;
end;

{ответ подключения к удаленной БД }
procedure asinkhronnost;
var
JSONObject: TJSONObject;
JSONString: TJSONString;
begin
  try
    if http.Status() = 200 then
      begin
        JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(http.responsetext));
        JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
          if Pos('-5', JSONString.Value) > 0  then begin
            timerAu.enabled:=False;
            frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x12x1','Ошибка подключения ');
          end else
          if Pos('-4', JSONString.Value) > 0  then begin
            timerAu.enabled:=False;
            frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x65','Ошибка данных');
          end else
          if Pos('-3', JSONString.Value) > 0  then begin
            timerAu.enabled:=False;
            frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x60','Пользователь не найден');
          end else
          if Pos('-2', JSONString.Value) > 0  then begin
            timerAu.enabled:=False;
            frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x17','Пароль не верен');
          end else
          if Pos('-1', JSONString.Value) > 0  then begin
            timerAu.enabled:=False;
            frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x66','ID не верен');
          end else
          if Pos('1', JSONString.Value) > 0  then begin
               timerAu.enabled:=False;
               frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x67','Подключeн');
               idUserOnline:=1;
               frmAdmin.bNewUser.Enabled:=True;
               frmAdmin.bDeleteUser.Enabled:=True;
               frmAdmin.bEditUser.Enabled:=True;
               frmAdmin.bDeleteSession.Enabled:=True;
               userall;
           end;
        end;
   except
      frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x68','соединение...');
  end;
end;

{ответ в случае переподключения}
procedure userlogout;
var
JSONObject, JSONObjProp: TJSONObject;
JSONString: TJSONString;
JsonArray, JsonArrayCoord: TJSONArray;
i:integer;
begin
 try
    if http.Status() = 200 then
      begin
        JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(http.responsetext));
        JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
         if Pos('0', JSONString.Value) > 0  then begin
            timerAu.enabled:=False;
            frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x69','Ошибка соединения ');
          end else
          if Pos('1', JSONString.Value) > 0  then begin
               timerAu.enabled:=False;
               idUserOnline:=0;
               frmAdmin.tgUserApp.ClearRows;
               frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x70','Авторизация ');
               frmAdmin.bNewUser.Enabled:=False;
               frmAdmin.bDeleteUser.Enabled:=False;
               frmAdmin.bEditUser.Enabled:=False;
               frmAdmin.bDeleteSession.Enabled:=False;
               frmAdmin.bAutorization.Click;
           end;
        end;
   except
      frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x72','Переподключение...');
  end;
end;

//***********************************************************************************************
// запрос даты и пользователей*******************************************************************
//***********************************************************************************************
{запрос на авторизацию и получение списка пользователей}
procedure userall;
var
   url,p:string;
begin
      p:=DecryptRC5('20363B4EF26053F47632D8EC34DB823805936D79B19D70D61D454D1278EB3806A6968DF0396D48D5AA21'+
      'EB992AC04AC7993021F19B2813518218A48D49F67682D93C6DF4636B5AF28220F45157CF4049746E54BFF6B41F2F5D1B0A'+
      '0014E8D69D7F56A82279808EE507C026A9DF10CAC2AC97F47B380D5A97','passwordnefteyuganskkhmaovladimircosmos');
      url:='https://service-vv.ru/api/index.php';
      http.open('POST', url, true);
      http.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      http.send('action=online&password='+HttpEncode(p));
      timerAu.Enabled:=True;
      timerAu.Interval:=1000;
      timerAu.OnTimer:=@DUAll;
end;

{получение ответа о пользователях}
procedure DUAll;
var
JSONObject, JSONObjProp: TJSONObject;
JSONString: TJSONString;
JsonArray, JsonArrayCoord: TJSONArray;
i:integer;
begin
  try
    if http.Status() = 200 then
      begin
        JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(http.responsetext));
          if JSONObject <> nil then begin
            JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
                if Pos('not user', JSONString.Value) > 0  then begin
                    JSONString:=TJSONString(JSONObject.GetPairByName('days').JsonValue);
                    frmAdmin.bDays.Caption:=langIniG.ReadString('Admin','bDays','Осталось дней')+' :  '+JSONString.Value;
                    timerAu.Enabled:=False;
              end else
                  if Pos('1', JSONString.Value) > 0  then begin
                    JSONString:=TJSONString(JSONObject.GetPairByName('days').JsonValue);
                    frmAdmin.bDays.Caption:=langIniG.ReadString('Admin','bDays','Осталось дней')+' :  '+JSONString.Value;
                    JsonArray:=TJSONArray(JSONObject.GetPairByName('products').JsonValue);
                    frmAdmin.tgUserApp.ClearRows;
                     for i := 0 to JsonArray.Size-1  do begin
                        frmAdmin.tgUserApp.AddRow(1);
                        JSONObjProp := TJSONObject( TJSONObject(JsonArray.Get(i)));
                        JSONString := TJSONString(JSONObjProp.GetPairByName('id').JsonValue);
                        frmAdmin.tgUserApp.Cells[0,i] := JSONString.Value;
                        JSONString := TJSONString(JSONObjProp.GetPairByName('login').JsonValue);
                        frmAdmin.tgUserApp.Cells[1,i] := JSONString.Value;
                        JSONString := TJSONString(JSONObjProp.GetPairByName('password').JsonValue);
                        frmAdmin.tgUserApp.Cells[2,i] := JSONString.Value;
                        JSONString := TJSONString(JSONObjProp.GetPairByName('firstname').JsonValue);
                        frmAdmin.tgUserApp.Cells[3,i] := JSONString.Value;
                        JSONString := TJSONString(JSONObjProp.GetPairByName('lastname').JsonValue);
                        frmAdmin.tgUserApp.Cells[4,i] := JSONString.Value;
                      end;
                    timerAu.Enabled:=False;
                 end;
               end;
            end;
       except
    end;
end;

//***********************************************************************************************
// кнопка отключения ****************************************************************************
//***********************************************************************************************

procedure frmAdmin_bDeleteSession_OnClick (Sender: TObject; var Cancel: boolean);
  var
url:string;
begin

      url:='https://service-vv.ru/api/index.php';
      http.open('POST', url, True);
      http.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      http.send('action=logout');
      timerAu.Enabled:=True;
      timerAu.Interval:=1000;
      timerAu.OnTimer:=@useroff;
end;

procedure useroff;
var
JSONObject, JSONObjProp: TJSONObject;
JSONString: TJSONString;
JsonArray, JsonArrayCoord: TJSONArray;
i:integer;
begin
 try
    if http.Status() = 200 then
      begin
        JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(http.responsetext));
        JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
         if Pos('0', JSONString.Value) > 0  then begin
            timerAu.enabled:=False;
            frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x69','Ошибка соединения ');
            timerAu.Enabled:=False;
          end else
          if Pos('1', JSONString.Value) > 0  then begin
               timerAu.enabled:=False;
               idUserOnline:=0;
               frmAdmin.tgUserApp.ClearRows;
               frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x70','Авторизация ');
               frmAdmin.bNewUser.Enabled:=False;
               frmAdmin.bDeleteUser.Enabled:=False;
               frmAdmin.bEditUser.Enabled:=False;
               frmAdmin.bDeleteSession.Enabled:=False;
               timerAu.Enabled:=False;
               frmAdmin.bDays.Caption:=langIniG.ReadString('Admin','bDays','Осталось дней');
           end;
        end;
   except
      frmAdmin.bAutorization.Caption:=langIniG.ReadString('message','00x71','Отключение..');
  end;
end;

//***********************************************************************************************
// передача / получение данных ***********************************************************
//***********************************************************************************************

{создание сессии для передачи данных}
procedure autorisationsession;
var
url,s,p:string;
Tlogin:TIniFile;
begin
 Tlogin:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
    try
      p:=DecryptRC5('B040CE4CE7019333952266CE6F039ADCEAFAD39F980FC70348B33F5B5C792DA78556A0A7826A866B54C'+
      'A6176AE6C82AF2E9B81C40F240DC7FBAAD949590CEBAAD333746E81508E6F616D54F598C175988A8B96C451E1DE65FE26'+
      '9F1472AE5CE3400191685E4157F1AC97F47B380D5A970000','passwordnefteyuganskkhmaovladimircosmos');
      url:='https://service-vv.ru/api/index.php';
      datainout:=createoleobject('WinHttp.WinHttpRequest.5.1');
      datainout.open('POST', url, True);
      datainout.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      datainout.send('action=autorisationInoutdata&password='+HttpEncode(p)+'&login='+HttpEncode(Tlogin.ReadString('online','login',''))+
      '&pass='+HttpEncode(Tlogin.ReadString('online','password',''))+
      '&idservice='+HttpEncode(Tlogin.ReadString('online','IDservice',''))+'');
      timerDataInout:=TTimer.Create(frmLogin);
      timerDataInout.Enabled:=True;
      timerDataInout.Interval:=1000;
      timerDataInout.OnTimer:=@autorisationsessionanswer;
    except
   end;
end;

{получение ответа о создании сессии}
procedure autorisationsessionanswer;
var
JSONObject: TJSONObject;
JSONString: TJSONString;
begin
 try
    if datainout.Status() = 200 then
      begin
        JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(datainout.responsetext));
        JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
          if Pos('1', JSONString.Value) > 0  then begin
              timerDataInout.enabled:=False;
              datainapp;
           end;
        end;
   except
  end;
end;

{ передаем данные о заявках}
procedure datainapp;
var
i,c,r,t:integer;
list:TStringList;
url: string = 'https://service-vv.ru/api/index.php';
Tlogin:TIniFile;
s,p,sF,sL,sD,UQ:string;
begin
 t:=50000;
 p:=DecryptRC5('713DB5EE0C7C881D471DC50366FB00F930A362842426F78C6BD73C36A22B2918C6C3B5B1EBF3934952A8'+
 'A9E323CFF56C87F7EC21E1F23E4DE93B5C51DDCC8415D00EF37D38596FE07317BC59EE8C82A5B3DE0C470C0609400D880C'+
 'E3459E658261A36A6930CC10551B9D87E11B86BA2CAC97F47B380D5A97','passwordnefteyuganskkhmaovladimircosmos');
 Tlogin:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
 list:=TStringList.Create;
 list.Text:= SQLExecute( 'SELECT group_concat(id, char(13) || char(10)) FROM servise WHERE appUpdate=1' );
 c:=list.Count-1;
 timerDataInout.Enabled:=True;
 timerDataInout.Interval:=1000;
 timerDataInout.OnTimer:=@SDataApp;
 for i:=0 to c do
  begin
  if outdatainout=1  then begin
  TInOut.Enabled:=True;
  break;
  end else begin
  sF:=sqlexecute('SELECT name FROM firstNameClient LEFT OUTER JOIN servise ON firstNameClient.id=servise.id_firstNameClient WHERE servise.id='+list[i]);
  sL:=sqlexecute('SELECT name FROM twoNameClient LEFT OUTER JOIN servise ON twoNameClient.id=servise.id_twoNameClient WHERE servise.id='+list[i]);
  sD:=sqlexecute('SELECT descriptionATCsWords FROM servise WHERE id='+list[i]);
  UQ:=sqlexecute('SELECT client FROM servise WHERE id='+list[i]);
  sF:= ReplaceStr(sF, '+', '%2B');
  sL:= ReplaceStr(sL, '+', '%2B');
  sD:= ReplaceStr(sD, '+', '%2B');
  UQ:= ReplaceStr(UQ, '+', '%2B');
  datainout.open('POST', url, True);
  datainout.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf8');
  s:='action=datain&password='+HttpEncode(p)+'&idapp='+list[i]+
  '&firstnameapp='+sF+'&lastnameapp='+sL+
  '&telephonapp='+HttpEncode(sqlexecute('SELECT telephonClient FROM servise WHERE id='+list[i]))+
  '&dateapp='+HttpEncode(sqlexecute('SELECT dateApplcation FROM servise WHERE id='+list[i]))+
  '&timeapp='+HttpEncode(sqlexecute('SELECT timeApplication FROM servise WHERE id='+list[i]))+
  '&uniquefield='+UQ+
  '&descriptionapp='+sD+'';
  datainout.send(s);
  repeat
     Application.ProcessMessages;
     if SDataApp(list[i])then begin
      SQLExecute('UPDATE servise SET appUpdate="0" WHERE id = '+list[i]);
      FrmServiceCen.lLogUser.Caption:='Передача данных ..';
     break;
     end;
     r:=r+1;
   until r >= t;
  end;
 end;
  timerDataInout.Enabled:=False;
  dataoutapp;
  FrmServiceCen.lLogUser.Caption:='Ок ';
end;

{ получение ответа передачи данных}
function SDataApp(Sdata: string):boolean;
var
JSONObject: TJSONObject;
JSONString: TJSONString;
begin
  try
    if datainout.Status() = 200 then
      begin
        JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(datainout.responsetext));
        JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
         if Pos('-3',JSONString.Value)>0
         then begin
         datainout:=Nil;
         timerDataInout.Free;
         outdatainout:=1;
         end else
         if Pos(Sdata, JSONString.Value) > 0 then Result := True;
        end;
   except
 end;
end;

{ запрашиваем у удаленной БД обновленные данные }
procedure dataoutapp;
var
url: string = 'https://service-vv.ru/api/index.php';
p:string;
Tlogin:TIniFile;
begin
 p:=DecryptRC5('D522321839DCDA423CEDA17FC80C664588ECD55CA7B508988425B0FAC80C150A305A02AAB263F8362C3'+
 '3B3B5E759747E49B70B895ABF0F0BECAEA03F420A3724866BD771D2A4CE93E41CD2DA6F1AA630B3A38A2BF8DD188A4FEA'+
 '86D991D0E81A163151913521E9DE61AA468B19670CA860430D5D26F3CC2CAC97F47B380D5A9700000000','passwordnefteyuganskkhmaovladimircosmos');
 Tlogin:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
 datainout.open('POST', url, True);
 datainout.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 datainout.send('action=dataout&password='+HttpEncode(p));
 timerDataInout.Enabled:=True;
 timerDataInout.Interval:=1000;
 timerDataInout.OnTimer:=@SDataAppOut;
end;

{ получаем данные о заявках от удаленной БД }
procedure SDataAppOut;
var
JSONObject, JSONObjProp: TJSONObject;
JSONString: TJSONString;
JsonArray, JsonArrayCoord: TJSONArray;
i:integer;
sId,idClient,idservice,sWork,sStatus,sUniqueField,idUniqueField:string;
begin
  try
    if datainout.Status() = 200 then
     begin
        JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(datainout.responsetext));
         if JSONObject <> nil then
           JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
           if Pos('-2', JSONString.Value) > 0  then begin
            datainout:=Nil;
            timerDataInout.Free;
            //TInOut.Enabled:=True;
           end else
              if Pos('1', JSONString.Value) > 0  then begin
                JsonArray:=TJSONArray(JSONObject.GetPairByName('client').JsonValue);
                  for i := 0 to JsonArray.Size-1  do begin
                    JSONObjProp := TJSONObject( TJSONObject(JsonArray.Get(i)));
                    JSONString := TJSONString(JSONObjProp.GetPairByName('workapp').JsonValue);
                    sWork := JSONString.Value;
                    JSONString := TJSONString(JSONObjProp.GetPairByName('statusapp').JsonValue);
                    sStatus := JSONString.Value;
                    JSONString := TJSONString(JSONObjProp.GetPairByName('idapp').JsonValue);
                    idClient := JSONString.Value;
                    JSONString := TJSONString(JSONObjProp.GetPairByName('id').JsonValue);
                    sId := JSONString.Value;
                    JSONString := TJSONString(JSONObjProp.GetPairByName('user_id').JsonValue);
                    idservice := JSONString.Value;
                    JSONString := TJSONString(JSONObjProp.GetPairByName('uniquefield').JsonValue);
                    sUniqueField := JSONString.Value;
                    // проверяем имеется-ли такой клиент в базе и если он есть получаем его id
                    //ВНИМАНИЕ! ни когда не сравнивайте записи по их id
                    //лучше всего для таких сравнений создавать уникальную запись
                    idUniqueField := SQLEXecute('SELECT id FROM servise WHERE client='''+sUniqueField+'''');
                    //если такая запись есть
                    if ValidInt(idUniqueField)then begin
                     //обновляем ее
                     SQLEXecute('UPDATE servise SET appToWork="'+sWork+'", appStatus="'+sStatus+'" WHERE client='''+sUniqueField+'''');
                     //посылаем серверу ОК
                     dataoutok(sId,idClient,idservice);
                     end;
                  end;
                timerDataInout.Enabled:=False;
             end;
          end;
       except
       FrmServiceCen.lLogUser.Caption:='Получение данных ..';
    end;
 timerDataInout.Free;
 datainout:=Nil;
 TInOut.Enabled:=False;
 updateDataTime;
end;

{ если полученные данные от удаленной  БД удачно записаны то создаем об этом запись в удаленной БД}
procedure dataoutok(id, idapp, idservice: string);
var
   url,p:string;
begin
      url:='https://service-vv.ru/api/index.php';
      p:=DecryptRC5('130FAEFD1DEB190AFCA8CE52935DCE3485AB530286A050EF90E0B9D7712252BC53982499B64242BFDA2753'+
      'B8F1ECC6072908D3090EC990804A5A29A6D90CD48AFA7F0AE2D92FBDA214464EF48DC82ACD1D454D1278EB3806A6968DF039'+
      '6D48D5406CF962183B33FA85E4192FAEEDA097AC97F47B380D5A970000','passwordnefteyuganskkhmaovladimircosmos');
      datainout:=createoleobject('WinHttp.WinHttpRequest.5.1');
      datainout.open('POST', url, true);
      datainout.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      datainout.send('action=dataoutok&password='+HttpEncode(p)+
      '&sid='+id+'&idapp='+idapp+'&idusers='+idservice+'');
end;


//выбор минут или часов для обновления данных
procedure frmAdmin_cbTimeUpdate_OnClick (Sender: TObject);
var
ini:TiniFile;
begin
ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
if frmAdmin.cbTimeUpdate.ItemIndex=0 then ini.WriteString('online','time','0');
if frmAdmin.cbTimeUpdate.ItemIndex=1 then ini.WriteString('online','time','1');
ini.Free;
updateDataTime;
end;

procedure frmAdmin_eTimeUpdate_OnKeyUp (Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
var
ini:TiniFile;
begin
ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
if frmAdmin.cbKM.ItemIndex=1 then ini.WriteString('online','UT',frmAdmin.eTimeUpdate.Text);
ini.Free;
updateDataTime;
end;

procedure updateDataTime;
var
online: TIniFile;
r:string;
UT:integer;
begin

online:=TIniFile.Create(ExtractFilePath (ParamStr(0))+'setting\online.ini');
r:=online.ReadString('online','enabled','') ;
UT:=StrToInt(online.ReadString('online','UT',''));
if online.ReadString('online','time','')='0' then UT:=UT*60000;
if online.ReadString('online','time','')='1' then UT:=UT*3600000;
  if r='1' then begin
   TInOut:=TTimer.Create(frmLogin);
   TInOut.Enabled:=True;
   TInOut.Interval:=UT;
   TInOut.OnTimer:= @autorisationsession;
end;

online.Free;
end;


//***********************************************************************************************
// смена языка***********************************************************************************
//***********************************************************************************************

procedure frmEditUser_eLastName_OnExit (Sender: TObject);
begin
  if frmEditUser.eLastName.Tag <> 0 then ChangeKeyboardLayout(frmEditUser.eLastName.Tag);
end;

procedure frmEditUser_eFirstName_OnExit (Sender: TObject);
begin
  if frmEditUser.eFirstName.Tag <> 0 then ChangeKeyboardLayout(frmEditUser.eFirstName.Tag);
end;

procedure frmEditUser_ePassword_OnExit (Sender: TObject);
begin
  if frmEditUser.ePassword.Tag <> 0 then ChangeKeyboardLayout(frmEditUser.ePassword.Tag);
end;

procedure frmEditUser_eLogin_OnExit (Sender: TObject);
begin
  if frmEditUser.eLogin.Tag <> 0 then ChangeKeyboardLayout(frmEditUser.eLogin.Tag);
end;

procedure frmNewUser_eLastName_OnExit (Sender: TObject);
begin
  if frmNewUser.eLastName.Tag <> 0 then ChangeKeyboardLayout(frmNewUser.eLastName.Tag);
end;

procedure frmNewUser_eFirstName_OnExit (Sender: TObject);
begin
  if frmNewUser.eFirstName.Tag <> 0 then ChangeKeyboardLayout(frmNewUser.eFirstName.Tag);
end;

procedure frmNewUser_ePassword_OnExit (Sender: TObject);
begin
  if frmNewUser.ePassword.Tag <> 0 then ChangeKeyboardLayout(frmNewUser.ePassword.Tag);
end;

procedure frmNewUser_eLogin_OnExit (Sender: TObject);
begin
  if frmNewUser.eLogin.Tag <> 0 then ChangeKeyboardLayout(frmNewUser.eLogin.Tag);
end;

procedure frmReqID_eEmail_OnExit (Sender: TObject);
begin
  if frmReqID.eEmail.Tag <> 0 then ChangeKeyboardLayout(frmReqID.eEmail.Tag);
end;

procedure frmNewID_ePass_OnExit (Sender: TObject);
begin
  if frmNewID.ePass.Tag <> 0 then ChangeKeyboardLayout(frmNewID.ePass.Tag);
end;

procedure frmNewID_eLogin_OnExit (Sender: TObject);
begin
  if frmNewID.eLogin.Tag <> 0 then ChangeKeyboardLayout(frmNewID.eLogin.Tag);
end;

procedure frmNewID_eMail_OnExit (Sender: TObject);
begin
  if frmNewID.eMail.Tag <> 0 then ChangeKeyboardLayout(frmNewID.eMail.Tag);
end;

procedure frmAdmin_eIdService_OnExit (Sender: TObject);
begin
  if frmAdmin.eIdService.Tag <> 0 then ChangeKeyboardLayout(frmAdmin.eIdService.Tag);
end;
                                                                     
procedure frmAdmin_ePass_OnExit (Sender: TObject);
begin
  if frmAdmin.ePass.Tag <> 0 then ChangeKeyboardLayout(frmAdmin.ePass.Tag);
end;

procedure frmAdmin_eloginst_OnExit (Sender: TObject);
begin
  if frmAdmin.eloginst.Tag <> 0 then ChangeKeyboardLayout(frmAdmin.eloginst.Tag);
end;

procedure frmAdmin_eIdService_OnEnter (Sender: TObject);
begin
  frmAdmin.eIdService.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmAdmin_ePass_OnEnter (Sender: TObject);
begin
  frmAdmin.ePass.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmAdmin_eloginst_OnEnter (Sender: TObject);
begin
  frmAdmin.eloginst.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmEditUser_eLastName_OnEnter (Sender: TObject);
begin
  frmNewUser.eLastName.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmEditUser_eFirstName_OnEnter (Sender: TObject);
begin
  frmNewUser.eFirstName.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmEditUser_ePassword_OnEnter (Sender: TObject);
begin
  frmNewUser.ePassword.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmEditUser_eLogin_OnEnter (Sender: TObject);
begin
  frmNewUser.eLogin.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmNewUser_eLastName_OnEnter (Sender: TObject);
begin
  frmNewUser.eLastName.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmNewUser_eFirstName_OnEnter (Sender: TObject);
begin
  frmNewUser.eFirstName.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmNewUser_ePassword_OnEnter (Sender: TObject);
begin
  frmNewUser.ePassword.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmNewUser_eLogin_OnEnter (Sender: TObject);
begin
  frmNewUser.eLogin.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmNewID_ePass_OnEnter (Sender: TObject);
begin
  frmNewID.ePass.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmReqID_eEmail_OnEnter (Sender: TObject);
begin
  frmReqID.eEmail.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;


procedure frmNewID_eLogin_OnEnter (Sender: TObject);
begin
  frmNewID.eLogin.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmNewID_eMail_OnEnter (Sender: TObject);
begin
  frmNewID.eMail.Tag := GetKeyboardLayout;
  ChangeKeyboardLayout(LANG_ENGLISH);
end;

procedure frmEditUser_OnClose (Sender: TObject; Action: string);
begin
  ChangeKeyboardLayout(frmEditUser.eLogin.Tag);
  ChangeKeyboardLayout(frmEditUser.ePassword.Tag);
  ChangeKeyboardLayout(frmEditUser.eFirstName.Tag);
  ChangeKeyboardLayout(frmEditUser.eLastName.Tag);
end;

procedure frmEditUser_OnClick (Sender: TObject);
begin
  ChangeKeyboardLayout(frmEditUser.eLogin.Tag);
  ChangeKeyboardLayout(frmEditUser.ePassword.Tag);
  ChangeKeyboardLayout(frmEditUser.eFirstName.Tag);
  ChangeKeyboardLayout(frmEditUser.eLastName.Tag);
end;

procedure frmNewUser_OnClose (Sender: TObject; Action: string);
begin
  ChangeKeyboardLayout(frmNewUser.eLogin.Tag);
  ChangeKeyboardLayout(frmNewUser.ePassword.Tag);
  ChangeKeyboardLayout(frmNewUser.eFirstName.Tag);
  ChangeKeyboardLayout(frmNewUser.eLastName.Tag);
end;

procedure frmNewUser_OnClick (Sender: TObject);
begin
  ChangeKeyboardLayout(frmNewUser.eLogin.Tag);
  ChangeKeyboardLayout(frmNewUser.ePassword.Tag);
  ChangeKeyboardLayout(frmNewUser.eFirstName.Tag);
  ChangeKeyboardLayout(frmNewUser.eLastName.Tag);
end;

procedure frmReqID_OnClose (Sender: TObject; Action: string);
begin
  ChangeKeyboardLayout(frmReqID.eEmail.Tag);
end;

procedure frmReqID_OnClick (Sender: TObject);
begin
  ChangeKeyboardLayout(frmReqID.eEmail.Tag);
end;

procedure frmNewID_OnClose (Sender: TObject; Action: string);
begin
ChangeKeyboardLayout(frmNewID.eMail.Tag);
ChangeKeyboardLayout(frmNewID.eLogin.Tag);
ChangeKeyboardLayout(frmNewID.ePass.Tag);  
end;

procedure frmNewID_OnClick (Sender: TObject);
begin
ChangeKeyboardLayout(frmNewID.eMail.Tag);
ChangeKeyboardLayout(frmNewID.eLogin.Tag);
ChangeKeyboardLayout(frmNewID.ePass.Tag);
end;
procedure frmAdmin_gbMobileData_OnClick (Sender: TObject);
begin
  ChangeKeyboardLayout(frmAdmin.eloginst.Tag);
  ChangeKeyboardLayout(frmAdmin.ePass.Tag);
  ChangeKeyboardLayout(frmAdmin.eIdService.Tag);
end;

procedure frmAdmin_OnClick (Sender: TObject);
begin
  ChangeKeyboardLayout(frmAdmin.eloginst.Tag);
  ChangeKeyboardLayout(frmAdmin.ePass.Tag);
  ChangeKeyboardLayout(frmAdmin.eIdService.Tag);
end;

//***********************************************************************************************
// чекбокс передачи мобильных данных*************************************************************
//***********************************************************************************************

procedure frmAdmin_cbMobileDataOnOff_OnClick (Sender: TObject);
var
online:TIniFile;
begin
    online:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
    online.WriteBool('online','Enabled',frmAdmin.cbMobileDataOnOff.Checked);
    if frmAdmin.cbMobileDataOnOff.Checked then frmAdmin.gbMobileData.Enabled:=True else frmAdmin.gbMobileData.Enabled:=False;
end;
//***********************************************************************************************
// покупка дней**********************************************************************************
//***********************************************************************************************
procedure frmBayDay_eDay_OnChange (Sender: TObject);
var
sD:integer;
begin
{
if frmBayDay.eDay.Text <> '' then begin
  sD:= StrToInt(frmBayDay.eDay.Text)*10;
  frmBayDay.lRub.Caption:= IntToStr(sD)+' rub';
 end else  frmBayDay.lRub.Caption:= '0.00 rub';
 }
end;

//***********************************************************************************************
//магазин----------------------------------------------------------------------------------------
//***********************************************************************************************
//если поле штрихкода имеет значение*************************************************************
//***********************************************************************************************
procedure frmShop_eCode_OnChange (Sender: TObject);
begin
  if frmShop.eCode.Text <> '' then addproduct;
end;
//***********************************************************************************************
//добавить в карзину*****************************************************************************
//***********************************************************************************************
procedure frmShop_bAdd_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmShop.bAdd.Enabled:=False;
  addproductbasket;
  frmShop.eCode.Clear;
  frmShop.eCode.SetFocus;
  frmShop.eNamePruduct.Visible:=False;
  frmShop.ePriceProduct.Visible:=False;
  frmShop.eQProduct.Visible:=False;
end;
//***********************************************************************************************
//происходит при поиске товара по штрихкоду******************************************************
//***********************************************************************************************
procedure addproduct;
var
sIn, sOut: integer;
begin
 sIn:= StrToInt(SQLexecute('SELECT IFNULL (SUM(inQuantity),0) FROM inProduct LEFT OUTER JOIN magazin ON inProduct.id_magazin=magazin.id WHERE magazin.codeProduct='+frmShop.eCode.Text));
 sOut:=StrToInt(SQLexecute('SELECT IFNULL (SUM(outQuantity),0) FROM outProduct LEFT OUTER JOIN magazin ON outProduct.id_magazin=magazin.id WHERE magazin.codeProduct='+frmShop.eCode.Text));

  if (sIn-sOut)>=1 then
   begin
       frmShop.eNamePruduct.Visible:=True;
       frmShop.ePriceProduct.Visible:=True;
       frmShop.eQProduct.Visible:=True;
       frmShop.eNamePruduct.Text:= SQLExecute('SELECT nameproduct FROM magazin WHERE magazin.codeProduct='+frmShop.eCode.Text);
       frmShop.ePriceProduct.Text:= SQLExecute('SELECT priceProduct FROM magazin WHERE magazin.codeProduct='+frmShop.eCode.Text);
       frmShop.eQProduct.Focused;
       frmShop.eQProduct.Text:='1';
       frmShop.eQProduct.SetFocus;
       end else begin
       frmShop.eNamePruduct.Visible:=True;
       frmShop.ePriceProduct.Visible:=True;
       frmShop.eQProduct.Visible:=True;
       frmShop.eNamePruduct.Text:= 'Товара нет на складе!';
       frmShop.ePriceProduct.Text:= '';
       frmShop.eQProduct.Text:='0';
    end;
end;
//***********************************************************************************************
//происходит при нажатии на клавишу**************************************************************
//в данный момент не работает********************************************************************
{procedure frmShop_OnKeyDown (Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
var
wDate : string = FormatDateTime('yyyy-mm-dd',frmShop.DateTimePicker1.DateTime);
begin
if Key = 16 then addproductbasket;
if Key = 13 then begin
    frmShop.Edit3.Clear;
    frmShop.Edit3.PasteFromClipboard;
 end;
end; }
//***********************************************************************************************
//происходит добовлении товара в карзину*********************************************************
//***********************************************************************************************
procedure addproductbasket;
var
wDate : string = FormatDateTime('yyyy-mm-dd',frmShop.dtpShop.DateTime);
idproduct: string = SQLExecute('SELECT id FROM magazin WHERE codeProduct='+frmShop.eCode.Text);
begin
  vTable(idproduct,frmShop.eNamePruduct.Text,frmShop.ePriceProduct.Text,wDate,frmShop.eQProduct.Text);
  frmShop.eQProduct.SetFocus;
end;
//***********************************************************************************************
//очистить временную карзину*********************************************************************
//***********************************************************************************************
procedure frmShop_bCancel_OnClick (Sender: TObject; var Cancel: boolean);
begin
  SQLexecute('DELETE FROM vTable');
  frmShop.Close;
end;
//***********************************************************************************************
//очистить временную карзину*********************************************************************
//***********************************************************************************************
procedure frmShop_bCleaner_OnClick (Sender: TObject; var Cancel: boolean);
begin
  SQLexecute('DELETE FROM vTable');
  frmShop.tgShop.Visible:=False;
end;
//***********************************************************************************************
//при открытии формы если в карзине есть товар***************************************************
//***********************************************************************************************
procedure frmShop_OnShow (Sender: TObject; Action: string);

begin
  if SQLExecute('SELECT count(id) FROM vTable;') > '0' then begin
  frmShop.tgShop.Visible:=True;
  end;
end;
//***********************************************************************************************
//добавление (приход товара)*********************************************************************
//***********************************************************************************************

procedure frmAddProduct_bAdd_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if (frmAddProduct.eCode.Text = '') OR (frmAddProduct.eName.Text = '') OR (frmAddProduct.ePrice.Text = '') OR (frmAddProduct.eQuantity.Text = '') then Cancel:=True;
end;

procedure frmAddProduct_bAdd_OnAfterClick (Sender: TObject);
var
 maxID:string;
 wDate : string = FormatDateTime('yyyy-mm-dd',frmaddProduct.dtpAdd.DateTime);
begin 
  maxID := SQLExecute('SELECT MAX(id) FROM magazin');
  SQLExecute('INSERT INTO inProduct (id_magazin , inQuantity, dateIn, id_typeIn) VALUES ("'+maxID+'", "'+frmaddProduct.eQuantity.Text+'", "'+wDate+'", "1" )');
  frmAllProduct.tgAllProduct.dbUpdate;
end;                                                                          

//***********************************************************************************************
//Приход (возврат товара)************************************************************************
//***********************************************************************************************
procedure frmReasonForFReturn_bWriteOff_OnClick (Sender: TObject; var Cancel: boolean);
var
 wDate : string = FormatDateTime('yyyy-mm-dd',frmReasonForFReturn.dtpIn.DateTime);
begin
   SQLExecute('INSERT INTO inProduct (id_magazin, id_typeIn, dateIn, inQuantity, reasonDescription) VALUES ("'+IntToStr(frmReasonForFReturn.cbCodeProduct.dbItemID)+'", "2", "'+wDate+'", "'+frmReasonForFReturn.eQuantity.Text+'", "'+frmReasonForFReturn.mReason.Text+'")');
   frmReasonForFReturn.Close;
end;

//***********************************************************************************************
//Списание (Расход товара)***********************************************************************
//***********************************************************************************************
procedure frmReasonForCancellation_bWriteOff_OnClick (Sender: TObject; var Cancel: boolean);
var
 wDate : string = FormatDateTime('yyyy-mm-dd',frmReasonForCancellation.dtpOut.DateTime);
begin
   SQLExecute('INSERT INTO outProduct (id_magazin, id_typeOut, dateOut, outQuantity, reasonDescription) VALUES ("'+IntToStr(frmReasonForCancellation.cbCodeProduct.dbItemID)+'", "2", "'+wDate+'", "'+frmReasonForCancellation.eQuantity.Text+'", "'+frmReasonForCancellation.mReason.Text+'")');
   frmReasonForCancellation.Close;
end;
//***********************************************************************************************
//запись покупки во временную карзину************************************************************
//***********************************************************************************************
procedure vTable (idproduct,nameproduct,priceProduct,dateOuT,outkolvo:string);
var
sSum: integer;
begin
frmShop.tgShop.Visible:=True;
SQLExecute('INSERT INTO vTable (idProduct,nameproduct,priceProduct,dateOuT,outkolvo) VALUES ("'+idproduct+'","'+nameproduct+'","'+priceProduct+'","'+dateOuT+'","'+outkolvo+'")');
frmShop.tgShop.dbUpdate;
end;
//***********************************************************************************************
//оформление покупки товара**********************************************************************
//***********************************************************************************************
procedure frmShop_bBay_OnClick (Sender: TObject; var Cancel: boolean);
var
list:TStringList;
i,c:integer;
sIDProduct,sOutColvo:string;
wDate : string = FormatDateTime('yyyy-mm-dd',frmShop.dtpShop.DateTime);
begin
 list:=TStringList.Create;
 list.Text:= SQLExecute( 'SELECT group_concat(id, char(13) || char(10)) FROM vTable' );
 c:=list.Count-1;
 for i:=0 to c do
 Begin
  sIDProduct:=SQLExecute('SELECT idProduct FROM vTable WHERE id='+list[i]);
  sOutColvo:=SQLExecute('SELECT outkolvo FROM vTable WHERE id='+list[i]);
  SQLExecute('INSERT INTO outProduct (id_magazin,outQuantity,dateOuT,id_typeOut) VALUES ("'+sIDProduct+'","'+sOutColvo+'","'+wDate+'","1")');
 end;
 SQLexecute('DELETE FROM vTable');
 frmShop.tgShop.Visible:=False;
end;
//***********************************************************************************************
//сверка колл-во товара на складе пред покупкай**************************************************
//***********************************************************************************************
procedure frmShop_eQProduct_OnChange (Sender: TObject);
var
 sIn: integer = StrToInt(SQLexecute('SELECT IFNULL (SUM(inQuantity),0) FROM inProduct LEFT OUTER JOIN magazin ON inProduct.id_magazin=magazin.id WHERE magazin.codeProduct='+frmShop.eCode.Text));
 sOut: integer =StrToInt(SQLexecute('SELECT IFNULL (SUM(ouTQuantity),0) FROM outProduct LEFT OUTER JOIN magazin ON outProduct.id_magazin=magazin.id WHERE magazin.codeProduct='+frmShop.eCode.Text));
begin
 if frmShop.eQProduct.Text <> '' then begin
    if (sIn-sOut-StrToInt(frmShop.eQProduct.Text))>=0 then begin
       frmShop.bAdd.Enabled:=True;
       frmShop.bAdd.Caption:='Добавить';
       end else begin
       frmShop.eQProduct.Text:='';
       frmShop.bAdd.Enabled:=False;
       frmShop.bAdd.Caption:='ОШИБКА !  Остаток на складе: ' +IntToStr(sIn-sOut);
    end;
  end;
end;
//***********************************************************************************************
//если при приеме (приход товара) такой уже есть показать форму прихода имеющегося товара********
//***********************************************************************************************

procedure frmAddProduct_eCode_OnChange (Sender: TObject);
var
sId: integer = SQLEXEcute('SELECT id FROM magazin WHERE codeProduct='+frmAddProduct.eCode.Text);
begin
   if sId then frmEditProduct.ShowRecord('magazin', sId) ;
end;

procedure frmEditProduct_bSave_OnClick (Sender: TObject; var Cancel: boolean);
var
sId: string = SQLEXEcute('SELECT id FROM magazin WHERE codeProduct='+frmEditProduct.eCode.Text);
wDate : string = FormatDateTime('yyyy-mm-dd',frmEditProduct.dtpAdd.DateTime);
begin
   SQLExecute('INSERT INTO inProduct (id_magazin , inQuantity, dateIn, id_typeIn) VALUES ("'+sId+'", "'+frmEditProduct.eQuantity.Text+'", "'+wDate+'", "1")');
   frmEditProduct.Close;
   frmAddProduct.Close;
   frmAllProduct.tgAllProduct.dbUpdate;
end;

procedure frmAllProduct_OnShow (Sender: TObject; Action: string);
begin
  frmAllProduct.tgAllProduct.dbUpdate;
end;
procedure frmAllProduct_tgAllProduct_OnChange (Sender: TObject);
begin
  frmAllProduct.tgAllProduct.Columns[0].Header.Caption := langIniG.ReadString('col','col32', 'Имя товара');
  frmAllProduct.tgAllProduct.Columns[1].Header.Caption := langIniG.ReadString('col','col33', 'Штрих код');
  frmAllProduct.tgAllProduct.Columns[2].Header.Caption := langIniG.ReadString('col','col25', 'Цена');
  frmAllProduct.tgAllProduct.Columns[3].Header.Caption := langIniG.ReadString('col','col27', 'Кол-во');
  frmAllProduct.tgAllProduct.Columns[4].Header.Caption := langIniG.ReadString('col','col38', 'Дата прихода');
end;
//***********************************************************************************************
//показ и перевод языка отчета*******************************************************************
//***********************************************************************************************
procedure frmReportShop_bInBak_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then frmReportShop.tgQuantity.Visible:=True;

  frmReportShop.bPrintQuantity.Visible:=False ;
  frmReportShop.bPrintOut.Visible:=False ;
  frmReportShop.bPrint.Visible:=True ;

  frmReportShop.dtpAfter.dbTable := 'inProduct';
  frmReportShop.dtpAfter.dbField := 'dateIn';
  frmReportShop.dtpBefore.dbTable := 'inProduct';
  frmReportShop.dtpBefore.dbField := 'dateIn';

  frmReportShop.cbInBakFilter.dbItemID:=2;
  frmReportShop.cbOutBakFilter.dbItemID:=-1;

  frmReportShop.tgQuantity.dbFilter:= ('SELECT id FROM inProduct WHERE id_typein=2');

  frmReportShop.tgQuantity.Columns[0].Header.Caption := langIniG.ReadString('col','col32', 'Имя товара');
  frmReportShop.tgQuantity.Columns[1].Header.Caption := langIniG.ReadString('col','col33', 'Штрих код');
  //frmReportShop.tgQuantity.Columns[2].Header.Caption := langIniG.ReadString('col','col25', 'Цена');
  frmReportShop.tgQuantity.Columns[2].Header.Caption := langIniG.ReadString('col','col24', 'Дата');
  frmReportShop.tgQuantity.Columns[3].Header.Caption := langIniG.ReadString('col','col26', 'Колличество');

  RP:='bInBak';
end;

procedure frmReportShop_bOutCancel_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then frmReportShop.tgQuantity.Visible:=True;

  frmReportShop.bPrintQuantity.Visible:=False ;
  frmReportShop.bPrintOut.Visible:=True ;
  frmReportShop.bPrint.Visible:=False ;

  frmReportShop.dtpAfter.dbTable := 'outProduct';
  frmReportShop.dtpAfter.dbField := 'dateOuT';
  frmReportShop.dtpBefore.dbTable := 'outProduct';
  frmReportShop.dtpBefore.dbField := 'dateOuT';

  frmReportShop.cbInBakFilter.dbItemID:=-1;
  frmReportShop.cbOutBakFilter.dbItemID:=2;

  frmReportShop.tgQuantity.dbFilter:= ('SELECT id FROM outProduct WHERE id_typeOut>1');

  frmReportShop.tgQuantity.Columns[0].Header.Caption := langIniG.ReadString('col','col32', 'Имя товара');
  frmReportShop.tgQuantity.Columns[1].Header.Caption := langIniG.ReadString('col','col33', 'Штрих код');
  //frmReportShop.tgQuantity.Columns[2].Header.Caption := langIniG.ReadString('col','col25', 'Цена');
  frmReportShop.tgQuantity.Columns[2].Header.Caption := langIniG.ReadString('col','col24', 'Дата');
  frmReportShop.tgQuantity.Columns[3].Header.Caption := langIniG.ReadString('col','col26', 'Колличество');

  RP:='bOutCancel';
end;

procedure frmReportShop_bBay_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then frmReportShop.tgQuantity.Visible:=True;

  frmReportShop.bPrintQuantity.Visible:=False ;
  frmReportShop.bPrintOut.Visible:=True ;
  frmReportShop.bPrint.Visible:=False ;

  frmReportShop.dtpAfter.dbTable := 'outProduct';
  frmReportShop.dtpAfter.dbField := 'dateOuT';
  frmReportShop.dtpBefore.dbTable := 'outProduct';
  frmReportShop.dtpBefore.dbField := 'dateOuT';

  frmReportShop.cbInBakFilter.dbItemID:=-1;
  frmReportShop.cbOutBakFilter.dbItemID:=1;

  frmReportShop.tgQuantity.dbFilter:= ('SELECT id FROM outProduct WHERE id_typeOut=1');

  frmReportShop.tgQuantity.Columns[0].Header.Caption := langIniG.ReadString('col','col32', 'Имя товара');
  frmReportShop.tgQuantity.Columns[1].Header.Caption := langIniG.ReadString('col','col33', 'Штрих код');
  frmReportShop.tgQuantity.Columns[2].Header.Caption := langIniG.ReadString('col','col25', 'Цена');
  frmReportShop.tgQuantity.Columns[3].Header.Caption := langIniG.ReadString('col','col24', 'Дата');
  frmReportShop.tgQuantity.Columns[4].Header.Caption := langIniG.ReadString('col','col26', 'Колличество');

  RP:='bBay';
end;

procedure frmReportShop_bOut_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then frmReportShop.tgQuantity.Visible:=True;

  frmReportShop.bPrintQuantity.Visible:=False ;
  frmReportShop.bPrintOut.Visible:=True ;
  frmReportShop.bPrint.Visible:=False ;

  frmReportShop.dtpAfter.dbTable := 'outProduct';
  frmReportShop.dtpAfter.dbField := 'dateOuT';
  frmReportShop.dtpBefore.dbTable := 'outProduct';
  frmReportShop.dtpBefore.dbField := 'dateOuT';

  frmReportShop.cbInBakFilter.dbItemID:=-1;
  frmReportShop.cbOutBakFilter.dbItemID:=-1;

  frmReportShop.tgQuantity.Columns[0].Header.Caption := langIniG.ReadString('col','col32', 'Имя товара');
  frmReportShop.tgQuantity.Columns[1].Header.Caption := langIniG.ReadString('col','col33', 'Штрих код');
  frmReportShop.tgQuantity.Columns[2].Header.Caption := langIniG.ReadString('col','col24', 'Дата');
  frmReportShop.tgQuantity.Columns[3].Header.Caption := langIniG.ReadString('col','col26', 'Колличество');

  RP:='bOut';
end;

procedure frmReportShop_bin_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then frmReportShop.tgQuantity.Visible:=True;

  frmReportShop.bPrintQuantity.Visible:=False ;
  frmReportShop.bPrintOut.Visible:=False ;
  frmReportShop.bPrint.Visible:=True ;

  frmReportShop.dtpAfter.dbTable := 'inProduct';
  frmReportShop.dtpAfter.dbField := 'dateIn';
  frmReportShop.dtpBefore.dbTable := 'inProduct';
  frmReportShop.dtpBefore.dbField := 'dateIn';

  frmReportShop.cbInBakFilter.dbItemID:=-1;
  frmReportShop.cbOutBakFilter.dbItemID:=-1;

  frmReportShop.tgQuantity.Columns[0].Header.Caption := langIniG.ReadString('col','col32', 'Имя товара');
  frmReportShop.tgQuantity.Columns[1].Header.Caption := langIniG.ReadString('col','col33', 'Штрих код');
  frmReportShop.tgQuantity.Columns[2].Header.Caption := langIniG.ReadString('col','col24', 'Дата');
  frmReportShop.tgQuantity.Columns[3].Header.Caption := langIniG.ReadString('col','col26', 'Колличество');

  RP:='bin';
end;

procedure frmReportShop_bQuantity_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then frmReportShop.tgQuantity.Visible:=True;

  frmReportShop.bPrintQuantity.Visible:=True;
  frmReportShop.bPrintOut.Visible:=False;
  frmReportShop.bPrint.Visible:=False ;

  frmReportShop.cbInBakFilter.dbItemID:=-1;
  frmReportShop.cbOutBakFilter.dbItemID:=-1;

  frmReportShop.dtpAfter.Checked:=False;
  frmReportShop.dtpBefore.Checked:=False;

  frmReportShop.tgQuantity.Columns[0].Header.Caption := langIniG.ReadString('col','col32', 'Имя товара');
  frmReportShop.tgQuantity.Columns[1].Header.Caption := langIniG.ReadString('col','col33', 'Штрих код');
  frmReportShop.tgQuantity.Columns[2].Header.Caption := langIniG.ReadString('col','col25', 'Цена');
  frmReportShop.tgQuantity.Columns[3].Header.Caption := langIniG.ReadString('col','col26', 'Колличество');

  RP:='bQuantity';
end;

procedure frmReportShop_OnShow (Sender: TObject; Action: string);
var
  sini:TIniFile;
begin
  sini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting/reports.ini');
  frmReportShop.tgQuantity.Visible:=False;
  frmReportShop.tgQuantity.Visible:=False;
  frmReportShop.Panel17.Visible:=False;
  frmReportShop.eQuantity.Text:=sini.ReadString('shop','OpQu','');
  frmReportShop.eIn.Text:=sini.ReadString('shop','OpIn','');
  frmReportShop.eOut.Text:=sini.ReadString('shop','OpOu','');
  frmReportShop.eBay.Text:=sini.ReadString('shop','OpBa','');
  frmReportShop.eOutCancel.Text:=sini.ReadString('shop','OpOC','');
  frmReportShop.ebInBak.Text:=sini.ReadString('shop','OpBk','');
  sini.Free;
end;

procedure frmReportShop_bSetting_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmReportShop.tgQuantity.Visible:=False;
  frmReportShop.Panel17.Visible:=True;
end;
//***********************************************************************************************
//диолог выбора файла отчета---------------------------------------------------------------------
//***********************************************************************************************
procedure frmReportShop_bOpenbInBak_OnClick (Sender: TObject; var Cancel: boolean);
var
  sini:TIniFile;
  OpenDialog : TOpenDialog;
begin
   sini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting/reports.ini');
   OpenDialog := TOpenDialog.Create(frmReportShop);
   openDialog.Filter :='Report File|*.fr3';
   IF OpenDialog.execute then
   begin
      frmReportShop.ebInBak.Text:=OpenDialog.Filename;
      sini.WriteString('shop','OpBk',OpenDialog.Filename);
   end;
   OpenDialog.Free;
   sini.Free;
end;

procedure frmReportShop_bOpenOutCancel_OnClick (Sender: TObject; var Cancel: boolean);
var
  sini:TIniFile;
  OpenDialog : TOpenDialog;
begin
   sini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting/reports.ini');
   OpenDialog := TOpenDialog.Create(frmReportShop);
   openDialog.Filter :='Report File|*.fr3';
   IF OpenDialog.execute then
   begin
      frmReportShop.eOutCancel.Text:=OpenDialog.Filename;
      sini.WriteString('shop','OpOC',OpenDialog.Filename);
   end;
   OpenDialog.Free;
   sini.Free;
end;

procedure frmReportShop_bOpenBay_OnClick (Sender: TObject; var Cancel: boolean);
var
  sini:TIniFile;
  OpenDialog : TOpenDialog;
begin
   sini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting/reports.ini');
   OpenDialog := TOpenDialog.Create(frmReportShop);
   openDialog.Filter :='Report File|*.fr3';
   IF OpenDialog.execute then
   begin
      frmReportShop.eBay.Text:=OpenDialog.Filename;
      sini.WriteString('shop','OpBa',OpenDialog.Filename);
   end;
   OpenDialog.Free;
   sini.Free;
end;

procedure frmReportShop_bOpenOut_OnClick (Sender: TObject; var Cancel: boolean);
var
  sini:TIniFile;
  OpenDialog : TOpenDialog;
begin
   sini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting/reports.ini');
   OpenDialog := TOpenDialog.Create(frmReportShop);
   openDialog.Filter :='Report File|*.fr3';
   IF OpenDialog.execute then
   begin
      frmReportShop.eOut.Text:=OpenDialog.Filename;
      sini.WriteString('shop','OpOu',OpenDialog.Filename);
   end;
   OpenDialog.Free;
   sini.Free;
end;

procedure frmReportShop_bOpenIn_OnClick (Sender: TObject; var Cancel: boolean);
var
  sini:TIniFile;
  OpenDialog : TOpenDialog;
begin
   sini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting/reports.ini');
   OpenDialog := TOpenDialog.Create(frmReportShop);
   openDialog.Filter :='Report File|*.fr3';
   IF OpenDialog.execute then
   begin
      frmReportShop.eIn.Text:=OpenDialog.Filename;
      sini.WriteString('shop','OpIn',OpenDialog.Filename);
   end;
   OpenDialog.Free;
   sini.Free;
end;

procedure frmReportShop_bOpenQuantity_OnClick (Sender: TObject; var Cancel: boolean);
var
  sini:TIniFile;
  OpenDialog : TOpenDialog;
begin                         
   sini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting/reports.ini');
   OpenDialog := TOpenDialog.Create(frmReportShop);
   openDialog.Filter :='Report File|*.fr3';    
   IF OpenDialog.execute then
   begin
      frmReportShop.eQuantity.Text:=OpenDialog.Filename;
      sini.WriteString('shop','OpQu',OpenDialog.Filename);
   end;
   OpenDialog.Free;
   sini.Free;
end;

//***********************************************************************************************
//редактирование файла отчета--------------------------------------------------------------------
//***********************************************************************************************

procedure frmReportShop_bEditbInBak_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmReportShop.bEditbInBak.dbReportFile := frmReportShop.ebInBak.Text;
end;

procedure frmReportShop_bEditOutCancel_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmReportShop.bEditOutCancel.dbReportFile := frmReportShop.eOutCancel.Text;
end;

procedure frmReportShop_bEditBay_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmReportShop.bEditBay.dbReportFile := frmReportShop.eBay.Text;
end;

procedure frmReportShop_bEditOut_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmReportShop.bEditOut.dbReportFile := frmReportShop.eOut.Text;
end;

procedure frmReportShop_bEditIn_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmReportShop.bEditIn.dbReportFile := frmReportShop.eIn.Text;
end;

procedure frmReportShop_bEditQuantity_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmReportShop.bEditQuantity.dbReportFile := frmReportShop.eQuantity.Text;
end;

//***********************************************************************************************
//выбор отчета для печати------------------------------------------------------------------------
//***********************************************************************************************
procedure frmReportShop_bPrint_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then cancel:=True else
  if RP='bInBak' then frmReportShop.bPrint.dbReportFile := frmReportShop.ebInBak.Text else
  if RP='bin' then frmReportShop.bPrint.dbReportFile := frmReportShop.ein.Text else
end;
procedure frmReportShop_bPrintOut_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then cancel:=True else
  if RP='bOutCancel' then frmReportShop.bPrintOut.dbReportFile := frmReportShop.eOutCancel.Text else
  if RP='bBay' then frmReportShop.bPrintOut.dbReportFile := frmReportShop.eBay.Text else
  if RP='bOut' then frmReportShop.bPrintOut.dbReportFile := frmReportShop.eOut.Text else
end;
procedure frmReportShop_bPrintQuantity_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then cancel:=True else
  if RP='bQuantity' then frmReportShop.bPrintOut.dbReportFile := frmReportShop.eQuantity.Text;
end;
//***********************************************************************************************
//формирование id и имени продукта при списании или возврате товара------------------------------
//***********************************************************************************************
procedure frmReasonForFReturn_eCode_OnChange (Sender: TObject);
begin
  frmReasonForFReturn.cbCodeProduct.dbItemID := SQLExecute('SELECT id FROM magazin WHERE codeProduct='+frmReasonForFReturn.eCode.Text);
  if SQLExecute('SELECT id FROM magazin WHERE codeProduct='+frmReasonForFReturn.eCode.Text) then begin
    frmReasonForFReturn.lNameProduct.Caption := SQLExecute('SELECT nameProduct FROM magazin WHERE codeProduct='+frmReasonForFReturn.eCode.Text);
    frmReasonForFReturn.eQuantity.Enabled:=True;
    frmReasonForFReturn.mReason.Enabled:=True;
    frmReasonForFReturn.bWriteOff.Enabled:=True;
  end;
end;

procedure frmReasonForCancellation_eCode_OnChange (Sender: TObject);
begin
  frmReasonForCancellation.cbCodeProduct.dbItemID := SQLExecute('SELECT id FROM magazin WHERE codeProduct='+frmReasonForCancellation.eCode.Text);
  if SQLExecute('SELECT id FROM magazin WHERE codeProduct='+frmReasonForCancellation.eCode.Text) then begin
    frmReasonForCancellation.lNameProduct.Caption := SQLExecute('SELECT nameProduct FROM magazin WHERE codeProduct='+frmReasonForCancellation.eCode.Text);
    frmReasonForCancellation.eQuantity.Enabled:=True;
    frmReasonForCancellation.mReason.Enabled:=True;
    frmReasonForCancellation.bWriteOff.Enabled:=True;
  end;
end;

//***********************************************************************************************
//открытие форм возврата и списания товара-------------------------------------------------------
//***********************************************************************************************
procedure frmReasonForFReturn_OnShow (Sender: TObject; Action: string);
begin
  frmReasonForFReturn.eCode.Clear;
  frmReasonForFReturn.eQuantity.Clear;
  frmReasonForFReturn.mReason.Clear;
  frmReasonForFReturn.lNameProduct.Caption:='***********************';

  frmReasonForFReturn.eQuantity.Enabled:=False;
  frmReasonForFReturn.mReason.Enabled:=False;
  frmReasonForFReturn.bWriteOff.Enabled:=False;


end;

procedure frmReasonForCancellation_OnShow (Sender: TObject; Action: string);
begin
  frmReasonForCancellation.eCode.Clear;
  frmReasonForCancellation.eQuantity.Clear;
  frmReasonForCancellation.mReason.Clear;
  frmReasonForCancellation.lNameProduct.Caption:='***********************';

  frmReasonForCancellation.eQuantity.Enabled:=False;
  frmReasonForCancellation.mReason.Enabled:=False;
  frmReasonForCancellation.bWriteOff.Enabled:=False;


end;
procedure frmReportShop_bExel_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if frmReportShop.tgQuantity.Visible=False then cancel:=True;
end;

//***********************************************************************************************
//открыть форму с описанием причины возврата или списания----------------------------------------
//***********************************************************************************************

procedure frmReportShop_tgQuantity_OnCellDoubleClick (Sender: TObject; ACol, ARow: Integer);
begin
  if RP='bInBak' then begin
   frmCause.ShowRecord('inProduct',StrToInt(SQLEXecute('SELECT id From inProduct WHERE id='+frmReportShop.tgQuantity.sqlValue)));
   frmCause.Caption:='Причина возврата';
   end;
   if RP='bOutCancel' then begin
   frmCause.ShowRecord('outProduct',StrToInt(SQLEXecute('SELECT id From outProduct WHERE id='+frmReportShop.tgQuantity.sqlValue)));
   frmCause.Caption:='Причина списания ';
  end;
end;


procedure frmCause_OnShow (Sender: TObject; Action: string);
begin
  if RP='bInBak' then begin
  frmCause.mCauseIn.Visible:=True;
  frmCause.mCauseOut.Visible:=False;
  end;
  if RP='bOutCancel' then  begin
  frmCause.mCauseIn.Visible:=False;
  frmCause.mCauseOut.Visible:=True;
  end;
end;
//***********************************************************************************************
//передача имени файла отчета в форме настройки отчета-------------------------------------------
//***********************************************************************************************

procedure frmreports_cbAdressReport_OnChange (Sender: TObject);
begin
  frmreports.eAdressReport.Text:= frmreports.cbAdressReport.Text;
end;
//***********************************************************************************************
//онлайн магазин запчастей-----------------------------------------------------------------------
//***********************************************************************************************


procedure frmOnlineShop_bLoUt_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmOnlineShop.cbAkk.DroppedDown:=True;
end;

procedure frmOnlineShop_OnShow (Sender: TObject; Action: string);
begin
  frmOnlineShop.cbAkk.Clear;
  frmOnlineShop.cbAkk.Items.add('Карзина');
  frmOnlineShop.cbAkk.Items.add('Настройки');
  frmOnlineShop.cbAkk.Items.add('Настройки поиска');
  frmOnlineShop.cbAkk.Items.add('Мои заказы');
  frmOnlineShop.cbAkk.Items.add('Мой магазин');
  frmOnlineShop.cbAkk.Items.add('Выход');
end;

// процедура создания таблиц
procedure userTab ;
var
NxTextColumn: TNxTextColumn;
begin
    frmAdmin.tgUserApp.Columns.Clear;
      try
        frmAdmin.tgUserApp.Columns.Add(TNxTextColumn);
       except
      end;
      try
        frmAdmin.tgUserApp.Columns.Add(TNxTextColumn);
       except
      end;
      try
        frmAdmin.tgUserApp.Columns.Add(TNxTextColumn);
       except
      end;
      try
        frmAdmin.tgUserApp.Columns.Add(TNxTextColumn);
       except
      end;
      try
        frmAdmin.tgUserApp.Columns.Add(TNxTextColumn);
       except
      end;

 frmAdmin.tgUserApp.Columns[0].Color := clWhite;
 frmAdmin.tgUserApp.Columns[1].Color := clWhite;
 frmAdmin.tgUserApp.Columns[2].Color := clWhite;
 frmAdmin.tgUserApp.Columns[3].Color := clWhite;
 frmAdmin.tgUserApp.Columns[4].Color := clWhite;
 frmAdmin.tgUserApp.HeaderStyle:= hsOffice2007;
 frmAdmin.tgUserApp.Columns[0].Visible := False;
end;

begin

end.
