Работа в веб-клиенте 1С:Предприятие накладывает ряд существенных ограничений, особенно когда речь идет о взаимодействии с локальным торговым оборудованием: принтерами чеков, этикеток и сканерами штрихкодов. Основная сложность заключается в архитектуре браузера, который из соображений безопасности изолирует веб-страницу от прямого доступа к аппаратным ресурсам компьютера. В этой статье мы подробно разберем, как преодолеть типичные проблемы «модальности», настроить автоматическую печать без лишних диалоговых окон и добиться корректного отображения штрихкодов на этикетках.
Одной из главных преград при работе в веб-клиенте являются модальные окна. В старых редакциях конфигураций (например, ранние релизы УТ для Украины) часто используются синхронные методы, такие как ВвестиЗначение или ОткрытьФормуМодально. В браузере такие вызовы блокируют исполнение кода и часто ведут к ошибкам или некорректному поведению интерфейса.
Проанализируем типичный проблемный участок кода, который встречается в процедурах поиска по штрихкоду:
Функция ВвестиШтрихкод(Штрихкод, Заголовок = "") Экспорт
Результат = Ложь;
Штрихкод = "";
Если НЕ ЗначениеЗаполнено(Заголовок) Тогда
Заголовок = "Введите штрихкод";
КонецЕсли;
// Модальный вызов, который не рекомендуется в веб-клиенте
Если ВвестиЗначение(Штрихкод, Заголовок) Тогда
Если Не ПустаяСтрока(Штрихкод) Тогда
Результат = Истина;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Для того чтобы этот механизм стабильно работал в веб-клиенте, нам необходимо переписать его с использованием описания оповещения. Вместо того чтобы ждать ответа от пользователя в той же строке кода, мы передаем управление специальной процедуре-обработчику. Рассмотрим, как это реализовано в современных версиях платформы:
Процедура ПоказатьВводШтрихкода(ОповещениеУспешногоВвода, Количество = Неопределено, Заголовок = "") Экспорт
Если НЕ ЗначениеЗаполнено(Заголовок) Тогда
Заголовок = "Введите штрихкод";
КонецЕсли;
ДополнительныеПараметры = Новый Структура("ОповещениеУспешногоВвода, Количество", ОповещениеУспешногоВвода, Количество);
Оповещение = Новый ОписаниеОповещения("ПоказатьВводШтрихкодаЗавершение", ЭтотОбъект, ДополнительныеПараметры);
// Используем немодальный метод
ПоказатьВводЗначения(Оповещение, "", Заголовок);
КонецПроцедуры
В данном случае ПоказатьВводЗначения не останавливает выполнение кода. Как только пользователь введет данные и нажмет "ОК", система сама вызовет процедуру ПоказатьВводШтрихкодаЗавершение. Это критически важно для корректной работы в Google Chrome, Safari или Firefox.
При нажатии кнопки «Пробить чек» в веб-клиенте стандартно открывается окно предварительного просмотра печати браузера. Это замедляет работу кассира и сбивает фокус. Чтобы реализовать автоматическую отправку на принтер, мы можем воспользоваться механизмом «режима киоска» в браузере.
Выясним, как это настроить для Google Chrome:
--kiosk-printing.Важный момент: Для того чтобы принтер чеков подхватывал нужные настройки (ширина ленты 58мм или 80мм), их необходимо заранее задать в настройках драйвера принтера в операционной системе (Панель управления — Устройства и принтеры — Настройки печати). Браузер использует именно системные настройки по умолчанию.
Часто возникает ситуация: на предварительном просмотре в 1С штрихкод виден, а при печати из браузера вместо него отображаются цифры или пустое место. Разберем причину: чаще всего 1С использует специальные шрифты (например, 1C_EAN13) для формирования штрихкода. Веб-клиент может не передать этот шрифт в поток печати браузера должным образом.
Чтобы решить эту проблему, проанализируем настройки макета этикетки. Нам нужно заставить систему выводить штрихкод не как текстовое поле с особым шрифтом, а как графическое изображение. Для этого в коде формирования печатной формы или в настройках обработки печати ценников следует переключить тип вывода штрихкода в режим Рисунок. Картинки (битовые карты) рендерятся всеми браузерами одинаково стабильно, что гарантирует считывание кода сканером.
Для полноценной работы с оборудованием в веб-клиенте недостаточно просто открыть страницу. Нам потребуется установить расширение 1С для браузера и внешние компоненты. Посмотрим на алгоритм действий:
Поскольку веб-клиент генерирует HTML-представление табличного документа, мы можем столкнуться с тем, что браузер добавляет свои колонтитулы (дату, адрес страницы) на чековую ленту. Чтобы этого избежать, помимо настроек самого браузера, в продвинутых случаях можно внедрять CSS-стили @media print.
Например, установка нулевых отступов для страницы печати позволяет максимально эффективно использовать узкую чековую ленту:
@media print {
@page { margin: 0; }
body { margin: 1.6cm; }
}
Подводя итог, можно сказать, что работа в веб-клиенте требует от разработчика более тщательной подготовки печатных форм и использования асинхронных методов программирования. Несмотря на то что многие специалисты рекомендуют переходить на «Тонкий клиент» для полноценной работы РМК, вышеописанные методы позволяют настроить стабильную работу даже через обычный браузер.