Розробка програми в Multimedia Builder на прикладі утиліти для віддаленої роботи з касовим



Як ви всі вже зрозуміли, я просто звичайний інженер, але я завжди прагну до того, щоб зробити свою роботу і колег набагато зручніше.

Думаю кожному ІТ-шнику знайома така задача, як автоматизація виконання процесів. Так ось, в процесі своєї роботи з касовим ПО мені довелося зіткнутися з безліччю повсякденних процедур, що стосуються віддаленого доступу та управлінням касою, а також автоматизацією багатьох процедур.

Сам я не програміст. Незважаючи на те, що вивчав VB, VBA, JavaScript і PHP, але все це залишилося на студентській лаві.
Так ось, мені як інженеру набридло кожен раз робити одне і теж і витрачати на це час. І я задався питанням, а чи можна при мінімальних знаннях програмування створити який-небудь засіб автоматизації підтримки касового для виконання повсякденних завдань?



Звернувся до пошуку…

Отже, що знайшлося?

1. MediaChance Multimedia Builder — це програма для створення програм автозапуску компакт-дисків. На жаль, випуск нових версій припинився вже в далекому 2007 році, але деякі ентузіасти продовжують на ній робити різні фішки. Таких програм повно, але що мені сподобалося в цьому середовищі, так це те, що у неї є свій скриптова мова, який на мій погляд досить простий в освоєнні і також є ще купа плагінів.

2. Batch-script — це мова сценаріїв командного рядка Windows, простіше кажучи, дозволяє автоматизувати дії в bat-файл. Також додам від себе, не знаю як для інших, а мені виявилося теж не складно його освоїти і поєднати з MultimediaBuilder.

3. Ну ще в додачу PuTTy і PLink. — думаю всі знають, що це утиліти для віддаленого доступу SSH-протколу до *nix-систем.

Отже, у нас в компанії є серверне ПЗ і касові програми для роботи магазину. Але як ви всі розумієте в процесі роботи виникають ситуації, коли потрібно віддалено підключитися до магазину.

Я вирішив спростити собі життя і розробив утиліту для вирішення цієї задачі. На мій подив, утиліта сподобалася моїм колегам, і зараз доволі популярна серед інженерів компанії.
Ще раз хочу зазначити, що я не професійний програміст, так що наступна критика, яка буде летіти в мою адресу в плані правильності оптимізації та написання коду, приймається і заохочується.

Завдання: потрібно дуже часто віддалено перезавантажувати касу, яка працює під ОС Linux.

Створюємо проект в Multimedia Builder і впроваджуємо в нього так званий вбудований об'єкт «Embedded»:



А на кнопку просто вішаємо подія, яке буде запускати bat-файл, який буде смикати plink.exe з параметрами. Вийшла ось така проста програма:



Варто відзначити, що коли робиш Embedded Files в Multimedia Builder, то при відкритті проги, всі вбудовані файли автоматично розпаковуються в тимчасову директорію і саме звідти будуть запускатися.



Натиснувши на кнопку, просто з'являється рядок, яка з bat-файлу виконує найпростіший код.

SET /p ipcash=Enter CashIP:
plink.exe tc@%ipcash% -pw "12345" "sudo /sbin/reboot" 




Знаю, що можливо для багатьох розповідаю речі досить банальні, але для мене, як людини опановував ази автоматизації, це все було і залишається цікавим донині.

Що зробив далі? — А дуже просто, виклав на корпоративний ресурс і розіслав лист колегам, що мовляв ось є така штучка.

І що ви думаєте? — Народ почав користуватися, а відповідно і з'явилися хотілки.

Ще раз зазначу, що створюючи таку штуку, я осягав усе просто з нуля про те, як писати batch-скрипти до bash-скриптів і. т. п.

Ну і далі вийшла вже наступна версія. Тобто вже з'явилися дві кнопочки.



