При разработке интерфейсов на платформе 1С:Предприятие 7.7 часто возникает необходимость визуально выделить определенные строки многострочной части документа — например, отметить флажком или значком строки по определенному условию (наличие признака в номенклатуре, статус и т. д.). Нередко начинающие разработчики сталкиваются с ситуацией, когда вместо ожидаемых пиктограмм в таблице отображаются пустые рамки или значок отображается некорректно.
Разберем типичные ошибки, проанализируем механизм работы формул в табличных частях 1С 7.7 и рассмотрим пошаговое руководство по правильной настройке пиктограмм.
Проанализируем две основные причины, из-за которых пиктограммы не отображаются:
ВыбратьСтроки() и цикл, функция на первой же строке вернет результат по первому элементу и прервет нормальную отрисовку таблицы. Методы перебора строк (ВыбратьСтроки(), ПолучитьСтроку()) в формулах табличной части использовать категорически запрещено.Рассмотрим правильный порядок настройки графического отображения условий в многострочной части документа.
Разберем процесс по шагам:
Посмотрим на примеры выражений, которые можно указать непосредственно в свойствах колонки (в поле «Формула» / «Дополнительно»):
Если реквизит ЖизненноВажный принимает значения 0 и 1, можно использовать прямое смещение индекса:
1 + Товар.ЖизненноВажный
Либо используем тернарный оператор для явного выбора номера иконки в ленте:
?(Товар.ЖизненноВажный = 1, 2, 1)
Если логика определения иконки сложнее, вынесем ее в отдельную функцию модуля формы документа без использования циклов:
Функция ПолучитьНомерИконки()
// Обращение к реквизитам идет напрямую в контексте текущей строки
Если Товар.ЖизненноВажный = 1 Тогда
Возврат 2; // Номер картинки "Отмечено"
Иначе
Возврат 1; // Номер картинки "Не отмечено"
КонецЕсли;
КонецФункции
Если нет возможности или необходимости подключать файл с иконками, можно вывести понятный текстовый маркер в обычной колонке типа Текст. В этом случае опцию «Показывать пиктограммы» включать не требуется.
Посмотрим на варианты формул для текстовой колонки:
?(Товар.ЖизненноВажный = 1, "[V]", "[ ]")
Или более лаконичный вариант с отображением отметки только для требуемых строк:
?(Товар.ЖизненноВажный = 1, "+", "")
Проанализируем важный нюанс: обращение к реквизитам через точку (например, Товар.ЖизненноВажный) внутри формул колонок вызывает чтение данных из информационной базы при каждой перерисовке экрана и прокрутке списка.
Если документ содержит большое количество строк, рекомендуется:
ФлагЖВ с длиной 1).1 + ФлагЖВ.Такой подход полностью исключает лишние обращения к базе данных и обеспечивает быстрое отображение многострочной части документа.