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

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

При работе с обычными формами в 1С 8.3 разработчики часто сталкиваются с ситуацией, когда числовые данные в табличном поле (реквизит типа ТаблицаЗначений или СправочникСписок) отображаются некорректно. В частности, если значение в ячейке равно нулю, система по умолчанию может выводить пустую строку вместо символа "0". Это сбивает пользователей с толку, так как визуально невозможно отличить отсутствие данных от реального числового нуля. Ситуация усложняется, если колонки добавляются не в конфигураторе, а динамически с помощью встроенного языка.

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

Разбор основной проблемы: Табличное поле vs Колонки элемента управления

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

Когда мы добавляем колонку в сам объект данных через ТабПоле.Колонки.Добавить(), мы определяем структуру данных. Однако визуальное представление этой колонки (шрифт, цвет, формат числа) настраивается через коллекцию колонок именно элемента управления, который находится в коллекции ЭлементыФормы.

Способ 1. Установка формата через прямое обращение к колонке

Если нам известно имя создаваемой колонки, самый быстрый и эффективный способ — обратиться к свойству Формат соответствующего элемента управления. Рассмотрим пример кода, который решает задачу:


// 1. Добавляем колонку в объект данных (ТаблицаЗначений)
ТабПоле.Колонки.Добавить("ФактОбщий", Новый ОписаниеТипов("Число"), "Факт общий");

// 2. Добавляем колонку в элемент управления (ТабличноеПоле на форме)
НоваяКолонка = ЭлементыФормы.ТабПоле.Колонки.Добавить("ФактОбщий");
НоваяКолонка.Данные = "ФактОбщий";
НоваяКолонка.Заголовок = "Факт общий";

// 3. Устанавливаем формат отображения нуля
НоваяКолонка.Формат = "ЧН=0";

В данном примере строка "ЧН=0" является форматной строкой. Параметр ЧН (Число Ноль) указывает системе, какой текст выводить, если значение равно 0. Если мы напишем "ЧН=", то при нуле будет пустота.

Способ 2. Использование метода Найти() для существующих колонок

Иногда колонки создаются платформой автоматически (например, при вызове метода СоздатьКолонки()), и нам нужно изменить их свойства уже после создания. В этом случае мы проанализируем коллекцию колонок элемента управления с помощью метода Найти().


// Допустим, колонки уже созданы автоматически
ЭлементыФормы.ТабПоле.СоздатьКолонки();

// Ищем нужную колонку по имени
ИскомаяКолонка = ЭлементыФормы.ТабПоле.Колонки.Найти("ФактОбщий");

Если ИскомаяКолонка <> Неопределено Тогда
    ИскомаяКолонка.Формат = "ЧН=0";
КонецЕсли;

Важный момент: Обратите внимание, что обращение к ЭлементыФормы.ТабПоле.Колонки.ФактОбщий (через точку) сработает только в том случае, если колонка с таким именем точно существует. Если есть риск, что колонки не будет, метод Найти() безопаснее, так как он не вызовет ошибку исполнения.

Нюансы настройки числовых типов (Квалификаторы)

Выясним причину, по которой форматная строка иногда может игнорироваться. Если колонка имеет неопределенный тип или составной тип, система не всегда понимает, что перед ней число. Для стабильной работы ЧН=0 рекомендуется четко задавать квалификаторы числа при создании описания типов.


// Определяем точность: 15 знаков всего, 2 знака после запятой
КвалификаторыЧисла = Новый КвалификаторыЧисла(15, 2);
ТипЧисло = Новый ОписаниеТипов("Число", КвалификаторыЧисла);

// Добавляем колонку с жестко заданным типом
ТабПоле.Колонки.Добавить("Сумма", ТипЧисло);
ЭлементыФормы.ТабПоле.Колонки.Сумма.Данные = "Сумма";
ЭлементыФормы.ТабПоле.Колонки.Сумма.Формат = "ЧН=0,00";

Использование ЧН=0,00 заставит систему выводить "0,00" вместо пустого поля, что критично для бухгалтерских и финансовых отчетов.

Альтернативный вариант: Обработка события ПриВыводеСтроки

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

Разберем по шагам, как это реализовать:

  1. В свойствах элемента управления ТабличноеПоле создадим обработчик события ПриВыводеСтроки.
  2. Внутри обработчика обратимся к оформлению конкретной ячейки.

Процедура ТабПолеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    // Получаем ячейку по имени колонки
    Ячейка = ОформлениеСтроки.Ячейки.ФактОбщий;
    
    // Включаем отображение текста, если оно было выключено
    Ячейка.ОтображатьТекст = Истина;
    
    // Проверяем значение и устанавливаем текст вручную
    Если ДанныеСтроки.ФактОбщий = 0 Тогда
        Ячейка.Текст = "0";
    Иначе
        // Можно использовать стандартное форматирование для остальных чисел
        Ячейка.Текст = Формат(ДанныеСтроки.ФактОбщий, "ЧЦ=15; ЧДЦ=2");
    КонецЕсли;
КонецПроцедуры

Преимущество: Этот метод позволяет гибко управлять цветом текста или фона. Например, можно выделить нулевые значения серым цветом, чтобы они не отвлекали внимание.

Типичные ошибки при программном добавлении колонок

Проанализируем типичный "подводный камень", с которым сталкиваются разработчики в обычных формах. Это порядок установки свойств Данные и ЭлементУправления.

Если вы хотите, чтобы в колонке было не просто текстовое поле, а, например, флажок или поле выбора, крайне важно сначала вызвать метод УстановитьЭлементУправления(), а только потом назначать свойство Данные. Хотя для простого формата это менее критично, соблюдение правильного порядка гарантирует предсказуемое поведение интерфейса.


Колонка = ЭлементыФормы.ТабПоле.Колонки.Добавить("Статус");
Колонка.Имя = "Статус";
// Сначала устанавливаем тип элемента управления
Колонка.УстановитьЭлементУправления(Тип("ПолеВвода"));
// Затем привязываем к данным
Колонка.Данные = "Статус";
// И только потом настраиваем формат
Колонка.Формат = "ЧН=0";

Подведем итоги

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

Эти методы позволяют создавать профессиональные и понятные интерфейсы даже в рамках устаревших, но все еще актуальных обычных форм.

← На главную