Есть плановая себестоимость (вид цен, валюта руб., меняется раз в месяц), вводимая вручную менеджером. Необходимо, чтобы эта себестоимость отображалась отдельной колонкой в документе "Заказ клиента". Задача проста, но мне захотелось решить ее плотно вклинившись в типовой функционал по работе с табличными частями.
На мой взгляд важно дорабатывать конфигурации так, чтоб минимизировать вызовы сервера потому выбираем тяжелый путь . [spoiler]
Итак:
Первое что я сделал, добавил предопределенный вид цен "ПлановаяСебестоимость" и заполнил этот элемент справочника программно (поля "Валюта", "Идентификатор"... нельзя изменть после записи элементов, потому заполнил обработкой). Способ заполнения определил как "Задавать вручную".
1. В табличную часть "Товары" добавил реквизит "Плановая себестоимость".
2. Вынес реквизит на форму.
Далее проанализировал алгоритм действий программы при изменении реквизитов "номенклатра" и "характеристика"
Первое что происходит в событии "При изменении" это формируется некоторая структура "СтруктураДействий":
вклиниваемся:
после заполнения структуры идет обращение к общему модулю:
ОбработкаТабличнойЧастиТоварыКлиент.ПриИзмененииРеквизитовВТЧКлиент(...СтруктураДействий...); |
Этот общий модуль работает со всеми табличными частями документов. Перейдем в него:
Тут нам интересна следующая функция:
ПолучитьСтруктуруПолейТЧ |
Формирует и возвращает структуру полей табличной части. Вклиниваемся:
Далее возвращаемся к процедуре:
ОбработкаТабличнойЧастиТоварыКлиент.ПриИзмененииРеквизитовВТЧКлиент |
тут нас интересует вызов серверной процедуры:
ОбработкаТабличнойЧастиТоварыСервер.ПриИзмененииРеквизитовВТЧСервер |
Перейдя в нее внесем коррективы:
добавил вызов процедуры по заполнению данных строки. Эта процедура была определена в конце этого модуля.
В ней важно проверить относится ли заполняемые данные к нашей доработке:
P.S. Я не претендую на абсолютную верность данного решения. Конечно эта задача не завершена, в идеале реквизит на форму нужно выносить динамически (программно) и т.п. На данный момент я считаю, что это оптимальный способ решения и он работает!