Разработка и Конфигурация · 10 мин
Как убрать лидирующие нули в номере документа в 1С
Как убрать лидирующие нули в номере документа 1С: настройка нумератора, обработка номеров, типовые функции и риски при перенумерации. Пошаговая инструкция.
Лидирующие нули в номерах документов 1С появляются из-за фиксированной длины номера и типового механизма нумерации: платформа дополняет номер нулями слева до заданной длины, чтобы обеспечить корректную строковую сортировку. Например, вместо «125» документ получает номер «000000125». Для внутреннего учёта это удобно, но при печати, обмене с контрагентами или выгрузке в другие системы нули часто мешают.
Убрать нули можно несколькими способами: изменить настройки нумератора в конфигураторе, скорректировать формирование номера в момент записи документа, обработать номер только при выводе на печать или при обмене данными. Выбор зависит от того, где именно нули мешают — в базе, в печатной форме или во внешней системе.
Важно понимать: механизм дополнения нулями встроен в платформу и работает автоматически при присвоении номера. Полностью «отключить» его штатной галочкой нельзя — потребуется либо изменение конфигурации, либо программная обработка. Ниже разобраны все рабочие варианты с ограничениями и рисками.
Почему 1С добавляет нули в начало номера
У каждого вида документов в конфигураторе задано свойство «Длина номера» — обычно от 6 до 11 символов. Номер хранится как строка, и чтобы сортировка по номеру давала правильный порядок (чтобы «2» не оказалась после «10»), платформа дополняет номер нулями слева до полной длины. Это стандартное поведение механизма нумерации.
Дополнительно на формат номера влияют префиксы: префикс организации, префикс информационной базы при обмене, префикс нумератора. Они занимают часть отведённой длины, а оставшееся место заполняется цифрами и нулями. Поэтому номер вида «00БП-000123» — это префикс плюс дополненный нулями порядковый номер.
Менять длину номера в типовой конфигурации без необходимости не стоит: уменьшение длины может привести к ошибкам при достижении предела нумерации, а в типовых решениях длина согласована с механизмами обмена и печати.
Способ 1. Настройка нумератора и префиксов в конфигураторе
Первый шаг — проверить, не является ли источником лишних символов префикс. Откройте конфигуратор, найдите нужный вид документа, перейдите на закладку «Нумерация» и посмотрите свойства: длину номера, нумератор, признаки автонумерации и контроля уникальности. Если документ использует общий нумератор, откройте его свойства — там задаётся префикс и периодичность.
Уберите лишний префикс нумератора, если он не нужен, и проверьте настройки префиксации в самой программе: в типовых конфигурациях есть функциональная опция «Префиксы организаций и информационной базы», где можно отключить или изменить префикс. Это не удалит нули полностью, но сократит «лишнюю» часть номера.
Уменьшать свойство «Длина номера» — крайняя мера. Сделать это можно только в режиме изменения конфигурации (для типовой — при снятии с полной поддержки или через расширение, если длина позволяет), и перед этим нужно убедиться, что существующие номера умещаются в новую длину, иначе обновление конфигурации базы завершится ошибкой.
Способ 2. Программное присвоение номера без нулей
Если конфигурацию можно дорабатывать, номер без нулей формируют вручную в обработчике «ПриУстановкеНовогоНомера» модуля объекта документа. В этом событии можно отменить стандартную обработку и присвоить номер самостоятельно — тогда платформа не будет дополнять его нулями.
// Пример: присвоение номера без лидирующих нулей
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
СтандартнаяОбработка = Ложь;
// Получаем максимальный числовой номер за период и добавляем 1
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1 Реализация.Номер КАК Номер
|ИЗ Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ Реализация.Дата МЕЖДУ &НачалоГода И &КонецГода
|УПОРЯДОЧИТЬ ПО Реализация.Дата УБЫВ");
// ... обработка результата и присвоение Номер = Строка(НовыйНомер);
КонецПроцедуры
У этого подхода есть серьёзные ограничения. Сортировка документов по номеру станет строковой: «10» окажется раньше «2», и журналы документов будут отображаться в непривычном порядке. Кроме того, при ручной нумерации нужно самостоятельно обеспечивать уникальность и учитывать одновременную работу пользователей — типовой механизм это делает автоматически, а самописный код должен защищаться от дублей.
Способ 3. Убрать нули только в печатной форме
Самый безопасный и распространённый вариант — не трогать номер в базе, а обрезать нули при выводе на печать. Во всех типовых конфигурациях для этого есть готовая функция, например в общих модулях префиксации: она удаляет лидирующие нули (а часто и префикс) из номера перед подстановкой в макет печатной формы.
Если печатная форма дорабатывается, в модуле менеджера документа при заполнении параметров макета номер обрабатывается так:
// Удаление лидирующих нулей для печати
НомерДляПечати = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(НомерДокумента, Истина, Истина);
// Или универсальный вариант без типовых модулей:
Пока СтрНачинаетсяС(НомерДляПечати, "0") Цикл
НомерДляПечати = Сред(НомерДляПечати, 2);
КонецЦикла;
Такой подход не влияет на учёт, обмены и сортировку: в базе номер остаётся стандартным, а контрагент видит «чистый» номер без нулей. Именно этот способ рекомендуется, если задача — только внешний вид документов.
Способ 4. Обрезка нулей при обмене данными
Когда нули мешают в интеграции — например, сайт или другая учётная система ожидает номер без нулей, — обработку делают в правилах конвертации или в коде выгрузки. При использовании «Конвертации данных» правило обработки номера добавляется в ПКС (правило конвертации свойств) реквизита «Номер»: в обработчике «Перед выгрузкой» из значения удаляются лидирующие нули.
При обмене через собственные механизмы (HTTP-сервисы, файлы выгрузки) номер обрабатывается тем же циклом удаления нулей или функцией префиксации непосредственно перед помещением в структуру выгрузки. При этом в базе 1С номер остаётся неизменным, что сохраняет целостность нумерации и уникальность.
Обратная сторона — сопоставление при загрузке ответных данных. Если внешняя система возвращает номер без нулей, а в 1С он хранится с нулями, поиск документа по номеру потребует нормализации значения на стороне загрузки. Этот момент нужно предусмотреть заранее, иначе появятся дубли документов.
Сравнение подходов
Подходит, когда проблема в лишнем префиксе. Нули полностью не убирает, но не требует доработок и безопасен
Даёт полностью «чистые» номера в базе, но ломает строковую сортировку и требует контроля уникальности и параллельности
Рекомендуемый вариант: учёт не затрагивается, меняется только отображение. Ограничение — только печатные формы
Подходит для интеграций. Требует симметричной обработки при загрузке ответных данных
Как проверить результат и не сломать нумерацию
После любых изменений создайте несколько тестовых документов и проверьте: присваивается ли номер автоматически, нет ли дублей, корректно ли работает сортировка журнала и правильно ли номер выводится в печатной форме. Особое внимание уделите переходу периода нумерации — создайте документ с датой следующего месяца или года и убедитесь, что нумерация началась заново без ошибок.
Если менялась конфигурация, дополнительно проверьте обмены с другими базами и внешними системами, регламентные задания, которые ищут документы по номеру, и отчёты, где номер используется в отборах. Любое место, где номер сравнивается как строка, потенциально чувствительно к удалению нулей.
Как проверить результат
Номер присваивается автоматически, без ошибок и дублей
Ошибка уникальности или пустой номер при записи
Номер выводится без лидирующих нулей
Нули остались или номер обрезан неправильно
Порядок документов ожидаемый и воспроизводимый
Документы перемешаны из-за строковой сортировки
Внешняя система получает и возвращает сопоставимые номера
Появились дубли или документы не находятся по номеру
Частые вопросы
Можно ли убрать нули без доработки конфигурации?
Полностью убрать нули из номера в базе без программирования нельзя — дополнение нулями выполняет платформа. Без доработок доступно только изменение префиксов и настроек нумератора, что сокращает лишние символы, но не удаляет сами нули. Для печати во многих типовых конфигурациях обрезка уже встроена.
Что будет, если массово перенумеровать документы без нулей?
Изменятся ссылки на документы в печатных формах, актах сверки и внешних системах. Документы, уже отправленные контрагентам, перестанут совпадать по номеру с данными в базе. Перед массовой перенумерацией обязательно сделайте резервную копию и проверьте все интеграции.
Почему после удаления нулей документы в журнале идут не по порядку?
Номер документа — строка, а строки сортируются посимвольно: «10» идёт раньше «2». Лидирующие нули как раз и обеспечивали правильный порядок. Решение — сортировать журнал по дате или сохранить стандартный формат номера в базе, убирая нули только при выводе.
Функция «НомерНаПечать» не убирает нули. В чём причина?
Проверьте параметры вызова: у функции есть флаги удаления префикса и удаления нулей, и они должны быть установлены. Также убедитесь, что в печатной форме используется именно результат функции, а не исходный реквизит «Номер» — во внешних печатных формах это частая ошибка.
Влияет ли удаление нулей на обмен с бухгалтерией или сайтом?
Да, если обмен ищет документы по номеру. Номер с нулями и без — это разные строки, и сопоставление сломается. Безопасный вариант — обрезать нули только при выгрузке и добавлять их обратно (или нормализовать номер) при загрузке ответных данных.
Можно ли изменить длину номера в типовой конфигурации?
Технически — через расширение конфигурации или снятие с полной поддержки, но делать это без крайней необходимости не рекомендуется: уменьшение длины ниже фактической длины существующих номеров приведёт к ошибке обновления, а обновления типовых релизов могут конфликтовать с изменением.
Что важно запомнить
Лидирующие нули — результат стандартного механизма нумерации с фиксированной длиной номера. Самый безопасный способ убрать их — обрезка при печати или при обмене, без изменения данных в базе. Программное присвоение номера без нулей возможно, но требует контроля уникальности и меняет сортировку журналов. Любые изменения проверяйте на копии базы.