Почему в 1С:УТ 11.5 не меняется подразделение в чеке ККМ при открытии РМК и как его переопределить?

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

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

Анализ проблемы: почему сбрасывается подразделение

Проанализируем поведение типовой конфигурации. Когда мы пытаемся передать подразделение в форму чека при создании или изменяем его в обработчиках формы (например, в процедурах ПриСозданииНаСервере или ПередЗаписьюНаСервере), в отладчике реквизит действительно принимает нужное нам значение. Однако после нажатия кнопки пробития и фактической записи документа в базе оказывается подразделение, привязанное к текущему рабочему месту или кассе ККМ.

Выясним причину такого поведения архитектуры:

  1. Серверный конвейер фискализации: В РМК запись чека и его пробитие выполняются через специализированный программный конвейер. При фискализации ключевые реквизиты шапки (организация, касса ККМ, подразделение) принудительно инициализируются из настроек текущей кассовой смены и карточки справочника КассыККМ.
  2. Перекрытие контекста формы: Форма РМК жестко ориентирована на параметры торговой точки. Даже если данные были визуально подменены в реквизитах формы, серверные процедуры фискализации обращаются к параметрам оборудования и сеанса, повторно перезаписывая реквизиты перед вызовом финального метода Записать().

Учетные ограничения и возможные риски

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

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

Способ 1. Постобработка чека после закрытия формы (решение через вызывающий документ)

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

Разберем реализацию: при закрытии чека вызывающий документ получает ссылку на созданный объект ЧекККМ в процедуре ОбработкаВыбора и вносит необходимые корректировки.


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

&НаСервереБезКонтекста
Процедура СкорректироватьПодразделениеВЧеке(СсылкаНаЧек, НовоеПодразделение)
    ОбъектЧека = СсылкаНаЧек.ПолучитьОбъект();
    Если ОбъектЧека <> Неопределено Тогда
        ОбъектЧека.Подразделение = НовоеПодразделение;
        // Записываем документ в режиме проведения или записи
        ОбъектЧека.Записать(РежимЗаписиДокумента.Запись);
    КонецЕсли;
КонецПроцедуры

Важный момент: Такой подход гарантирует, что типовой механизм пробития не перетрет реквизит, так как чек уже фискализирован и записан в базу данных.

Способ 2. Использование подписки на событие «ПередЗаписью» или расширения модуля объекта

Если требуется, чтобы подразделение подставлялось автоматически при любой записи конкретного типа чеков без ручного перехвата в вызывающей форме, перенесем логику на уровень модуля объекта.

Рассмотрим порядок действий:

  1. Создаем подписку на событие ПередЗаписью для документа ЧекККМ или используем аннотацию &Перед("ПередЗаписью") в расширении конфигурации для модуля объекта.
  2. Определяем условие, по которому чек должен получить нестандартное подразделение (например, по наличию документа-основания или заполнению дополнительного реквизита).
  3. Переопределяем подразделение непосредственно в объекте документа.

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

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

Способ 3. Альтернативные варианты идентификации чеков

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

  1. Дополнительные реквизиты (БСП): Добавьте для документа ЧекККМ дополнительный реквизит (например, Подразделение-инициатор или Канал продаж). Он заполняется программно, выводится в любые стандартные списки и отчеты через настройку полей и группировок, не вызывая конфликтов с закрытием смены.
  2. Связь через документ-основание: Заполняйте стандартный реквизит ДокументОснование ссылкой на документ, вызвавший пробитие чека. По этой связи легко построить аналитические отчеты.
  3. Настройка отдельной кассы ККМ: Если операции действительно относятся к разным подразделениям предприятия, создайте в справочнике КассыККМ отдельные элементы для каждого подразделения и настройте их привязку к рабочему месту.
← На главную