І потім пішло-поїхало. Причому варто відзначити, що чим далі я заглиблювався в процес вивчення автоматизації процесів по роботі з віддаленим зв'язком, тим більше у мене у самого з'являлися ідеї, як щось зробити, краще щоб нашому саппорт було зручніше.

З'явилася знову наступна версія:



І наступна версія:



І ще така версія:



І так версію за версією, зростання інтересу і моїх знань.

Потім я вивчив як робити інсталяційні пакети і програма отримала свій інсталятор:



Ну і функціоналу додалося:



І зараз, через два роки це виглядає так:







Зараз можна сказати, що це хороший інструмент управління серверами і касами. Навіть сам би не подумав, що зміг таке написати.

Щоб про неї розповісти не вистачить вже на жаль сил у пальців руки, так як вона починалася лише з мого простого захоплення або питання самому собі: А як перезавантажити віддалено комп на Лінуксі (у нас касове на Лінуксі)?

У що воно перетворилося за 4 роки ви бачили вище.

Але давайте тепер поділюся тим, як, наприклад я там все реалізую.

Отже, інтерфейс зі списком кас ви бачили, тепер про реалізації деяких функцій. Відразу повторюся, що я можна сказати любитель, і все осягав з нуля, так що будь-яка критика і зауваження від профі тільки вітаються.

1. Пінг
Я відразу захотів в моїх фантазіях, щоб клацнувши на кнопочку, можна було б пінговать касу і при цьому, щоб вона підсвічувалася певним кольором.



Накодил ось таку річ:

srok1$=cs1$
File1$='cashes/01c.txt'
Rv1=StrToFile(File1$,srok1$,FALSE,FALSE)
clear$="
srok1$='For /F "Delims=" %%I In (01c.txt) Do Set c01=%%~I'
srok2$='Ping-n 1-w 1 %c01% >nul'
srok3$='If %ErrorLevel%==0 ('
srok4$=' <nul set /p strTemp=a>c01ping.txt'
srok5$=') Else ('
srok6$=' <nul set /p strTemp=n>c01ping.txt'
srok7$=')'
File3$='cashes/c01ping_mmb.bat'
Rv=StrToFile(File3$,clear$,FALSE,FALSE)
Rv=StrToFile(File3$,srok1$,TRUE,TRUE)
Rv=StrToFile(File3$,srok2$,TRUE,TRUE)
Rv=StrToFile(File3$,srok3$,TRUE,TRUE)
Rv=StrToFile(File3$,srok4$,TRUE,TRUE)
Rv=StrToFile(File3$,srok5$,TRUE,TRUE)
Rv=StrToFile(File3$,srok6$,TRUE,TRUE)
Rv=StrToFile(File3$,srok7$,TRUE,TRUE)
Run("<SrcDir>\cashes\c01ping_mmb.bat","HIDE")
Pause("1000")
path1$ = 'cashes/c01ping.txt'
col1$='0,255,0'
col2$='255,0,0'
LoadText("r1$","FILE:path1$")
If (r1$='a') Then
SetObjectParam("bt1","BGCOLOR=col1$")
Else
If (r1$='n') Then
SetObjectParam("bt1","BGCOLOR=col2$")
End
End


Суть в тому, що відразу при натисканні на кнопку «пінг»ip-адреса записується у файл для цього поля де адресу. Далі генера код для батника, який буде читати ip-адресу з текстового файлу і запускаємо його. За результатом батника генерується файл відповідь «n» або «a» і в залежності від цього вже читаючи результат фарбуємо кнопку. Так звичайно по-аматорськи, але працює.

2. Запуск putty.exe без введення логіна і пароля.



Всі з вас знають, що якщо підключатися PuTTy стандартним способом, то потрібно ввести логін і пароль. Найчастіше у нас в сервісі потрібно швидко підключатися до каси і, в принципі, логін і пароль у більшості випадків на них за замовчуванням.

Якщо запустити PuTTy, то буде приблизно наступне:



Але я подумав, чому б не зробити так: клацнув по кнопочці і в тебе відразу відкрилася командний рядок SSH.

