В практике автоматизации розничной торговли часто возникает задача: предоставить кассиру в режиме РМК (рабочее место кассира) возможность определять, на каком именно оборудовании печатать чек в момент продажи. Например, часть операций должна проходить через фискальный регистратор (ККТ с фискальным накопителем), а другая часть — направляться на обычный нефискальный принтер чеков (или эмулятор ККТ). Рассмотрим архитектурные особенности конфигурации «1С:Розница 2.2», причины ограничений и практические варианты реализации подобной схемы.
Прежде чем приступать к доработкам, проанализируем, почему задача не решается простым выбором принтера в окне оплаты:
РабочееМестоКлиента. При закрытии чека Библиотека подключаемого оборудования (БПО) выполняет строгую проверку соответствия открытой кассовой смены и оборудования. Подставить другое физическое устройство в момент вызова штатных процедур БПО «на лету» нельзя — программа выдаст ошибку несоответствия смены или кассы ККМ.Разберем наиболее стабильный способ обхода ограничений в версии ПРОФ, основанный на использовании механизма нескольких организаций. Для этого в базе заводятся две организации: основная (для фискальных продаж) и управленческая (для нефискальной печати).
Пошагово реализуем данную схему:
Организации создаем две записи (например, основное юридическое лицо/ИП и служебную управленческую организацию).Кассы ККМ регистрируем две кассы:
Организация в табличной части товаров документа ЧекККМ:
&НаКлиенте
Процедура ПереключитьОрганизацию(Команда)
Для Каждого Стр Из Объект.Товары Цикл
Стр.Организация = ВыбраннаяОрганизация;
КонецЦикла;
// Оповещаем форму о необходимости пересчета распределения
ПересчитатьРаспределениеПродаж();
КонецПроцедуры
После подстановки организации отрабатывает типовой механизм распределения продаж по кассам ККМ, и система автоматически направляет чек на нужное устройство без конфликта кассовых смен.
Если учет ведется строго от одного юридического лица (или используется базовая версия конфигурации, где многофирменность заблокирована), распределение через организации применить не удастся. В таком случае разберем вариант с перехватом процедуры пробития чека в форме РМК с помощью расширения конфигурации.
Алгоритм решения выглядит следующим образом:
&Вместо или &Перед).
&НаСервере
Процедура НапечататьНефискальныйЧек(СсылкаНаЧек)
ТабДок = Новый ТабличныйДокумент;
Макет = Обработки.РМК.ПолучитьМакет("МакетНефискальногоЧека");
// Заполнение параметров макета из данных чека
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);
// Отправка на системный принтер чеков
ТабДок.ИмяПринтера = "POS_Printer_Receipt";
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
КонецПроцедуры
Обратим особое внимание на корректность товародвижения. При выводе чека на нефискальный принтер физический товар покидает склад торговой точки. Если продажа не фиксируется в базе документом, при первой же инвентаризации образуются неучтенные излишки по учетным данным 1С.
Для сохранения корректного складского учета реализуем следующий подход: документ ЧекККМ обязательно создается и проводится по регистрам остатков, но помечается признаком нефискализированного документа. Это позволяет продажам войти в итоговый документ ОтчетОРозничныхПродажах при закрытии смены и корректно списать себестоимость и остатки со склада, исключая при этом повторную отправку команды в фискальный накопитель.
Если проект развернут на базе «1С:Розница (базовая)», учтем критические программные ограничения платформы:
.cfe), если они не добавляют собственных таблиц в структуру базы данных.