Как стать автором
Обновить
53.39
Crystal Service Integration
Решения для сетевого ритейла: ПО и оборудование

Разработка программы в Multimedia Builder на примере утилиты для удаленной работы с кассовым ПО

Время на прочтение6 мин
Количество просмотров11K



Как вы все уже поняли, я просто обычный инженер, но я всегда стремлюсь к тому, чтобы сделать свою работу и коллег намного удобнее.

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

Сам я не программист. Несмотря на то, что изучал 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 for run 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 года, как я начал все изучать:




И конечно, не обошлось без пасхалок. Сделал одну недавно: если случайно кое-где кликнуть мышкой, то попадаешь в секретный раздел, где много всяких фишек, ну так, чтобы коллег повеселить!

Теги:
Хабы:
+16
Комментарии12

Публикации

Информация

Сайт
www.crystals.ru
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия