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