Как программно установить текст в ячейке таблицы управляемой формы 1С?

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

При переходе с обычных форм на управляемые многие разработчики сталкиваются с отсутствием привычного события ПриВыводеСтроки, которое позволяло напрямую управлять свойством Ячейка.Текст. В управляемом интерфейсе логика работы с данными и их визуальным представлением строго разделена. Основным инструментом для изменения оформления ячеек «на лету» является Условное оформление. Однако здесь есть свои нюансы, особенно когда требуется вывести не просто значение реквизита, а результат сложения нескольких строк (например, «Артикул + Наименование»).

В этой статье мы подробно разберем, почему стандартный подход через параметр «Текст» может не работать напрямую, и как правильно реализовать задачу программно.

Анализируем проблему: ограничение параметра «Текст»

Рассмотрим ситуацию, когда автор пытается установить значение параметра «Текст» в условном оформлении, передавая туда путь к данным. Основная ошибка заключается в попытке вычислить выражение внутри самого оформления. Условное оформление (УО) не умеет выполнять конкатенацию строк или сложные математические операции. Оно ожидает либо статичную строку (константу), либо ссылку на одно конкретное поле компоновки данных.

Если мы напишем Новый ПолеКомпоновкиДанных("МоеДерево.Номенклатура.Артикул"), система подставит значение этого поля. Но если мы хотим видеть «Артикул + Наименование», нам придется подготовить эти данные заранее в структуре самой таблицы или дерева значений.

Решение №1: Использование вспомогательной колонки в дереве или таблице

Самый надежный способ вывести составной текст в управляемой форме — это создание расчетной колонки в самом объекте данных (Дерево значений или Таблица значений). Проанализируем этот алгоритм по шагам:

  1. Добавляем в реквизит формы (например, в МоеДерево) новую колонку ПолноеПредставление с типом Строка.
  2. При заполнении дерева или при изменении данных программно вычисляем значение для этой колонки.
  3. Используем условное оформление, чтобы «подменить» текст в основной колонке Номенклатура данными из скрытой колонки ПолноеПредставление.

Рассмотрим пример кода для программной настройки такого оформления:


// В процедуре ПриСозданииНаСервере или другой инициализирующей процедуре
ЭлементУО = УсловноеОформление.Элементы.Добавить();

// 1. Указываем, какую колонку мы хотим визуально изменить
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("МоеДеревоНоменклатура");

// 2. Указываем источник текста - нашу подготовленную колонку
ЭлементУО.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("МоеДеревоПолноеПредставление"));

// 3. (Опционально) Условие, если оформление нужно не для всех строк
// ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
// ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МоеДерево.ЭтоГруппа");
// ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
// ЭлементОтбора.ПравоеЗначение = Ложь;

Таким образом, колонка Номенклатура будет отображать содержимое колонки ПолноеПредставление, при этом физически данные в основной колонке останутся прежними (что важно для ссылочной целостности).

Решение №2: Динамические списки

Если ваша таблица на форме является Динамическим списком, то задача решается еще проще и элегантнее. Вместо использования условного оформления для подмены текста, мы можем изменить сам запрос динамического списка.

Выясним, как это сделать в редакторе запроса:


ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    СправочникНоменклатура.Артикул + " | " + СправочникНоменклатура.Наименование КАК АртикулИНаименование
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура

После этого в настройках формы вы можете просто вынести поле АртикулИНаименование в таблицу или использовать его как источник для параметра «Текст» в условном оформлении, если хотите перекрыть отображение основной колонки Номенклатура.

Важные технические подробности

Проанализируем несколько критически важных моментов, которые помогут избежать ошибок:

Резюме

Подводя итог, можно сказать: в управляемых формах мы не «пишем текст в ячейку», а «настраиваем правила отображения данных». Для реализации сложной логики (как "Артикул" + "Наименование") всегда используйте промежуточный буфер — скрытую колонку с уже вычисленным значением. Это обеспечит высокую скорость работы интерфейса и корректное отображение данных в соответствии с парадигмой 1С:Предприятие 8.3.

← На главную