В платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с особенностью графического движка: по умолчанию нулевые значения в числовых колонках табличных частей документов, справочников или журналов не отображаются. Вместо ожидаемого «0» пользователь видит пустую ячейку. Это может вводить в заблуждение, особенно когда важно отличить незаполненное значение от осознанно введенного нуля.
В рамках данной статьи мы разберем причины такого поведения платформы и изучим все доступные методы решения проблемы — от простых манипуляций с форматной строкой до создания комбинированных колонок.
Разберем ситуацию: в конфигураторе реквизит определен как Число. При выводе на форму в табличную часть 1С автоматически применяет стандартное форматирование. Исторически в интерфейсах 7.7 было принято «очищать» таблицу от лишних нулей для лучшей читаемости, чтобы значимые цифры выделялись на фоне пустоты. Однако программного переключателя «Отображать ноль» в свойствах колонки типа Число просто не существует. Поэтому нам придется использовать обходные пути.
Проанализируем самый надежный и часто используемый метод. Он заключается в том, чтобы заменить отображение реального числового реквизита на вычисляемое текстовое поле. Рассмотрим по шагам, как это реализовать:
Рассмотрим пример кода для поля «Формула»:
// Предположим, наш реквизит называется Сумма
Формат(Сумма, "Ч10.2")
Если стандартный формат все равно «съедает» ноль, можно использовать более жесткое условие в формуле:
?(Сумма = 0, "0.00", Формат(Сумма, "Ч10.2"))
Важный нюанс: Текстовая колонка предназначена только для вывода данных. Пользователь не сможет кликнуть по ней и ввести новое число. Чтобы сохранить возможность редактирования, старую числовую колонку делают невидимой (ширина 0) или размещают рядом, а текстовую используют только для красоты.
Выясним, как работают управляющие символы в функции Формат(). Платформа 7.7 имеет специфический синтаксис форматных строк, который позволяет управлять отображением знаков.
Проанализируем основные спецификаторы для чисел:
Ч10.2 — стандартный вывод числа длиной 10 знаков с 2 знаками после запятой.Ч010.2 — если в начале стоит «0», это дает команду платформе подавлять нулевые значения (выводить пустоту). Это то, что работает по умолчанию.Ч-10.2 — символ «минус» перед длиной поля заменяет нулевое значение на прочерк («-»).Если мы работаем с объектом ТаблицаЗначений, который выводится на форму, мы можем задать формат при программном создании колонок. Разберем пример:
ТЗ = СоздатьОбъект("ТаблицаЗначений");
// Синтаксис: НоваяКолонка(Идентификатор, Тип, Длина, Точность, Заголовок, Ширина, Формат)
ТЗ.НоваяКолонка("Сумма", "Число", 15, 2, "Сумма", 10, "Ч10.2");
ТЗ.НоваяСтрока();
ТЗ.Сумма = 0;
// В некоторых случаях даже это не заставит 1С показать 0 в числовом типе,
// поэтому лучше создавать колонку как текстовую
Если вы используете ТаблицуЗначений на форме как произвольный элемент управления (не связанный напрямую с реквизитами документа), то самый простой способ увидеть «0» — это хранить данные в колонке с типом «Строка» или вообще без указания типа.
Рассмотрим ситуацию: если колонка не имеет строгого типа «Число», 1С выводит в нее ровно то, что вы туда записали. Посмотрим на пример заполнения:
ТЗ.НоваяКолонка("ОтображаемаяСумма"); // Тип не задан
ТЗ.НоваяСтрока();
НулевоеЗначение = 0;
ТЗ.ОтображаемаяСумма = Формат(НулевоеЗначение, "Ч10.2");
// Теперь в ячейке будет строковый ноль "0.00", который не исчезнет
Если перед нами стоит задача сделать так, чтобы пользователь видел «0», мог на него нажать и изменить, нам придется реализовать механизм «подмены» колонок. Выполним следующие шаги:
ЧислоРеал (тип Число) и ЧислоТекст (тип Текст).ЧислоТекст пишем: ПредставлениеЧисла().
Функция ПредставлениеЧисла()
Возврат ?(ЧислоРеал = 0, "0", Строка(ЧислоРеал));
КонецФункции
При этом, чтобы редактирование работало корректно, нам нужно использовать предопределенные процедуры ПриНачалеРедактированияСтроки(). Однако стоит помнить, что в штатной 1С 7.7 управление видимостью отдельных колонок «на лету» сильно ограничено. Для полноценной реализации такого интерфейса профессионалы часто используют внешние компоненты, такие как FormEx, которые позволяют перехватывать событие отрисовки ячейки и рисовать там любой текст (включая ноль) поверх стандартного поведения системы.
Чтобы быстро сориентироваться, используйте эту шпаргалку для функции Формат(Значение, "Строка"):
"Ч10.2"."Ч-10.2"."Ч010.2"."Ч(0)10.2".Таким образом, мы выяснили, что в 1С 7.7 отображение нуля в числовой колонке — это не вопрос настройки одного свойства, а вопрос выбора правильной стратегии вывода данных: либо через формат в текстовом поле, либо через программную обработку строк в таблице значений.