Как в РМК 1С:Розница 2.2 настроить выбор устройства для печати чека?

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

В практике автоматизации розничной торговли часто возникает задача: предоставить кассиру в режиме РМК (рабочее место кассира) возможность определять, на каком именно оборудовании печатать чек в момент продажи. Например, часть операций должна проходить через фискальный регистратор (ККТ с фискальным накопителем), а другая часть — направляться на обычный нефискальный принтер чеков (или эмулятор ККТ). Рассмотрим архитектурные особенности конфигурации «1С:Розница 2.2», причины ограничений и практические варианты реализации подобной схемы.

Архитектурные ограничения типовой конфигурации

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

  1. Жесткая связка «Рабочее место — Касса ККМ — Смена»: В типовой логике 1С текущее рабочее место жестко привязано к имени физического компьютера через параметр сеанса РабочееМестоКлиента. При закрытии чека Библиотека подключаемого оборудования (БПО) выполняет строгую проверку соответствия открытой кассовой смены и оборудования. Подставить другое физическое устройство в момент вызова штатных процедур БПО «на лету» нельзя — программа выдаст ошибку несоответствия смены или кассы ККМ.
  2. Требования 54-ФЗ и прошивки ККТ: Современные стандарты драйверов оборудования и требования 54-ФЗ исключают передачу произвольных текстовых нефискальных документов через зарегистрированную ККТ с установленным фискальным накопителем. Печать мимо фискального накопителя блокируется самой прошивкой фискального регистратора.
  3. Ограничение на регистрацию касс: В типовой модели на одном рабочем месте и для одной организации нельзя одновременно открыть две активные фискальные смены под одну операционную сессию без переключения контекста.

Вариант 1. Разделение по организациям (штатный механизм с минимальной доработкой)

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

Пошагово реализуем данную схему:

  1. В справочнике Организации создаем две записи (например, основное юридическое лицо/ИП и служебную управленческую организацию).
  2. В справочнике Кассы ККМ регистрируем две кассы:
    1. Первая привязана к основной организации и фискальному регистратору.
    2. Вторая привязана к служебной организации и принтеру чеков (или эмулятору ККТ).
  3. В форме РМК через расширение конфигурации добавляем переключатель или кнопку выбора организации.
  4. В момент нажатия переключателя программно подменяем реквизит Организация в табличной части товаров документа ЧекККМ:

&НаКлиенте
Процедура ПереключитьОрганизацию(Команда)
    Для Каждого Стр Из Объект.Товары Цикл
        Стр.Организация = ВыбраннаяОрганизация;
    КонецЦикла;
    // Оповещаем форму о необходимости пересчета распределения
    ПересчитатьРаспределениеПродаж();
КонецПроцедуры

После подстановки организации отрабатывает типовой механизм распределения продаж по кассам ККМ, и система автоматически направляет чек на нужное устройство без конфликта кассовых смен.

Вариант 2. Перехват фискализации и прямая печать через расширение

Если учет ведется строго от одного юридического лица (или используется базовая версия конфигурации, где многофирменность заблокирована), распределение через организации применить не удастся. В таком случае разберем вариант с перехватом процедуры пробития чека в форме РМК с помощью расширения конфигурации.

Алгоритм решения выглядит следующим образом:

  1. На форму РМК выносим переключатель: Фискальный чек / Нефискальный чек.
  2. В расширении перехватываем обработчик команды пробития/оплаты чека (метод &Вместо или &Перед).
  3. Если выбран фискальный режим — передаем управление стандартным процедурам БПО.
  4. Если выбран нефискальный режим — штатный вызов процедур фискализации БПО полностью блокируется. Программа формирует табличный документ по макету чека и отправляет его напрямую на принтер чеков Windows через спулер печати:

&НаСервере
Процедура НапечататьНефискальныйЧек(СсылкаНаЧек)
    ТабДок = Новый ТабличныйДокумент;
    Макет = Обработки.РМК.ПолучитьМакет("МакетНефискальногоЧека");
    
    // Заполнение параметров макета из данных чека
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ТабДок.Вывести(ОбластьШапка);
    
    // Отправка на системный принтер чеков
    ТабДок.ИмяПринтера = "POS_Printer_Receipt";
    ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
КонецПроцедуры

Особенности складского учета при нефискальной печати

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

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

Ограничения базовых версий программы

Если проект развернут на базе «1С:Розница (базовая)», учтем критические программные ограничения платформы:

  1. Многофирменный учет на базовой платформе отключен на уровне ядра конфигурации, поэтому Вариант 1 реализовать не удастся.
  2. Изменение основной конфигурации заблокировано, но платформа «1С:Предприятие 8.3» поддерживает механизм расширений (.cfe), если они не добавляют собственных таблиц в структуру базы данных.
  3. Для базовой редакции оптимальным остается только Вариант 2: перехват логики проведения чека через расширение формы РМК с отправкой макета напрямую на локальный драйвер принтера чеков.
← На главную