В процессе эксплуатации конфигурации 1С:Розница 2.2 (особенно в решениях с доработками от Рарус) пользователи часто сталкиваются с трудновоспроизводимой ошибкой: при оформлении продажи в интерфейсе РМК поле Продавец остается пустым. Эта проблема носит стохастический характер (проявляется, например, в 1 случае из 10), что крайне затрудняет диагностику. Отсутствие продавца в чеке ведет к некорректному формированию документа ОтчетОРозничныхПродажах при закрытии смены, что ломает систему мотивации и учета личных продаж сотрудников.
В данной статье мы подробно проанализируем причины возникновения этой ситуации, рассмотрим методику отладки с использованием эмулятора и разберем конкретные настройки системы, влияющие на заполнение данного реквизита.
Первым делом проанализируем настройки пользователя. В типовой конфигурации 1С:Розница за автоматическую подстановку продавца отвечает механизм дополнительных прав и настроек. Разберем по шагам, что необходимо проверить:
Если эта опция включена, система ожидает, что продавец будет указан для каждой товарной позиции отдельно. Если при этом автоматический выбор продавца при авторизации в РМК сработал некорректно, поле в шапке документа может заполниться, а в табличной части (которая и попадает в итоговый отчет) — остаться пустым. Проанализируем также справочник Настройки пользователей. Убедимся, что для конкретного сочетания "Пользователь — Магазин" в поле Основной продавец указано актуальное физическое лицо.
В конфигурациях с доработками от Рарус механизм определения продавца часто завязан на подсистему учета рабочего времени. Рассмотрим ситуацию, когда продавец зашел в систему под своим логином 1С, но не "отметил" начало смены в специализированном журнале. В этом случае программный код может игнорировать настройки пользователя и оставлять поле пустым, так как формально сотрудник еще не приступил к работе.
Выясним причину через проверку следующих моментов:
Чтобы воспроизвести ошибку, которая возникает "иногда", нам потребуется среда для тестирования без реальной кассы. Разберем, как настроить эмулятор. Это позволит нам запустить Замер производительности и отладчик в момент создания чека.
Для настройки выполним следующие действия:
Теперь мы можем входить в РМК под проблемным пользователем и имитировать продажи. Проанализируем код в процедуре ПриСозданииНаСервере формы документа ЧекККМ. Обратите внимание на следующий фрагмент логики:
// Пример логики поиска продавца при открытии формы
Если Не ЗначениеЗаполнено(Объект.Продавец) Тогда
Объект.Продавец = НастройкиПользователя.ОсновнойПродавец;
Если Объект.Продавец.Пустая() Тогда
// Возможно, здесь срабатывает условие, очищающее реквизит
КонецЕсли;
КонецЕсли;
Одной из скрытых причин пропуска заполнения может быть работа платформы 8.3 с асинхронными вызовами и кэшированием. Рассмотрим ситуацию: при открытии формы РМК запускается несколько фоновых процессов (инициализация оборудования, проверка обновлений, загрузка быстрых товаров). Если продавец начинает сканировать товар до того, как завершились обработчики инициализации формы, данные о текущем пользователе могут не успеть "проброситься" в объект документа.
Посмотрим на рекомендации по устранению таких проблем:
%AppData%\Local\1C\1Cv8 и %AppData%\Roaming\1C\1Cv8 на рабочих станциях кассиров.DataExchange.Load) в моменты, когда продавец не заполняется.Ctrl+F4 (смена продавца) случайно. В типовых формах это может сбрасывать текущий выбор.Если воспроизвести ошибку на эмуляторе не удается, применим метод логирования. Добавим в модуль формы ЧекККМ в процедуру ПередЗаписью небольшой код, который будет записывать в текстовый файл или отдельный регистр сведения о состоянии реквизита Продавец и текущем пользователе системы.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Не ЗначениеЗаполнено(Объект.Продавец) Тогда
ЗаписьЖурналаРегистрации("Ошибка.Продавец", УровеньЖурналаРегистрации.Предупреждение, , ,
"Чек без продавца. Пользователь: " + ПараметрыСеанса.ТекущийПользователь);
КонецЕсли;
КонецПроцедуры
Проанализируем результаты через несколько дней. Если выяснится, что ПараметрыСеанса.ТекущийПользователь заполнен, а Объект.Продавец — нет, значит, проблема в логике автоподстановки при создании нового документа. Если пусты оба значения — проблема в авторизации или потере связи с сервером 1С в момент формирования чека.
Подводя итог, отметим, что чаще всего в 1С:Розница 2.2 данная проблема решается либо корректным заполнением Основного продавца в настройках пользователя, либо отключением опции "Продавец в каждой строке", если она не используется в бизнес-процессе магазина.