Где и как в 1С:Розница 2.2 рассчитывается и заполняется цена в табличной части документов продаж

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

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

Цепочка программных вызовов при изменении номенклатуры

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

  1. Клиентский обработчик события: На форме документа при изменении реквизита подтягивается обработчик события ТоварыНоменклатураПриИзменении. В нем формируется структура действий для обработки строки:
    
    СтруктураДействий = Новый Структура;
    СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ОбработкаТабличнойЧастиТоварыКлиент.ПолучитьСтруктуруЗаполненияЦеныПродажиВСтрокеТЧ(Объект, Истина));
    
  2. Вызов клиентской обработки реквизитов: Далее вызывается универсальная процедура ОбработкаТабличнойЧастиТоварыКлиент.ПриИзмененииРеквизитовВТЧКлиент(...). Она собирает необходимые контекстные данные формы и передает управление на сервер.
  3. Серверная обработка табличной части: На сервере процедура переходит в модуль ОбработкаТабличнойЧастиТоварыСервер, где выполняется специализированный метод ЗаполнитьЦенуПродажиВСтрокеТЧСервер(...).
  4. Получение цены из подсистемы ценообразования: Серверный метод обращается к ключевой функции подсистемы запасов: Цена = ЗапасыСервер.ПолучитьЦенуПродажи(...); Значение не рассчитывается «на лету» по сложным формулам на клиенте, а считывается из сведений о ценах с учетом контекста документа.

Ключевые общие модули

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

Общий модуль ЗапасыСервер: Содержит специальный программный раздел // ФУНКЦИИ ЗАПОЛНЕНИЯ ЦЕН ПО ТЧ ДОКУМЕНТОВ ТОВАРОДВИЖЕНИЯ. Именно здесь сосредоточены функции чтения регистра сведений цен с учетом видов цен, магазинов, правил ценообразования и характеристик номенклатуры.

Общие модули ЗапасыКлиент и ОбработкаТабличнойЧастиТоварыКлиент: Отвечают за первичное формирование структуры параметров на клиенте, проверку условий перед отправкой на сервер и выдачу сервисных предупреждений пользователю.

Общий модуль ОбработкаТабличнойЧастиТоварыСервер: Содержит вспомогательные процедуры массового перезаполнения цен по всей табличной части (например, ЗаполнитьЦеныПродажиВТЧСервер), которые вызываются при изменении магазина, склада или даты документа.

Распространенные причины, по которым цена не подставляется

Выясним основные причины, из-за которых при выборе номенклатуры колонка Цена остается равной нулю или заполняется некорректно:

  1. Отсутствие записи в регистре «Цены номенклатуры»: Документ Установка цен номенклатуры не проведен, либо его дата и время позже даты документа реализации. Также проверяйте совпадение разрезов учета: если цена задана на конкретную характеристику, а в документе указана другая (или пустая) характеристика, цена не подтянется.
  2. Настройки правил ценообразования: В 1С:Розница 2.2 вид цены продажи по умолчанию определяется через Правило ценообразования, привязанное к текущему Магазину или Складу. Если правило не задано или в нем не настроен вид цены продажи, функция ЗапасыСервер.ПолучитьЦенуПродажи вернет 0.
  3. Настройка вида цены: В реквизитах вида цены должен быть взведен флаг Использовать при продаже.
  4. Влияние упаковок: Если товар продается в упаковках, базовая цена автоматически пересчитывается с учетом коэффициента упаковки относительно базовой единицы измерения.
  5. Ограничения прав доступа (RLS): Если у пользователя ограничены права на просмотр определенных видов цен или правил ценообразования, серверные функции вернут пустое значение без явных сообщений об ошибках.

Важное ограничение архитектуры: В типовой конфигурации «1С:Розница 2.2» в документах продажи отсутствует ручной выбор вида цены в шапке (в отличие от «Управление торговлей»). Вид цены жестко привязан к правилу ценообразования магазина. Для массового пересчета всей табличной части при смене реквизитов шапки следует вызывать процедуру ОбработкаТабличнойЧастиТоварыСервер.ЗаполнитьЦеныПродажиВТЧСервер.

← На главную