К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как оставить лидирующие нули в 1С

Как сохранить лидирующие нули в 1С: настройка типа «Строка», дополнение строки нулями, работа с кодами справочников, выгрузка в Excel и типичные ошибки.

Лидирующие нули пропадают в 1С всякий раз, когда значение хранится или преобразуется как число: числовой тип не сохраняет разрядность, поэтому «007» превращается в «7». Проблема чаще всего всплывает при работе с кодами контрагентов, номерами счетов, артикулами, штрихкодами и при обмене данными с банками и Excel, где формат поля жёстко задан.

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

Почему 1С обрезает лидирующие нули

Числовой тип данных в 1С хранит величину, а не её текстовое представление. Числа 7, 07 и 0007 для платформы — одно и то же значение, поэтому при записи в реквизит типа «Число» нули слева теряются безвозвратно. Это не ошибка программы, а стандартное поведение числовой арифметики.

Вторая частая причина — неявное преобразование типов. Когда строка «0045» складывается с числом, участвует в сравнении с числом или попадает в числовой реквизит, платформа приводит её к числу, и формат разрушается. То же происходит при загрузке данных из файлов, если поле-источник определено как числовое.

Третий сценарий — выгрузка во внешние форматы. Excel при открытии файла самостоятельно интерпретирует содержимое ячеек: текст, похожий на число, преобразуется в число, и нули исчезают уже на стороне Excel, хотя из 1С данные ушли корректными.

Способ 1. Изменить тип реквизита на «Строка»

Самый надёжный вариант — хранить значение, для которого важны нули, в строковом реквизите. В конфигураторе откройте свойства реквизита объекта (справочника, документа, регистра), установите тип «Строка» и задайте фиксированную длину, например 10 символов. После этого значение «000123» будет храниться и отображаться именно в таком виде.

Если реквизит уже заполнен данными и менять тип на строку нельзя из-за существующих числовых значений, потребуется конвертация: перед сменой типа выгрузите значения, после смены — загрузите их обратно с дополнением нулями. Делать это стоит на копии базы, потому что обратное преобразование строки в число после заполнения может оказаться невозможным без потерь.

Для нетиповых доработок в управляемых формах можно оставить реквизит числовым, но добавить рядом строковое поле, которое заполняется автоматически и используется только для отображения и печати. Это компромисс, когда менять структуру типового объекта нежелательно.

Способ 2. Программно дополнить строку нулями

Когда тип реквизита менять нельзя или значение формируется «на лету» — для печатной формы, отчёта или обмена — используйте встроенные средства языка. Самая прямая функция для этой задачи — Формат() с параметром форматирования числа по шаблону:

КодСНулями = Формат(НомерЗначение, "ЧЦ=6; ЧВН=; ЧГ=0");

// для НомерЗначение = 45 результат: "000045"

Здесь ЧЦ=6 задаёт общее количество знаков, а ЧВН= с пустым значением включает вывод ведущих нулей. Параметр ЧГ=0 отключает группировку разрядов, чтобы в строке не появились пробелы-разделители.

Альтернатива — ручное дополнение циклом или через функции работы со строками, когда нужен нестандартный шаблон:

Стр = Строка(НомерЗначение);

Пока СтрДлина(Стр) < 6 Цикл

Стр = "0" + Стр;

КонецЦикла;

bsl
КодСНулями = Формат(Значение, "ЧЦ=10; ЧВН=; ЧГ=0"); // 123 -> "0000000123"

Способ 3. Лидирующие нули в кодах справочников

Коды справочников и номера документов — самое частое место требования «чтобы было с нулями». Если код справочника строковый, платформа сама поддерживает фиксированную длину: в свойствах справочника установите тип кода «Строка», длину, например, 9, и включите контроль уникальности. Тогда коды вида «000000123» сохраняются естественным образом.

Для числовых кодов и номеров документов нули в базе не хранятся, но могут выводиться при отображении и печати. В типовых конфигурациях номер документа обычно строковый и префикс/нули в нём сохраняются; если нумерация «съехала» и нули пропали, проверьте настройки нумератора и длину номера в свойствах объекта.

Если требуется, чтобы в отчётах числовой код показывался с нулями, применяйте функцию Формат() в запросе или при выводе поля, не трогая сами данные. Это безопасно: представление меняется, а хранимое значение и связи по коду остаются прежними.

Сравнение вариантов

Строковый реквизит

Подходит для новых полей и обменов со строгим форматом; ограничение — нельзя использовать значение в арифметике без преобразования.

Формат() при выводе

Подходит для печати, отчётов, файлов; ограничение — в самой базе значение остаётся числовым, нули видны только в месте применения.

Отдельное строковое поле-дубль

Подходит, когда типовой объект менять нельзя; ограничение — нужно поддерживать синхронность двух полей.

Сохранение нулей при выгрузке в Excel и обмене данными

