Так сложилось, что уже лет 10 назад я писал программу для автоматизации работы бильярдной на 1с версии 7.7. Программа (т.е. конфигурация) вышла удачаная, она до сих пор работает в нескольких залах, причем сама база расположена на удаленном сервере, а компьютеры залов подключаются через интернет по протоколу RDP. На самих компьютерах маркеров стоят кассовые аппараты, считыватели скидочных смарт-карт и главное - коммутаторы, которые включают / выключают освещение на столах. Все это работает через СОМ порты, которые RDP успешно прокидывает. Коммутаторы делал тоже я, это такая платка с микроконтроллером и симисторами с опторазвязкой, которая имеет свой протокол обмена и по командам от маркера включает или выключает какой надо стол.

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

вот точно таких
вот точно таких

Вот такого вида. Все с ними было нормально, только изношены блоки питания и компьютеры, которые стоят внутри. Я провел техобслуживание, все почистил, сделал дубликаты ключей, заменил материнки и блоки питания, терминалы нормально завелись. Из интеренсного в них имелось:

  • сенсорный экран

  • термпоринтер 80 мм

  • купюроприемник

  • бронекорпус

Потихоньку я нашел драйвера для всей этой техники (кроме корпусов, они работают без драйверов ;-)), установил операционную систему и добился нормальной работы. Надо что-то с ними было решать, место они занимают, тяжеленные, в гараже их жалко на морозе хранить, домой тоже убьюсь тащить и я решил их прикрутить к делу. Для дела была выбрана новая версия бильярдной программы, которую я как раз писал для новых заказчиков. В бильярде главное чтобы маркеры не воровали ;-) а они это любят: то столы пытаются включить без учета в программе, а деньги с клиента себе в карман, то клиента учесть со скидкой по программе, а реально взять деньги без скидок, да еще что-то могут придумывать. А тут меня крутейшее решение: клиенты сами вставляют деньги в купюроприемник и стол загорается настолько, насколько оплатили. Грустному маркеру остается только выбить чек.

Но времена сейчас такие что наличка есть далеко не у всех, кто-то картой хочет платить, кто-то по qr коду через сбп. И я начал думать как это мне прикрутить к программе. Вначале я нашел формат платежного qr кода. Там внутри просто текст: номер расчетного счета, инн, кпп и прочая информация. Это все кодируется в qr код и по нему, да, можно платить. Но вот беда, если у клиента и зала разные банки, то деньги приходят через несколько часова то и дней! Это конечно способ фиговый. т. е. это даже не сбп, а просто фактически платеж по реквизитам. И я стал искать информацию как сделать нормальный qr код для сбп. Т.к. банк использовался Тинькофф (или Т банк), я и начал от него плясать. Там есть такой «Интернет эквайринг» а у него есть API — т. е. описание методов, их аргументов чтобы делать разные операции. Причем все это мне надо было вызывать из 1С 8.3 и примеров я нормальных найти не смог. Все это API это post и get запросы. А я уже имел с ними дело, когда парсил авито и даже вытаскивал телефоны из объявлений.

Самый главный метод там был INIT - именно он начинал платежную сессию. У метода были некоторые важные аргументы: номер платежного терминала, пароль, номер платежной сессии и другие. Также был весьма непросто сам способ формирования тела запроса, нужно было особым образом дополнить запрос, сформировать строку с последовательностью аргументов, применить к ней процедуру шифрования и потом то что получилсь добавить в тело запроса. Причем для получения учетных данных тинькофф использует весьма долгую и неочевидную процедуру: там есть демо терминалы, я должен на них пройти несколько тестов потом еще что-то включить, создать магазин и только тогда включают боевой режим. В общем весь этот квест у меня занял неделю, но в итоге все вышло.

Вот так выглядит основное рабочее окно на терминале самообслуживания
Вот так выглядит основное рабочее окно на терминале самообслуживания

