Как настроить печать чеков и работу с торговым оборудованием в веб-клиенте 1С?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

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

Проблема модальных окон и переход на асинхронные вызовы

Одной из главных преград при работе в веб-клиенте являются модальные окна. В старых редакциях конфигураций (например, ранние релизы УТ для Украины) часто используются синхронные методы, такие как ВвестиЗначение или ОткрытьФормуМодально. В браузере такие вызовы блокируют исполнение кода и часто ведут к ошибкам или некорректному поведению интерфейса.

Проанализируем типичный проблемный участок кода, который встречается в процедурах поиска по штрихкоду:


Функция ВвестиШтрихкод(Штрихкод, Заголовок = "") Экспорт
    Результат = Ложь;
    Штрихкод = "";
    Если НЕ ЗначениеЗаполнено(Заголовок) Тогда
        Заголовок = "Введите штрихкод";
    КонецЕсли;
    
    // Модальный вызов, который не рекомендуется в веб-клиенте
    Если ВвестиЗначение(Штрихкод, Заголовок) Тогда
        Если Не ПустаяСтрока(Штрихкод) Тогда
            Результат = Истина;
        КонецЕсли;
    КонецЕсли;
    Возврат Результат;
КонецФункции

Для того чтобы этот механизм стабильно работал в веб-клиенте, нам необходимо переписать его с использованием описания оповещения. Вместо того чтобы ждать ответа от пользователя в той же строке кода, мы передаем управление специальной процедуре-обработчику. Рассмотрим, как это реализовано в современных версиях платформы:


Процедура ПоказатьВводШтрихкода(ОповещениеУспешногоВвода, Количество = Неопределено, Заголовок = "") Экспорт 
    Если НЕ ЗначениеЗаполнено(Заголовок) Тогда
        Заголовок = "Введите штрихкод";
    КонецЕсли;
    
    ДополнительныеПараметры = Новый Структура("ОповещениеУспешногоВвода, Количество", ОповещениеУспешногоВвода, Количество);
    
    Оповещение = Новый ОписаниеОповещения("ПоказатьВводШтрихкодаЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    
    // Используем немодальный метод
    ПоказатьВводЗначения(Оповещение, "", Заголовок);
КонецПроцедуры

В данном случае ПоказатьВводЗначения не останавливает выполнение кода. Как только пользователь введет данные и нажмет "ОК", система сама вызовет процедуру ПоказатьВводШтрихкодаЗавершение. Это критически важно для корректной работы в Google Chrome, Safari или Firefox.

Настройка «тихой» печати (Silent Printing) без окон браузера

При нажатии кнопки «Пробить чек» в веб-клиенте стандартно открывается окно предварительного просмотра печати браузера. Это замедляет работу кассира и сбивает фокус. Чтобы реализовать автоматическую отправку на принтер, мы можем воспользоваться механизмом «режима киоска» в браузере.

Выясним, как это настроить для Google Chrome:

  1. Создадим ярлык для запуска браузера на рабочем столе.
  2. В свойствах ярлыка, в поле «Объект», после пути к исполняемому файлу добавим параметр --kiosk-printing.
  3. Теперь при инициировании печати из 1С браузер будет автоматически отправлять документ на принтер по умолчанию, минуя диалоговое окно.

Важный момент: Для того чтобы принтер чеков подхватывал нужные настройки (ширина ленты 58мм или 80мм), их необходимо заранее задать в настройках драйвера принтера в операционной системе (Панель управления — Устройства и принтеры — Настройки печати). Браузер использует именно системные настройки по умолчанию.

Решение проблемы исчезающих штрихкодов на этикетках

Часто возникает ситуация: на предварительном просмотре в 1С штрихкод виден, а при печати из браузера вместо него отображаются цифры или пустое место. Разберем причину: чаще всего 1С использует специальные шрифты (например, 1C_EAN13) для формирования штрихкода. Веб-клиент может не передать этот шрифт в поток печати браузера должным образом.

Чтобы решить эту проблему, проанализируем настройки макета этикетки. Нам нужно заставить систему выводить штрихкод не как текстовое поле с особым шрифтом, а как графическое изображение. Для этого в коде формирования печатной формы или в настройках обработки печати ценников следует переключить тип вывода штрихкода в режим Рисунок. Картинки (битовые карты) рендерятся всеми браузерами одинаково стабильно, что гарантирует считывание кода сканером.

Подключение сканера штрихкодов через Native API

Для полноценной работы с оборудованием в веб-клиенте недостаточно просто открыть страницу. Нам потребуется установить расширение 1С для браузера и внешние компоненты. Посмотрим на алгоритм действий:

Использование CSS для фиксации размеров чека

Поскольку веб-клиент генерирует HTML-представление табличного документа, мы можем столкнуться с тем, что браузер добавляет свои колонтитулы (дату, адрес страницы) на чековую ленту. Чтобы этого избежать, помимо настроек самого браузера, в продвинутых случаях можно внедрять CSS-стили @media print.

Например, установка нулевых отступов для страницы печати позволяет максимально эффективно использовать узкую чековую ленту:


@media print {
    @page { margin: 0; }
    body { margin: 1.6cm; }
}

Подводя итог, можно сказать, что работа в веб-клиенте требует от разработчика более тщательной подготовки печатных форм и использования асинхронных методов программирования. Несмотря на то что многие специалисты рекомендуют переходить на «Тонкий клиент» для полноценной работы РМК, вышеописанные методы позволяют настроить стабильную работу даже через обычный браузер.

← На главную