Frontol Добавление карты клиента через скрипт

Рейтинг: 0Ответов: 1Опубликовано: 31.07.2023

Всем доброго времени суток, я молодой и неопытный программист, что пытается найти себя и работать со всем, что двигается, а если не двигается - двигать и работать. Я создаю скрипт для программного обеспечения Frontol кассового аппарата на JavaScript. Нужно было создать скрипт, который предлагал бы купить карту клиента, если цена на карте меньше, чем без нее. Самым простым и оптимальным решением было добавить тестовую карточку клиента, сравнить цены, а затем удалить ее. Проблема в том, что внутренняя функциональность Frontol 6.18 не работает для добавления клиентской карты. Либо так оно и есть, и я слишком плохо ищу информацию. Может быть, есть знающие люди, которые могут помочь с этим?

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

if(frontol.currentDocument.card.count == 0){ 
    var WShell = new ActiveXObject("WScript.Shell");
    WShell.SendKeys("%x"); // Открытие окна ввода карты клиента
}

Если поступать тем же методом и добавить ещё "WShell.SendKeys("номер карты");", этот номер вставится где угодно, но только не в этом окне.

ИЗМЕНЕНО

Методом тыка понял, что скорее это даже абсурдная идея, имитировать нажатие клавиш.

if(frontol.currentDocument.card.count == 0){
  var WShell = new ActiveXObject("WScript.Shell");
  WShell.SendKeys("^{F7}358800{ENTER}");
  total = frontol.currentDocument.sum;
  cancelCard();
  if(total > frontol.currentDocument.sum){
    frontol.actions.cancel();
    frontol.actions.showMessage("Цена с картой клиента: " + total);
  }
}

Проблема заключается в асинхронности WShell, от чего total уже где-то когда-то был рассчитан, а должен рассчитываться после добавления карты. Отмена карты вообще не доходит, а если и доходит, то остаётся лишь догадываться, когда. Момент появления окна ввода карты хоть и мимолётный, но невооружённым взглядом заметен. Нужен совет, как это решить или шлёпнуть по голове и сказать, как логичнее поступить.

Работа с клиентом и картами происходит через Jamm. Но информации в общем доступе о нём будто нету. Спасибо заранее.

Ответы

▲ 0

Могу ошибаться, но надо попробовать использовать компонент HtmlApplication, через который можно программно взаимодействовать с элементами интерфейса Frontol - вводить данные в поля, нажимать кнопки и т.д.

Например:

// Получаем ссылку на HtmlApplication
var app = frontol.HtmlApplication;

// Находим нужное окно
var wnd = app.FindWindow("НазваниеОкнаКарты"); 

// Находим поле для ввода номера карты
var tbCardNumber = wnd.FindObject("TbCardNumber");

// Вводим тестовый номер карты
tbCardNumber.Value("1234567890");  

// Нажимаем кнопку применения 
wnd.FindObject("BtnApply").DoClick();

// Проверяем цену и предлагаем карту
// ...

// Удаляем тестовую карту
// ...