При разработке и доработке конфигураций 1С на управляемых формах разработчики часто сталкиваются с ситуацией: в коде происходит добавление строки в табличную часть, реквизиту Характеристика присваивается корректное значение, на точке останова в отладчике реквизит заполненой строки содержит нужную ссылку, однако в интерфейсе пользователя колонка Характеристика остается пустой.
Рассмотрим подробно, почему возникает подобное поведение платформы и формы, проанализируем основные причины и способы решения данной проблемы.
Самой частой и неочевидной причиной неотображения значения является динамическое Условное оформление формы. В типовых решениях (1С:Розница, 1С:Управление торговлей, 1С:ERP) и отраслевых конфигурациях условное оформление используется для управления доступностью, видимостью или цветом элементов в зависимости от значений других колонок или настроек учета.
Проанализируем пример: если в условном оформлении задано правило, скрывающее текст или делающее незаполненной колонку Характеристика при определенном значении флага (например, когда реквизит ИспользоватьХарактеристики равен Ложь), платформа визуально скроет значение, хотя в данных объекта Объект.Товары ссылка присутствует.
Для диагностики проблемы выполним следующие шаги:
ПриСозданииНаСервере или программную процедуру установки оформления (например, УстановитьУсловноеОформление()).ТоварыХарактеристика или реквизита Характеристика.В управляемых формах табличная часть Товары часто содержит не только реквизиты самого документа из метаданных, но и дополнительные служебные реквизиты формы. Например, колонку ИспользоватьХарактеристики или ХарактеристикиИспользуются.
При стандартном интерактивном выборе номенклатуры срабатывает событие ТоварыНоменклатураПриИзменении, которое автоматически рассчитывает и заполняет эти служебные флаги. Если же мы добавляем строки программно через Объект.Товары.Добавить(), серверные и клиентские события формы не вызываются автоматически.
Посмотрим на пример стандартного кода заполнения строки:
&НаСервере
Процедура ЗаполнитьНаСервере()
ЯчейкаВладелец = Объект.ПаллетОтправитель;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ор_РасположениеНоменклатуры.Номенклатура КАК Номенклатура,
| ор_РасположениеНоменклатуры.Характеристика КАК Характеристика
|ИЗ
| РегистрСведений.ор_РасположениеНоменклатуры КАК ор_РасположениеНоменклатуры
|ГДЕ
| ор_РасположениеНоменклатуры.Ячейка.Владелец = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ЯчейкаВладелец);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
НоваяСтрока.Характеристика = Выборка.Характеристика;
НоваяСтрока.КоличествоУпаковок = 1;
КонецЦикла;
// ВАЖНО: После программного добавления необходимо вызвать процедуру
// заполнения служебных признаков использования характеристик:
ОбработкаТабличнойЧастиТоварыСервер.ЗаполнитьПризнакИспользованияХарактеристик(Объект.Товары);
КонецПроцедуры
Вызов процедур общего модуля (например, ОбработкаТабличнойЧастиТоварыСервер.ЗаполнитьПризнакИспользованияХарактеристик) рассчитает признак вести учет по характеристикам для каждой строки и снимет блокировку/оформление с колонки.
Справочник ХарактеристикиНоменклатуры является подчиненным. Владельцем элемента может выступать либо конкретная Номенклатура, либо ВидНоменклатуры.
В свойствах элемента формы ТоварыХарактеристика настраивается свойство Связи параметров выбора (например, Отбор.Владелец(Объект.Товары.Номенклатура)). Если программно установить ссылку на характеристику, владелец которой не совпадает с номенклатурой в данной строке, платформа 1С при отрисовке на клиенте не сможет отобразить невалидную характеристику и очистит её представление.
Проанализируем запрос на корректность типов и подчиненности:
Характеристика в табличной части документа.При программной работе с табличными частями документов в 1С соблюдаем следующий алгоритм:
ЗаполнитьТипНоменклатурыВТЧСервер, ЗаполнитьПризнакИспользованияХарактеристик и т.д.).УстановитьУсловноеОформление и свойства условного оформления самой формы.