Как организовать печать копии фискального чека на нефискальном принтере чеков при работе в 1С через RDP?

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

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

Анализ технической проблемы и архитектуры решения

При использовании 1С:Управление торговлей 11 (УТ 11) в режиме RDP, ККТ обычно подключается как оборудование на стороне сервера. Когда кассир нажимает кнопку «Пробить чек», система отправляет команду на серверное оборудование. Проблема заключается в том, что стандартные механизмы 1С не предусматривают автоматическое дублирование печати на второе устройство (нефискальный принтер), подключенное к локальному ПК пользователя.

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

Шаг 1: Юридические аспекты и ограничения 54-ФЗ

Прежде чем переходить к программированию, разберем важный момент, упомянутый в обсуждении. Согласно Федеральному закону № 54-ФЗ, кассовый чек — это первичный учетный документ, отпечатанный именно контрольно-кассовой техникой. Документ, распечатанный на обычном принтере (даже если он выглядит как чек), юридически является лишь «копией» или «товарным чеком».

Важные моменты:

Шаг 2: Получение данных фискализации из драйвера ККТ

Для того чтобы копия была «полной», нам нужно получить данные, которые ККТ сформировала в момент пробития: номер чека, номер смены, фискальный признак (ФП или ФПД) и данные для QR-кода. Рассмотрим, как это сделать программно в 1С.

В современных версиях УТ 11, использующих БСП (Библиотеку стандартных подсистем), за печать чека отвечает модуль МенеджерОборудованияИсполнитель или аналогичные механизмы в обработках РМК. После успешного выполнения метода ФискализироватьЧек (или ПечатьЧека), объект драйвера возвращает структуру с результатами.

Выясним, какие данные нам необходимы для формирования копии:

  1. ФискальныйПризнак (ФПД)
  2. НомерДокумента (Порядковый номер чека за смену)
  3. НомерСмены
  4. ДатаВремя (Точное время операции из памяти ККТ)

Шаг 3: Программная реализация перехвата данных

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


// Пример перехвата данных после успешной фискализации
РезультатПечати = МенеджерОборудованияКлиент.ВыполнитьКоманду(ПараметрыКоманды);

Если РезультатПечати.Результат Тогда
    // Получаем структуру данных из ответа драйвера
    ДанныеЧека = РезультатПечати.ВыходныеПараметры;
    
    // Вызываем нашу функцию печати копии на локальный принтер
    ПечатьКопииНаНефискальныйПринтер(ДанныеЧека, Объект.Товары);
КонецЕсли;

В функции ПечатьКопииНаНефискальныйПринтер мы должны сформировать ТабличныйДокумент, который будет имитировать внешний вид чека.

Шаг 4: Формирование QR-кода

Одним из самых сложных моментов является печать QR-кода. Чтобы QR-код на копии был валидным, он должен содержать строку определенного формата: t=YYYYMMDDTHHMM&s=SUM&fn=FN_NUMBER&i=FD_NUMBER&fp=FP_NUMBER&n=TYPE.

Проанализируем параметры строки:

Для генерации картинки QR-кода в 1С используем встроенные возможности БСП:


ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыШтрихкода();
ПараметрыШтрихкода.ТипКода = 16; // Тип QR-код
ПараметрыШтрихкода.Текст = СтрокаДляQRКода;
ПараметрыШтрихкода.Ширина = 150;
ПараметрыШтрихкода.Высота = 150;

КартинкаQR = ГенерацияШтрихкода.СформироватьШтрихкод(ПараметрыШтрихкода);

Шаг 5: Вывод на локальный принтер через RDP

Поскольку принтер чеков подключен к локальному ПК, он должен быть проброшен в RDP-сессию как обычный Windows-принтер. В системе сервера он будет виден под именем типа Принтер_Чеков (redirected 2).

Разберем процесс печати табличного документа:

  1. Создаем макет (в конфигураторе или программно).
  2. Заполняем области данными из документа и данными фискализации (номер чека, ФП).
  3. Вставляем картинку QR-кода в соответствующую область.
  4. Устанавливаем имя принтера для вывода.

ТабДок = Новый ТабличныйДокумент;
// Заполнение данными макета...
// ...
ТабДок.ИмяПринтера = "Имя_Вашего_Проброшенного_Принтера";
ТабДок.Напечатать(РежимИспользованияПринтера.ПечатьБезПросмотра);

Альтернативный метод: Использование JSON-заданий драйвера

Если используется драйвер АТОЛ 10, можно пойти по «бескровному» пути, упомянутому в сообщении 7. Драйвер позволяет получить «текстовый образ» чека сразу после его пробития. Это избавляет от необходимости рисовать макет в 1С вручную.

Проанализируем алгоритм:

Резюме

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

Важно: Всегда информируйте владельца бизнеса о том, что такая «копия» не заменяет фискальный чек в полной мере перед законом, и рекомендуется обеспечить покупателю доступ к оригинальному чеку через SMS или электронную почту.

← На главную