Почему программно не заполняется или не отображается характеристика в табличной части 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При разработке и доработке конфигураций 1С на управляемых формах разработчики часто сталкиваются с ситуацией: в коде происходит добавление строки в табличную часть, реквизиту Характеристика присваивается корректное значение, на точке останова в отладчике реквизит заполненой строки содержит нужную ссылку, однако в интерфейсе пользователя колонка Характеристика остается пустой.

Рассмотрим подробно, почему возникает подобное поведение платформы и формы, проанализируем основные причины и способы решения данной проблемы.

1. Влияние условного оформления формы

Самой частой и неочевидной причиной неотображения значения является динамическое Условное оформление формы. В типовых решениях (1С:Розница, 1С:Управление торговлей, 1С:ERP) и отраслевых конфигурациях условное оформление используется для управления доступностью, видимостью или цветом элементов в зависимости от значений других колонок или настроек учета.

Проанализируем пример: если в условном оформлении задано правило, скрывающее текст или делающее незаполненной колонку Характеристика при определенном значении флага (например, когда реквизит ИспользоватьХарактеристики равен Ложь), платформа визуально скроет значение, хотя в данных объекта Объект.Товары ссылка присутствует.

Для диагностики проблемы выполним следующие шаги:

  1. Проверим код процедуры ПриСозданииНаСервере или программную процедуру установки оформления (например, УстановитьУсловноеОформление()).
  2. Выполним глобальный поиск по конфигурации или форме по имени элемента ТоварыХарактеристика или реквизита Характеристика.
  3. Если оформление задано в свойствах формы (в дизайнере), откроем свойства формы, перейдем в раздел Условное оформление и проверим отборы и оформляемые поля.

2. Незаполненность служебных реквизитов формы

В управляемых формах табличная часть Товары часто содержит не только реквизиты самого документа из метаданных, но и дополнительные служебные реквизиты формы. Например, колонку ИспользоватьХарактеристики или ХарактеристикиИспользуются.

При стандартном интерактивном выборе номенклатуры срабатывает событие ТоварыНоменклатураПриИзменении, которое автоматически рассчитывает и заполняет эти служебные флаги. Если же мы добавляем строки программно через Объект.Товары.Добавить(), серверные и клиентские события формы не вызываются автоматически.

Посмотрим на пример стандартного кода заполнения строки:


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

КонецПроцедуры

Вызов процедур общего модуля (например, ОбработкаТабличнойЧастиТоварыСервер.ЗаполнитьПризнакИспользованияХарактеристик) рассчитает признак вести учет по характеристикам для каждой строки и снимет блокировку/оформление с колонки.

3. Проверка владельца характеристики и настроек связей параметров выбора

Справочник ХарактеристикиНоменклатуры является подчиненным. Владельцем элемента может выступать либо конкретная Номенклатура, либо ВидНоменклатуры.

В свойствах элемента формы ТоварыХарактеристика настраивается свойство Связи параметров выбора (например, Отбор.Владелец(Объект.Товары.Номенклатура)). Если программно установить ссылку на характеристику, владелец которой не совпадает с номенклатурой в данной строке, платформа 1С при отрисовке на клиенте не сможет отобразить невалидную характеристику и очистит её представление.

Проанализируем запрос на корректность типов и подчиненности:

  1. Убедимся, что тип реквизита в регистре или источнике данных совпадает с типом реквизита Характеристика в табличной части документа.
  2. Удостоверимся, что характеристика действительно принадлежит выбранной номенклатуре или её виду.

4. Итоговые рекомендации

При программной работе с табличными частями документов в 1С соблюдаем следующий алгоритм:

  1. При заполнении табличной части на сервере всегда вызываем специализированные функции обработки ТЧ для инициализации служебных колонок формы (ЗаполнитьТипНоменклатурыВТЧСервер, ЗаполнитьПризнакИспользованияХарактеристик и т.д.).
  2. Если данные всё равно не отображаются, проверяем процедуры УстановитьУсловноеОформление и свойства условного оформления самой формы.
  3. На клиенте после выполнения серверного заполнения обновляем итоговые показатели и статусы строк с помощью вызова процедур пересчета формы.
← На главную