Народився ось такий аматорський код:

srok1$=cs1$
File1$='cashes/01c.txt'
Rv1=StrToFile(File1$,srok1$,FALSE,FALSE)
clear$="
srok01$='For /F "Delims=" %%I In (cashes/01c.txt) Do Set c01=%%~I'
srok02$='REG ADD HKCU\Software\SimonTatham\PuTTY\Sessions\%c01% /f'
srok03$='REG ADD "HKCU\Software\SimonTatham\PuTTY\Sessions\%c01%" /f /v HostName /t REG_SZ /d %c01%'
srok04$='REG ADD "HKCU\Software\SimonTatham\PuTTY\Sessions\%c01%" /f /v LineCodePage /t REG_SZ /d UTF-8'
srok05$='echo y | plink.exe tc@%c01% -pw "12345" exit'
srok06$='putty.exe -load %c01% tc@%c01% -pw "12345"'
File3$='run_putty.bat'
Rv=StrToFile(File3$,clear$,FALSE,FALSE)
Rv=StrToFile(File3$,srok01$,TRUE,TRUE)
Rv=StrToFile(File3$,srok02$,TRUE,TRUE)
Rv=StrToFile(File3$,srok03$,TRUE,TRUE)
Rv=StrToFile(File3$,srok04$,TRUE,TRUE)
Rv=StrToFile(File3$,srok05$,TRUE,TRUE)
Rv=StrToFile(File3$,srok06$,TRUE,TRUE)
Run("run_putty.bat","HIDE")
RunScript("ssh_log_1")


Логіка:
  1. Записуємо ip-адресу в текстовий файл.
  2. Далі генера батник.
  3. При запуску в змінні батника підставляється ip-адресу.
  4. Сесія додається до реєстру.
  5. PuTTy.exe відкриває ссесию.
І вуаля:



3. Віддалений VNC-сервер.
Також у нас на касах є можливість віддаленого підключення по протоколу VNC-сервера, для того, щоб можна було дивитися, що там касири роблять.

Для цього я взяв Real VNC Viewer.

Далі вийшов ось такий код:

srok1$=cs1$
File1$='cashes/01c.txt'
Rv1=StrToFile(File1$,srok1$,FALSE,FALSE)
clear$="
srok01$='For /F "Delims=" %%I In (cashes/01c.txt) Do Set c01=%%~I'
srok02$='rem SET /p ipcash=Enter CashIP run for remote DeskTop:'
srok03$='echo n | plink.exe -v-ssh tc@%c01% -pw "12345" -m rdp_vnc_cmd.txt'
srok04$='vncviewer.exe %c01%'
File3$='rn_vnc_mmb.bat'
Rv=StrToFile(File3$,clear$,FALSE,FALSE)
Rv=StrToFile(File3$,srok01$,TRUE,TRUE)
Rv=StrToFile(File3$,srok02$,TRUE,TRUE)
Rv=StrToFile(File3$,srok03$,TRUE,TRUE)
Rv=StrToFile(File3$,srok04$,TRUE,TRUE)
Message("Зараз буде запущений сеанс віддаленого зв'язку. Натисніть ОК і зачекайте декілька секунд.","")
Run("rn_vnc_mmb.bat","HIDE")
RunScript("vnc_log_1")


Логіка:
  1. Записуємо ip-адресу в текстовий файл.
  2. Генера батник, який з цього текстового файлу читає ip-адресу.
  3. Далі запускається vncviewer.exe, який читає сесію.
Ну і власне відкривається сеанс:



Ось як-то так.

Насправді є ще купа всяких примочок.



А виглядає тепер все це вже так через 2 роки, як я почав вивчати всі:



І звичайно, не обійшлося без сюрпризів. Зробив одну недавно: якщо випадково подекуди клікнути мишкою, то потрапляєш в секретний розділ, де багато всяких фішок, ну так, щоб повеселити колег!



Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.