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