После запуска программы открывается рабочее окно. Все реализовано на 1С8.3 на управляемых формах. Причем программа может работать как в режиме тонкого клиента, так и через браузер:

Работа через браузер в полноэкранном режиме
Работа через браузер в полноэкранном режиме

Пользователь может тыкать в сенсорный экран (мышь и клавиатура не предусмотрены), все места где надо вводить текст или цифры сделаны с учетом ввода путем нажатия экранных кнопок:

Клиент должен авторизоваться по номеру телефона или смарт-карте
Клиент должен авторизоваться по номеру телефона или смарт-карте

После того как клиент авторизуется он может или начинать игру или проводить финансовые операции: просмотр своего депозита или добавление средств на депозит:

Слева работа с купюроприемником, справа пополнение через СБП
Слева работа с купюроприемником, справа пополнение через СБП

В центре полученный из банка QR код. С ним тоже была беда. Для получения qr кода в банковском api есть метод getqr. Это тоже post запрос. Причем возвращать он может или ссылку на страницу уже с самим готовым кодом или просто сам код. В виде картинки. Мне не нужны никакие лишние страницы, поэтому я выбрал код. Ну, думаю щас получу BMP или JPG или гифчик какой, но нет! QR код банк возвращает в формате SVG. Я про такой и не слышал! Но 1С с ним работать умеет. А формат этот векторый и текстовый. Т.е. огромная простыня с командами рисования примитивов. Беда была в том что полученный SVG никто не мог показать. Ни 1С, ни браузеры ни кто! Т.е. этот qr код был какой-то дефектный. Сел я за сличение разных файлов и вот что понял:

вот кусок SVG файла из банка
вот кусок SVG файла из банка
а вот читабельный
а вот читабельный

Видите, в чем дело?! У банка дохрена лишних палок перед кавычками. Пришлось их искусственно вырезать уже в 1С. И то что получилось стало отображсяться! Правда была еще одна достадная неприятность. Браузеры показывали QR код как надо, а 1С - нет!

Вот так QR код показывала 1С
Вот так QR код показывала 1С

Я обратился в техподдержку банка, но там меня сначала послали в 1с прямо к Нуралиеву, а потом уже прямо к Биллу Гейтсу. Типа сам выпрямляй себе QR коды! Что делать, пришлось копать дальше. Как я уже писал формат SVG текстовый, поэтому картинку можно открыть прямо блокнотом. И попытаться разобраться где эта часть что рисует логотип СБП. И я его нашел! Это было в самом конце файла. После того как я вставил возвраты каретки чтобы было удобнее читать стало выглядеть так:

неправильно отображается в 1с
неправильно отображается в 1с

Как я понял что строка

<svg x="56" y="56" и далее меняет начало координат. И дальше все цветные фигурки рисуются не в верхнем левом углу, а в середине рисунка. И эта команда почему-то не воспринимается 1С. Путем чтения инета я нашел еще одну команду и просто после получения qr кода уже в 1С менял эту строку на

подобрал сам цифры, чтобы стало как надо
подобрал сам цифры, чтобы стало как надо

цифры долго подбирал. В итоге чертов логотип отображается как надо, посередине. В итоге клиент может оплатить игру по СБП или нажимая на платежную ссылку, просто введя реквизиты карты.

После оплаты клиент уже может начать игру. Тыкая в свободный стол, выбирает как он хочет играть: свободная игра или с фиксированным временем:

выбор времени игры
выбор времени игры

Дальше программа включает стол и он показывается в списке как включенный.

Таким образом удалось автоматизировать бильярдный зал. Конечно подобная система может быть использована для самообслуживания клиентов прочих заведений: фитнес клубов, салонов красоты, кафе и прочих точек.

Комментарии (1)


  1. vindy
    11.07.2025 02:22

    Грустному маркеру остается только выбить чек.

    Фискальный принтер воткнуть в терминал и получить полностью самодостаточное решение, не?