При выгрузке в Excel формируйте ячейку как текст. В табличном документе 1С перед записью значения установите параметр ТипЗначения области как строку или запишите значение с явным признаком текста. При программной работе с COM-объектом Excel задайте формат ячейки «текстовый» до записи значения — после записи число уже преобразовано, и менять формат поздно.

При выгрузке в CSV и XML дополнительная защита — всегда передавать значение уже отформатированной строкой через Формат(), а не исходное число. Тогда даже если принимающая система попытается трактовать поле как число, исходный файл содержит корректные данные, и ответственность за обрезку лежит на стороне приёмника.

Для обменов с банками и контрагентами (номера счетов, БИК, ИНН) храните эти реквизиты строго строковыми. ИНН из 10 или 12 знаков, БИК из 9 знаков — классические примеры полей, где числовой тип гарантированно портит данные: ИНН, начинающийся с нуля, в числовом виде потеряет разряд.

Порядок действий при обрезке нулей в выгрузке
  1. 1
    Определите, где теряются нули: в базе, в момент формирования файла или при открытии файла в Excel.
  2. 2
    Проверьте тип реквизита-источника: число или строка.
  3. 3
    Если нули теряются в файле — примените Формат() с ЧВН при формировании значения.
  4. 4
    Если нули теряются при открытии в Excel — сделайте ячейку текстовой до записи значения.
  5. 5
    Проверьте результат на контрольном примере с заведомо длинным значением, например «0000000042».

Как проверить результат и типичные ошибки

Проверку делайте на граничных примерах: значение из одной цифры («7» → «000007»), значение, уже содержащее нули, и значение максимальной длины, которое не должно дополняться и обрезаться. Убедитесь, что длина результата везде одинакова — это главный признак корректной работы формата.

Отдельно проверьте сортировку и поиск. Строковые коды с нулями сортируются правильно («0002» раньше «0010»), а строки без дополнения — нет («10» окажется раньше «2»). Если после перехода на строковый код отчёты стали выводить элементы в странном порядке, причина почти наверняка в неодинаковой длине значений.

Типичные ошибки
01
Хранить ИНН, БИК или номер счёта в числовом реквизите — значения с нулём в начале теряют разряд уже при записи.
02
Применять Формат() к значению, которое уже обрезано числовым реквизитом, — восстановить утраченные нули так нельзя, функция работает только с текущей величиной.
03
Менять формат ячейки Excel после записи значения — число уже преобразовано, формат нужно задавать до записи.
04
Дополнять нулями вручную в части мест и забывать про другие — в отчётах и обменах появляются значения разной длины, ломается сортировка и сопоставление.
05
Забыть параметр ЧГ=0 в Формат() — в строке появляются разделители групп разрядов, которые портят код.
Контрольные точки

Как проверить результат

Длина значения после обработки
Норма

Все значения одинаковой заданной длины

Тревожный признак

Длина «плавает», часть значений короче

Сортировка в списке или отчёте
Норма

Коды идут в возрастающем порядке

Тревожный признак

«10» стоит раньше «2»

Файл выгрузки, открытый в текстовом редакторе
Норма

В файле видны нули: 000123

Тревожный признак

В файле уже 123 — нули потеряны на этапе формирования

Сравнение со старыми данными
Норма

Связи по коду и поиск работают как раньше

Тревожный признак

Дубли или «потерянные» элементы после смены типа

Часто задаваемые вопросы

Можно ли вернуть нули, если значение уже сохранено как число?

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

Почему в Excel нули есть в файле, но пропадают при открытии?

Excel при открытии CSV или при вставке данных сам преобразует текст, похожий на число, в число. Открывайте CSV через мастер импорта данных и назначайте столбцу текстовый формат, либо выгружайте из 1С сразу в формат Excel с заранее текстовыми ячейками.

Что выбрать для нового реквизита: строку или число с форматом?

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

Влияет ли смена типа кода справочника на существующие данные?

Да. Смена типа кода запускает реструктуризацию, и числовые коды преобразуются в строки без нулей. После конвертации потребуется обработка, дополняющая коды нулями до нужной длины, иначе сортировка и поиск будут работать некорректно.

Как вывести нули в печатной форме, не меняя конфигурацию?

Если печатная форма формируется внешней обработкой или её макет доступен для настройки, значение выводится через выражение с Формат(). В типовых конфигурациях без доработки можно использовать механизм дополнительных печатных форм, где доступен произвольный код формирования.

Почему после дополнения нулями перестал работать поиск по коду?

Поиск строкового значения выполняется по точному совпадению: «123» и «000123» — разные строки. Приведите к единому формату и хранимые значения, и строку поиска, либо вводите код в поисковую строку полностью, с нулями.

Итог

Что важно запомнить

Нули сохраняются только в строках: храните коды и идентификаторы в строковых реквизитах, для вывода чисел используйте Формат() с ЧВН, а при выгрузке в Excel делайте ячейки текстовыми до записи значения. Перед сменой типа существующего реквизита делайте резервную копию и проверяйте конвертацию на копии базы.