Почему в 1С:Розница 2.2 в чеках ККМ периодически не заполняется продавец?

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

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

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

Анализ настроек прав и автоматического заполнения

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

  1. Откроем раздел Администрирование — Пользователи и права — Дополнительные права пользователей.
  2. Выберем нужного пользователя и проверим значение в группе РМК. Обратим внимание на настройку "Менеджер (продавец) в каждой строке".

Если эта опция включена, система ожидает, что продавец будет указан для каждой товарной позиции отдельно. Если при этом автоматический выбор продавца при авторизации в РМК сработал некорректно, поле в шапке документа может заполниться, а в табличной части (которая и попадает в итоговый отчет) — остаться пустым. Проанализируем также справочник Настройки пользователей. Убедимся, что для конкретного сочетания "Пользователь — Магазин" в поле Основной продавец указано актуальное физическое лицо.

Специфика доработок Рарус и учет рабочего времени

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

Выясним причину через проверку следующих моментов:

Диагностика с помощью эмулятора торгового оборудования

Чтобы воспроизвести ошибку, которая возникает "иногда", нам потребуется среда для тестирования без реальной кассы. Разберем, как настроить эмулятор. Это позволит нам запустить Замер производительности и отладчик в момент создания чека.

Для настройки выполним следующие действия:

  1. Перейдем в Администрирование — Подключаемое оборудование.
  2. Создадим новый экземпляр оборудования с типом ККТ с передачей данных.
  3. В качестве драйвера выберем 1С:Фискальный регистратор (эмулятор).
  4. В настройках эмулятора укажем произвольный серийный номер и сохраним настройки.

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


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

Влияние кэша и асинхронных вызовов

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

Посмотрим на рекомендации по устранению таких проблем:

  1. Очистка кэша: Удалим содержимое папок %AppData%\Local\1C\1Cv8 и %AppData%\Roaming\1C\1Cv8 на рабочих станциях кассиров.
  2. Анализ Журнала регистрации: Выясним, не возникают ли ошибки прав доступа (DataExchange.Load) в моменты, когда продавец не заполняется.
  3. Горячие клавиши: Проверим, не используют ли продавцы сочетание Ctrl+F4 (смена продавца) случайно. В типовых формах это может сбрасывать текущий выбор.

Методика отладки "плавающей" ошибки

Если воспроизвести ошибку на эмуляторе не удается, применим метод логирования. Добавим в модуль формы ЧекККМ в процедуру ПередЗаписью небольшой код, который будет записывать в текстовый файл или отдельный регистр сведения о состоянии реквизита Продавец и текущем пользователе системы.


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если Не ЗначениеЗаполнено(Объект.Продавец) Тогда
        ЗаписьЖурналаРегистрации("Ошибка.Продавец", УровеньЖурналаРегистрации.Предупреждение, , , 
            "Чек без продавца. Пользователь: " + ПараметрыСеанса.ТекущийПользователь);
    КонецЕсли;
КонецПроцедуры

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

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

← На главную