Просидев почти целый день и протупив, решил написать небольшую инструкцию для таких же как и я. Ибо в инете ничего не было найдено.
Задача: создать свой справочник с табличной частью "СопутствующиеТовары". В котором есть номенклатура и характеристика. (не буду вдаваться в подробности для чего конкретно нужен этот справочник). Выбор, заполнение и отображение характеристик сделать по аналогии с типовым. За пример можно взять любой типовой документ с табличной часть с использованием номенклатур.
Решение:
Создать свой объект. Нужную табличную часть и добавить реквизиты табличной части Номенклатура и Характеристика. В Характеристики указать связи параметров выбора по номенклатуре и проверку заполнения в "выдавать ошибку".
1) Создать форму элемента и отобразить на ней необходимую нам табличную часть.
2) В форме добавить реквизит этой табличной части "ХарактеристикиИспользуются" с типом булево.
Далее код и не забыть привязать процедуры. Думаю. они понятны из названий.
#Область ОбработчиковСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
КонецПроцедуры
#Область ОбработчиковСобытийЭлементовФормы
&НаКлиенте
Процедура СопутствующиеТоварыНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.СопутствующиеТовары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, Неопределено);
КонецПроцедуры
#КонецОбласти
#Область ПрочихОбработчиков
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыПоНоменклатуре()
ПараметрыЗаполненияРеквизитов = Новый Структура;
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.СопутствующиеТовары, ПараметрыЗаполненияРеквизитов);
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма,
"СопутствующиеТоварыХарактеристика",
"Объект.СопутствующиеТовары.ХарактеристикиИспользуются");
КонецПроцедуры
#КонецОбласти
В модуле объекта
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияХарактеристик();
ПараметрыПроверки.ИмяТЧ = "СопутствующиеТовары";
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект, МассивНепроверяемыхРеквизитов, Отказ, ПараметрыПроверки);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
Если Не Отказ И ОбщегоНазначенияУТ.ПроверитьЗаполнениеРеквизитовОбъекта(ЭтотОбъект, ПроверяемыеРеквизиты) Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли