Разработка и Конфигурация · 10 мин
Как добавить нули в 1С: практическое руководство
Как добавить нули в 1С: ведущие нули в кодах справочников, номерах документов и строках. Формат(), функции дополнения строки, настройка нумераторов и типовые ошибки.
Задача «добавить нули» в 1С возникает в нескольких типовых ситуациях: нужно вывести код или номер с ведущими нулями (0000123 вместо 123), дополнить строку нулями до фиксированной длины для обмена с банком или ЭДО, исправить нумерацию документов или справочника. Каждый случай решается своим способом — от функции Формат() до штатных механизмов нумераторов и обработок группового изменения.
Важно сразу различить два принципиально разных подхода. Первый — изменить только отображение числа, не меняя данные в базе: это безопасно и обратимо. Второй — физически изменить коды и номера в базе: это затрагивает ссылки, печатные формы и обмены, поэтому требует резервной копии и проверки последствий.
Ниже разобраны оба подхода с конкретными примерами кода на встроенном языке 1С, настройками конфигуратора и способами проверить результат без риска для учётных данных.
Определите, где именно нужны нули
Прежде чем что-то менять, ответьте на вопрос: нули нужны только на экране и в печатной форме или физически в базе данных? От ответа зависит весь дальнейший путь. Форматирование при выводе не трогает данные и не ломает ссылки — это всегда предпочтительный вариант. Изменение хранимых кодов и номеров затрагивает нумерацию, обмены с другими системами и уже выданные документы.
Типичные сценарии: выгрузка в банк-клиент требует номер счёта или документа фиксированной длины; контрагент просит счета-фактуры с номером вида 000001; штрихкоды и артикулы должны иметь фиксированную длину; коды справочника «Номенклатура» «съехали» после переноса данных. В первых трёх случаях почти всегда достаточно форматирования строки.
Как выбрать действие
Вывод числа с ведущими нулями через Формат()
Самый простой и безопасный способ — функция встроенного языка Формат(). Она преобразует число в строку заданного вида, не изменяя исходное значение. Ключевые параметры: ЧЦ — общая длина строки, ЧВН — признак дополнения ведущими нулями.
Пример: Формат(123, "ЧЦ=8; ЧВН=") вернёт строку «00000123». Если убрать ЧВН, число дополнится пробелами слева, что для выгрузок обычно неприемлемо. Пустое значение после «ЧВН=» — это нормально, параметр работает как флаг.
НомерСтрокой = Формат(НомерДокумента, "ЧЦ=10; ЧВН=");
// Результат: "0000000123"
Сообщить(НомерСтрокой);В макетах печатных форм и СКД формат можно задать без кода: в свойствах ячейки макета или поля набора данных есть свойство «Формат», куда вписывается та же строка ЧЦ=10; ЧВН=. Это удобно, когда правится типовая печатная форма через расширение или внешнюю печатную форму.
Дополнение строки нулями до нужной длины
Если исходное значение уже строка (например, строковый код справочника или номер, прочитанный из файла), Формат() не подойдёт — нужно дополнить строку вручную. Классический приём: прибавить значение к строке из нулей и взять правые символы через функцию Прав().
КодСтрокой = "457";
Длина = 8;
Результат = Прав("000000000000" + КодСтрокой, Длина);
// Результат: "00000457"Этот способ работает и с буквенно-цифровыми кодами: нули добавятся слева, а содержимое сохранится. Следите только за тем, чтобы строка-«заполнитель» из нулей была не короче целевой длины, иначе Прав() обрежет исходное значение. Более надёжный вариант — цикл или функция, которая добавляет нули, пока СтрДлина() меньше нужной.
В типовых конфигурациях часто есть готовые функции общих модулей, например дополнение строки символом до заданной длины в составе БСП (Библиотека стандартных подсистем). Перед написанием своей функции проверьте наличие типовой — это снижает риск расхождений при обновлениях.
Настройка длины и типа кода/номера в конфигураторе
Когда нули должны храниться в базе, отправная точка — свойства объекта метаданных. У справочников и документов в конфигураторе задаются: тип кода/номера (число или строка), длина, признаки автонумерации и контроля уникальности. Именно тип определяет, возможны ли ведущие нули в принципе.
Числовой код физически не хранит ведущие нули: 000123 и 123 для платформы — одно и то же число. Если нули обязательны, тип должен быть строкой с достаточной длиной. При этом автонумерация для строковых кодов тоже работает, но платформа подбирает следующее значение иначе, чем для чисел, и при смешанных данных (часть кодов с нулями, часть без) возможны сюрпризы вроде дублирования.
- 1Откройте свойства справочника или документа, закладка «Нумерация» (или «Данные» для кода)
- 2Установите тип кода/номера «Строка» и длину, достаточную с учётом нулей
- 3Включите автонумерацию и контроль уникальности
- 4Обновите конфигурацию базы данных (F7) в монопольном режиме
- 5Проверьте создание нового элемента: код должен формироваться с ведущими нулями
Изменение типа с числа на строку — реструктуризация: платформа преобразует существующие значения. На больших таблицах это занимает заметное время и требует монопольного доступа. Существующие числовые коды при этом станут строками без нулей («123»), то есть старые данные придётся дополнять отдельной обработкой.
Исправление существующих кодов и номеров
Чтобы добавить нули в уже существующие данные, используют обработку группового изменения реквизитов (в типовых конфигурациях она есть в разделе администрирования) или собственную сервисную обработку. Логика простая: выбрать элементы, вычислить новый код как дополненную нулями строку, записать.
Для документов учитывайте периодичность нумерации и префиксы: в типовых конфигурациях номер часто формируется механизмом префиксации (префикс организации, базы, узла обмена), и вручную «вклиниваться» в эту схему опасно. Если задача — только красивый вывод на печать, ограничьтесь форматной строкой в макете, а номер в базе не трогайте.
После перенумерации проверьте: отсутствие дублей (контроль уникальности должен быть включён), корректность следующего автоматически присваиваемого номера, целостность обменов. Если база участвует в РИБ или синхронизации с другими программами, согласуйте изменение номеров с администратором обмена — иначе возможны коллизии.
Нули при обмене, выгрузке и печати
Отдельный класс задач — требования внешних систем. Банковские форматы, ЭДО, маркировка и государственные порталы нередко требуют поля фиксированной длины с дополнением нулями слева. Здесь правильное место для дополнения — момент формирования файла или печатной формы, а не хранение.
Практическое правило: в базе храните «естественное» значение (число или короткую строку), а нули добавляйте в коде выгрузки через Формат() или Прав(). Тогда при изменении требований внешней системы достаточно поправить одно место в обработке, а не перекраивать данные.
Как проверить результат
Длина равна заданной, исходные цифры в конце без изменений
Обрезаны старшие разряды или вместо нулей пробелы
Автонумерация продолжается с нулями, дублей нет
Создаются дубли или код без нулей
Номер выводится с нужным количеством нулей
Номер обрезан или отличается от выгружаемого в ЭДО
Типичные ошибки и ограничения
Самая частая ошибка — попытка хранить ведущие нули в числовом поле. Число не может содержать ведущих нулей по определению; сколько ни меняй отображение, при записи числа 000123 оно станет 123. Если нули значимы (например, это часть артикула), поле должно быть строковым.
Вторая ошибка — смешение подходов: часть документов перенумеровали с нулями, часть осталась без, итоговая сортировка и поиск по номеру стали непредсказуемыми. Строковая сортировка ставит «000123» и «123» в разные места. Если уж решили хранить нули, приведите к единому формату все записи периода.
FAQ
Почему 1С убирает нули в начале кода?
Потому что код или номер имеет числовой тип. Число не хранит ведущие нули: 00045 и 45 — одно значение. Чтобы нули сохранялись, измените тип на строку в конфигураторе или форматируйте значение только при выводе через Формат().
Как вывести номер документа с нулями только в печатной форме?
В макете печатной формы откройте свойства ячейки с номером и в поле «Формат» укажите, например, ЧЦ=8; ЧВН=. Либо в коде формирования формы присвойте параметру значение Формат(Номер, "ЧЦ=8; ЧВН="). Данные в базе при этом не меняются.
Можно ли добавить нули к кодам всего справочника сразу?
Да, обработкой группового изменения реквизитов или собственной обработкой: для каждого элемента вычислите новый код как Прав("0000000000" + СтарыйКод, НужнаяДлина) и запишите. Перед запуском сделайте резервную копию и убедитесь, что тип кода — строка достаточной длины.
Что делать, если после загрузки из Excel коды потеряли нули?
Excel при вставке данных часто преобразует «000123» в число 123. Исправьте исходный файл: задайте текстовый формат столбца до вставки значений, затем загрузите заново. Если данные уже в базе, дополните коды нулями обработкой, как описано выше.
Опасно ли менять нумерацию документов в работающей базе?
Да, если менять номера уже использованных документов: они фигурируют в печатных формах, ЭДО и отчётности, и расхождения приведут к проблемам с контрагентами и проверяющими. Безопасный вариант — менять только отображение номера, а не его значение, либо настраивать нумерацию до начала ведения учёта.
Что важно запомнить
Ведущие нули в 1С — это либо форматирование при выводе (Формат с ЧЦ и ЧВН, дополнение строки через Прав), либо строковый тип кода/номера в конфигураторе. Числовые поля нули хранить не могут. Массовое изменение существующих номеров делайте только после резервной копии и с проверкой уникальности.