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