При разработке и доработке типовой конфигурации 1С:Розница 2.2 разработчики часто сталкиваются с ситуацией, когда трудно сразу отследить программный путь подстановки цены продажи при выборе номенклатуры в табличной части документа (например, Реализация товаров и услуг или Чек ККМ). Рассмотрим подробно, по какой цепочке функций передаются данные, какие общие модули задействованы в процессе и почему цена в строке может не заполняться.
Проанализируем пошаговый путь выполнения кода при добавлении новой строки или смене номенклатуры в табличной части Товары:
ТоварыНоменклатураПриИзменении. В нем формируется структура действий для обработки строки:
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ОбработкаТабличнойЧастиТоварыКлиент.ПолучитьСтруктуруЗаполненияЦеныПродажиВСтрокеТЧ(Объект, Истина));
ОбработкаТабличнойЧастиТоварыКлиент.ПриИзмененииРеквизитовВТЧКлиент(...). Она собирает необходимые контекстные данные формы и передает управление на сервер.ОбработкаТабличнойЧастиТоварыСервер, где выполняется специализированный метод ЗаполнитьЦенуПродажиВСтрокеТЧСервер(...).
Цена = ЗапасыСервер.ПолучитьЦенуПродажи(...);
Значение не рассчитывается «на лету» по сложным формулам на клиенте, а считывается из сведений о ценах с учетом контекста документа.Если вам необходимо внести изменения в логику получения цен или изучить механизм работы подсистемы ценообразования, обратите внимание на следующие общие модули:
Общий модуль ЗапасыСервер: Содержит специальный программный раздел // ФУНКЦИИ ЗАПОЛНЕНИЯ ЦЕН ПО ТЧ ДОКУМЕНТОВ ТОВАРОДВИЖЕНИЯ. Именно здесь сосредоточены функции чтения регистра сведений цен с учетом видов цен, магазинов, правил ценообразования и характеристик номенклатуры.
Общие модули ЗапасыКлиент и ОбработкаТабличнойЧастиТоварыКлиент: Отвечают за первичное формирование структуры параметров на клиенте, проверку условий перед отправкой на сервер и выдачу сервисных предупреждений пользователю.
Общий модуль ОбработкаТабличнойЧастиТоварыСервер: Содержит вспомогательные процедуры массового перезаполнения цен по всей табличной части (например, ЗаполнитьЦеныПродажиВТЧСервер), которые вызываются при изменении магазина, склада или даты документа.
Выясним основные причины, из-за которых при выборе номенклатуры колонка Цена остается равной нулю или заполняется некорректно:
Установка цен номенклатуры не проведен, либо его дата и время позже даты документа реализации. Также проверяйте совпадение разрезов учета: если цена задана на конкретную характеристику, а в документе указана другая (или пустая) характеристика, цена не подтянется.ЗапасыСервер.ПолучитьЦенуПродажи вернет 0.Использовать при продаже.Важное ограничение архитектуры: В типовой конфигурации «1С:Розница 2.2» в документах продажи отсутствует ручной выбор вида цены в шапке (в отличие от «Управление торговлей»). Вид цены жестко привязан к правилу ценообразования магазина. Для массового пересчета всей табличной части при смене реквизитов шапки следует вызывать процедуру ОбработкаТабличнойЧастиТоварыСервер.ЗаполнитьЦеныПродажиВТЧСервер.