При разработке в 1С разработчики часто сталкиваются с задачей сохранения лидирующих нулей при преобразовании данных. Например, при конвертации строки "0005" с помощью функции Число() платформа возвращает значение 5. Рассмотрим, почему это происходит и как правильно получить значение вида "0005".
Выясним причину, почему ведущие нули пропадают. В платформах 1С примитивный тип данных Число хранит исключительно математическое числовое значение. С точки зрения системы значения 5, 05 и 0005 бинарно и математически абсолютно идентичны.
Функция Число() выполняет явное приведение типа к числовому, в результате чего все незначащие лидирующие нули автоматически отбрасываются. Если вам необходимо сохранить нули (например, для кодов справочников, номеров документов или артикулов), такое значение должно храниться или выводиться как Строка.
Для преобразования числа в строку с нужной длиной и ведущими нулями используется встроенная функция Формат(). Проанализируем пример ее использования:
ИсходноеЧисло = 5;
РезультатСтрока = Формат(ИсходноеЧисло, "ЧЦ=4; ЧВН=; ЧГ=");
// Результат: "0005"
Разберем параметры форматной строки подробнее:
Если требуется получить строковое представление заданной длины без применения форматной строки, рассмотрим альтернативный вариант с использованием функции Прав():
ИсходнаяСтрока = "5";
РезультатСтрока = Прав("0000" + СокрЛП(ИсходнаяСтрока), 4);
// Результат: "0005"
В этом случае мы прибавляем необходимое количество нулей слева и отсекаем с помощью Прав() нужную длину символов справа.
Если разработка ведется в типовой конфигурации, где подключена БСП, то разберем готовый вариант функции из общего модуля:
РезультатСтрока = СтроковыеФункцииКлиентСервер.ДополнитьСтроку("5", 4, "0", "Слева");
// Результат: "0005"
Если реквизит должен оставаться типом Число для участия в математических расчетах, но пользователю на форме необходимо показывать ведущие нули, задайте параметр в свойстве Формат элемента формы (поля ввода или колонки таблицы): ЧЦ=4; ЧВН=; ЧГ=0. В базе данных значение сохранится как 5, а визуально будет отображаться как 0005.