Как отобразить лидирующие нули в табличной части 1С?

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

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

В чем причина пропадания ведущих нулей?

Главная причина заключается в принципиальной разнице между числовым типом данных и его строковым представлением. В математическом смысле число 000123 и число 123 абсолютно тождественны. Тип данных Число в памяти системы хранит только само математическое значение без информации о количестве незначащих нулей впереди.

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

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

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

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

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

  1. В палитре свойств колонки табличного поля на форме найдем свойство Формат.
  2. Установим строку формата с нужной разрядностью (например, для 6 знаков): ЧЦ=6; ЧВН=; ЧГ=0.
  3. Обратим внимание на свойство ФорматРедактирования: чтобы при редактировании ячейки нули не исчезали, продублируем эту же строку формата и в нем.

Если требуется задать формат программно при открытии формы, используем следующий код:


Элементы.ТабличнаяЧастьИмяКолонки.Формат = "ЧЦ=6; ЧВН=; ЧГ=0";
Элементы.ТабличнаяЧастьИмяКолонки.ФорматРедактирования = "ЧЦ=6; ЧВН=; ЧГ=0";

Для обычных форм также можно использовать событие табличного поля ПриВыводеСтроки, переопределяя текстовое представление ячейки без изменения самих данных:


Процедура ТабличнаяЧастьПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    ОформлениеСтроки.Ячейки.ИмяКолонки.Текст = Формат(ДанныеСтроки.ИмяКолонки, "ЧЦ=6; ЧВН=; ЧГ=0");
КонецПроцедуры

Способ 2. Использование реквизита строкового типа

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

Однако при смене типа реквизита метод Загрузить() не добавит нули автоматически, если запрос возвращает обычное число. В таком случае выполним предварительную обработку таблицы значений перед загрузкой в табличную часть.

Посмотрим на пример обработки таблицы значений через цикл:


Результат = Запрос.Выполнить().Выгрузить();

Для Каждого Стр Из Результат Цикл
    Стр.ИмяКолонки = Формат(Стр.ИмяКолонки, "ЧЦ=6; ЧВН=; ЧГ=0");
КонецЦикла;

ЭтотОбъект.ТабличнаяЧасть.Загрузить(Результат);

Также дополнить строку нулями слева до фиксированной длины можно стандартными строковыми функциями:


// Классический способ дополнения строки символами слева
СтроковоеЗначение = Прав("000000" + СокрЛП(ЧисловоеЗначение), 6);

// Способ с использованием функции Библиотеки Стандартных Подсистем (БСП)
СтроковоеЗначение = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(ИсходноеЗначение, 6, "0", "Слева");

Резюме и рекомендации

Проанализируем, какой подход выбрать для конкретной задачи:

  1. Тип «Число» выбираем, если значение является количественным или суммовым показателем. Ведущие нули при этом формируются исключительно визуально через строку формата ЧЦ=...; ЧВН=; ЧГ=0.
  2. Тип «Строка» выбираем для кодов, артикулов и номеров. Форматирование выполняется на этапе заполнения данных до вызова метода Загрузить().
← На главную