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

В этой статье разберём 5 способов удаления ведущих нулей — от простых ручных методов до программных решений с примерами кода. Все инструкции актуальны для 1С:Предприятие 8.3 (включая последние релизы) и адаптированы под типовые конфигурации: Бухгалтерия 3.0, Управление торговлей 11, Зарплата и управление персоналом 3.1 и другие. Особое внимание уделим нюансам, которые часто упускают: влияние на историю изменений, совместимость с внешними системами и производительность при массовой обработке.

Если вы не программист, начните с первых трёх разделов — там описаны методы без кода. Разработчикам пригодятся последние два раздела с примерами на встроенном языке и SQL-запросами. В конце статьи — FAQ с ответами на типичные ошибки и чек-лист для проверки результата.

📊 С какой конфигурацией 1С вы работаете чаще всего?
1С:Бухгалтерия 3.0
1С:Управление торговлей 11
1С:Зарплата и управление персоналом
1С:ERP
Другая типовой конфигурации
Самописная/нетиповая

1. Почему появляются лидирующие нули и когда их нужно убирать

Лидирующие (ведущие) нули в 1С возникают по трём основным причинам:

🔹 Импорт данных из внешних источников. Например, при загрузке справочников из Excel или XML, где номера хранятся как текстовые строки с фиксированной длиной (например, "00012345" вместо "12345"). Типичный случай — миграция данных из устаревших систем типа 1С 7.7 или корпоративных ERP.

🔹 Ошибки в алгоритмах нумерации. В некоторых конфигурациях (например, в 1С:Документооборот) номера документов формируются с автоматическим дополнением нулями до заданной длины. Если этот параметр настроен неверно, нули остаются даже там, где не нужны.

🔹 Требования внешних систем. Банки, госорганы (например, ФНС или ПФР) и некоторые контрагенты могут требовать номера без ведущих нулей в электронных документах (например, в счетах-фактурах или платежных поручениях). В таких случаях нули приходится убирать принудительно.

Когда удаление нулей обязательно:

  • 📄 При обмене данными с банками (например, в платежных поручениях формата 1.03)
  • 📊 В отчётах для госорганов (например, в декларациях или расчётах по страховым взносам)
  • 🔄 При интеграции с CRM или другими системами, где номера используются как уникальные идентификаторы
  • 📎 В печатных формах документов, где нули портят внешний вид (например, в договорах или актах)

Когда нули можно оставить:

  • ⚙️ Если они не мешают бизнес-процессам (например, в внутренних справочниках)
  • 📂 В архивных данных, где изменение номеров может нарушить целостность истории
  • 🔗 Если внешние системы принимают номера как с нулями, так и без них
⚠️ Внимание: Перед массовым удалением нулей проверьте, не используются ли номера как ссылки в других документах или отчётах. Изменение номера может привести к разрыву связей!

2. Способ 1: Ручное редактирование через форму документа

Самый простой метод — исправить номер непосредственно в карточке документа или элемента справочника. Он подходит для единичных случаев, когда нулей мало и они не связаны с другими объектами.

Пошаговая инструкция:

  1. Откройте документ или элемент справочника с лидирующими нулями (например, через журнал документов или список справочника).
  2. Перейдите в режим редактирования (кнопка Изменить или двойной клик по строке).
  3. Найдите поле с номером (обычно оно называется Номер или Код).
  4. Удалите нули вручную или замените номер на корректный (например, 00123123).
  5. Сохраните изменения (кнопка Записать и закрыть или OK).

Ограничения метода:

  • 🐢 Медленно при большом количестве документов (например, если нулей тысячи).
  • 🔗 Может нарушить ссылки, если номер используется в других объектах (например, в движениях документов).
  • 📅 Не подходит для исторических данных — изменение номера документа может исказить отчёты.

Пример:

Допустим, у вас есть документ Поступление товаров №000456. После редактирования он станет Поступление товаров №456. Если этот номер ранее использовался в отчётах или связанных документах (например, в Реализации товаров), ссылки могут "сломаться".

⚠️ Внимание: В некоторых конфигурациях (например, в 1С:ERP) номера документов блокируются после проведения. Чтобы изменить такой номер, сначала нужно сделать документ непроводённым!
💡

Перед массовым ручным редактированием создайте резервную копию базы через Администрирование → Обслуживание → Резервное копирование. Это поможет откатить изменения, если что-то пойдёт не так.

3. Способ 2: Настройка формата отображения в печатных формах

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

Как это работает:

В 1С печатные формы создаются на основе макетов, где для каждого поля можно задать формат отображения. Если номер хранится как строка (например, "001234"), его можно преобразовать в число прямо в макете.

Инструкция для типовой конфигурации:

  1. Откройте печатную форму документа (например, через Печать → Настроить форму).
  2. Перейдите в режим редактирования макета (кнопка Изменить форму или Конструктор макета).
  3. Найдите поле с номером (обычно оно привязано к реквизиту Номер или Number).
  4. В свойствах поля измените формат на Число (если номер — числовой) или используйте выражение вида:
    Число(Значение)
  5. Сохраните макет и проверьте результат.

Пример для справочника Номенклатура:

Если в печатной форме справочника код товара отображается как 000123, а нужно 123, в макете замените поле Код на выражение:

Формат(Код, "ЧДЦ=0; ЧГ=0")

Эта формула убирает все ведущие нули и отображает код как целое число.

Когда этот способ не подходит:

  • 📥 Если нули мешают не только в печати, но и при обмене данными.
  • 🔢 Если номер должен оставаться строкой (например, для совместимости с внешними системами).
  • ⚙️ Если печатная форма не редактируется (например, в облачных версиях 1С).
Как проверить, хранится ли номер как строка или число?

Откройте документ в режиме "Все действия" → "Изменить форму". Найдите поле с номером и посмотрите его тип в свойствах. Если тип — "Строка", значит, нули хранятся явно. Если "Число", то проблема в отображении, а не в данных.

4. Способ 3: Групповая обработка через внешнюю обработку

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

Где взять готовую обработку:

  • 📥 Инфостарт — поиск по запросу "удалить ведущие нули".
  • 📥 Пortal ИТС — в разделе "Обработки для типовой конфигурации".
  • 📥 GitHub — репозитории с открытыми обработками для 1С.

Как использовать обработку:

  1. Скачайте и распакуйте файл обработки (обычно это .epf или .erf).
  2. В 1С откройте Файл → Открыть и выберите скачанный файл.
  3. Запустите обработку и укажите параметры:
    • 📌 Тип объекта (документы, справочники).
    • 📌 Поле, в котором нужно убрать нули (обычно Номер или Код).
    • 📌 Диапазон дат или фильтр для отбора документов.
  4. Нажмите Выполнить и дождитесь завершения.
  5. Популярные обработки:

    Название Автор Поддерживаемые конфигурации Особенности
    Удаление ведущих нулей в номерах Алексей Лукашёв (Infostart) Бухгалтерия 3.0, УТ 11, ERP 2 Работает с документами и справочниками, сохраняет историю изменений
    Массовое изменение номеров Компания "Альт-Софт" Любые типовые конфигурации Поддерживает регулярные выражения для сложных замен
    Очистка номеров от нулей Иван Петров (GitHub) 1С 8.3 (все редакции) Бесплатная, открытый код, требует доработки под специфику базы

    Преимущества метода:

    • ⚡ Быстро обрабатывает тысячи документов.
    • 🛠️ Минимальный риск ошибок (если обработка проверена).
    • 📊 Сохраняет историю изменений (в отличие от прямого SQL).

    Недостатки:

    • 🔧 Требует прав администратора для запуска внешних обработок.
    • 📦 Не все обработки поддерживают нетиповые конфигурации.
    • 🔄 Может не справиться с очень большими базами (более 100 000 документов).
⚠️ Внимание: Перед запуском обработки проверьте её на копии рабочей базы! Некоторые обработки могут изменять не только номера, но и связанные данные (например, движения документов).

Проверьте обработку на тестовой базе|Создайте резервную копию рабочей базы|Уточните, какие типы документов нужно обработать|Согласуйте изменения с бухгалтерией (если номера используются в отчётах)|Запустите обработку в нерабочее время-->

5. Способ 4: Программное решение на встроенном языке 1С

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

Пример кода для удаления нулей в номерах документов:

Процедура УбратьВедущиеНулиИзНомеров()

// Отбор документов за последний год

НачалоПериода = НачалоГода(ТекущаяДата());

КонецПериода = КонецДня(ТекущаяДата());

// Перебираем все виды документов

Для Каждого ВидДок Из Метаданные.Документы Цикл

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Ссылка КАК Ссылка

|ИЗ

| Документ." + ВидДок.Имя + " КАК Документ

|ГДЕ

| Документ.Номер ПОДОБНО '0%'

| И Документ.Дата МЕЖДУ &НачалоПериода И &КонецПериода";

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);

Запрос.УстановитьПараметр("КонецПериода", КонецПериода);

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

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();

ТекущийНомер = ДокОбъект.Номер;

// Удаляем ведущие нули

НовыйНомер = СтроковоеЧисло(ТекущийНомер);

Если НовыйНомер <> ТекущийНомер Тогда

ДокОбъект.Номер = НовыйНомер;

ДокОбъект.Записать();

Сообщить("Изменён номер документа: " + ДокОбъект.ВидовойПризнак() + " " + ДокОбъект.Номер);

КонецЕсли;

КонецЦикла;

КонецЦикла;

КонецПроцедуры

// Функция для удаления ведущих нулей из строки

Функция СтроковоеЧисло(Значение)

Если ТипЗнч(Значение) = Тип("Строка") Тогда

Возврат Число(Значение);

Иначе

Возврат Значение;

КонецЕсли;

КонецФункции

Как запустить код:

  1. Откройте конфигуратор 1С (Файл → Конфигуратор).
  2. Перейдите в Отладка → Открыть модуль и выберите любой глобальный модуль (например, УправляемоеПриложение).
  3. Вставьте код в конец модуля.
  4. Запустите процедуру через Отладка → Начать отладку или вызовите её из командной строки 1С.

Что делает этот код:

  • 🔍 Ищет все документы с номерами, начинающимися на ноль.
  • 📅 Фильтрует по дате (за последний год).
  • 🔢 Преобразует номер из строки в число, автоматически убирая ведущие нули.
  • 💾 Сохраняет изменения в базе.

Модификации для справочников:

Чтобы обработать справочники (например, Номенклатура или Контрагенты), замените в запросе Документ на Справочник и укажите нужный справочник:

Запрос.Текст =

"ВЫБРАТЬ

| Ссылка КАК Ссылка

|ИЗ

| Справочник.Номенклатура КАК Элемент

|ГДЕ

| Элемент.Код ПОДОБНО '0%'";

Ограничения программного метода:

  • 🔧 Требует знания встроенного языка 1С.
  • 🛡️ Нужны права на изменение конфигурации.
  • 🐢 Медленнее SQL для очень больших баз (более 100 000 записей).
⚠️ Внимание: Если в вашей базе используются расширения конфигурации, код может не сработать из-за ограничений на доступ к метаданным. В этом случае используйте Прямые запросы к SQL (см. следующий раздел).
💡

Перед запуском кода на рабочей базе протестируйте его на копии! Ошибки в коде могут привести к потере данных или нарушению ссылочной целостности.

6. Способ 5: Прямой SQL-запрос для опытных пользователей

Для крупных баз (десятки тысяч документов) или когда нужно обойти ограничения 1С, можно использовать прямые SQL-запросы. Этот метод самый быстрый, но и самый рискованный — ошибка в запросе может повредить данные.

Когда использовать SQL:

  • 📊 База содержит более 100 000 документов.
  • ⚡ Нужно максимальное быстродействие.
  • 🔧 Нет доступа к конфигуратору, но есть права на SQL-сервер.

Пример SQL-запроса для MS SQL Server:

-- Удаляем ведущие нули в номерах документов типа "ПоступлениеТоваров"

UPDATE [dbo].[Document123] -- Замените на реальное имя таблицы

SET [Number] = CAST([Number] AS INT)

WHERE [Number] LIKE '0%'

AND [DocKind] = 123; -- Идентификатор вида документа

-- Для справочника "Номенклатура"

UPDATE [dbo].[Catalog123]

SET [Code] = CAST([Code] AS INT)

WHERE [Code] LIKE '0%';

Как найти реальные имена таблиц:

  1. Откройте Администрирование → Поддержка и обслуживание → Диагностика → Анализ производительности.
  2. Включите отображение SQL-запросов.
  3. Выполните любой запрос к документу или справочнику в 1С.
  4. Посмотрите сгенерированный SQL — там будут реальные имена таблиц (например, Document123).

Особенности для разных СУБД:

СУБД Функция для удаления нулей Пример запроса
MS SQL Server CAST(... AS INT) UPDATE Table SET Field = CAST(Field AS INT) WHERE Field LIKE '0%'
PostgreSQL CAST(... AS INTEGER) или TRIM(LEADING '0' FROM Field) UPDATE table SET field = TRIM(LEADING '0' FROM field)
Oracle TO_NUMBER(Field) UPDATE table SET field = TO_NUMBER(field) WHERE REGEXP_LIKE(field, '^0')
IBM DB2 INTEGER(Field) UPDATE table SET field = INTEGER(field) WHERE field LIKE '0%'

Риски SQL-метода:

  • 💥 Необратимое повреждение данных при ошибке в запросе (например, если поле не является числом).
  • 🔗 Нарушение ссылочной целостности, если номер используется в других таблицах.
  • 📉 Возможны проблемы с производительностью при блокировке таблиц.

Рекомендации по безопасности:

  • 🔐 Выполняйте запрос под пользователем с минимальными правами (только UPDATE на нужные таблицы).
  • 📋 Предварительно сделайте бэкап таблиц, которые будете изменять.
  • 🧪 Протестируйте запрос на тестовой базе.
  • 🕒 Запускайте в нерабочее время, чтобы избежать блокировок.
⚠️ Внимание: В некоторых конфигурациях (например, в 1С:ERP) номера документов могут храниться не только в основной таблице, но и в таблицах движений (AccumRg, AccumRt). В этом случае потребуется обновлять все связанные записи!

7. Проверка результата и устранение последствий

После удаления лидирующих нулей необходимо проверить корректность данных и устранить возможные ошибки. Вот чек-лист для контроля:

1. Проверка целостности данных:

  • 🔍 Откройте несколько документов/элементов справочника и убедитесь, что номера отображаются без нулей.
  • 📊 Проверьте печатные формы — номера должны печататься корректно.
  • 🔗 Убедитесь, что ссылки на документы работают (например, в отчётах или связанных документах).

2. Проверка обмена данными:

  • 📤 Выгрузите тестовый документ в XML или Excel — номер должен быть без нулей.
  • 📥 Загрузите документ обратно — номер не должен дублироваться.
  • 🏦 Если обмениваетесь с банком, проверьте формат платежных поручений.

3. Контроль производительности:

  • ⚡ Замерьте время открытия документов/справочников — после массовых изменений может наблюдаться замедление.
  • 📉 Проверьте размер базы данных (через Администрирование → Обслуживание → Тестирование и исправление).

Типичные ошибки и их решения:

Ошибка Причина Решение
Номера не изменились Не те таблицы/поля в SQL-запросе Проверьте реальные имена таблиц через диагностику 1С
Ошибка "Неверный формат поля" Поле содержит нечисловые символы (например, "A00123") Используйте TRIM или REGEXP_REPLACE для очистки
Нарушились ссылки в отчётах Номера использовались как идентификаторы Восстановите ссылки через обработку или вручную
Замедлилась работа базы Не обновлены индексы после массовых изменений Выполните REINDEX или оптимизацию базы

Если что-то пошло не так:

  • 🔙 Восстановите базу из резервной копии.
  • 🛠️ Обратитесь к специалисту 1С с логами ошибок.
  • 📖 Изучите документацию по вашей конфигурации (раздел "Администрирование").
💡

После массовых изменений обязательно выполните Тестирование и исправление базы через Администрирование → Обслуживание. Это поможет избежать скрытых ошибок.

FAQ: Частые вопросы по удалению лидирующих нулей

❓ Можно ли убрать нули только в печатной форме, не изменяя данные в базе?

Да, для этого измените макет печатной формы. В свойствах поля с номером установите формат Число или используйте выражение Число(Номер). Это не затрагивает данные в базе, но требует прав на редактирование макетов.

❓ Почему после удаления нулей некоторые документы перестали открываться?

Это происходит, если номер документа использовался в качестве ссылки в других объектах (например, в движениях или регистрах). Восстановите ссылки через обработку или откат изменений. В будущем избегайте использования номеров как идентификаторов — для этого есть реквизит Ссылка.

❓ Как убрать нули в номерах при выгрузке в Excel?

Используйте обработку выгрузки с преобразованием номеров. Например, в модуле выгрузки добавьте строку:

НомерДляExcel = СтроковоеЧисло(Документ.Номер);

где СтроковоеЧисло — функция из раздела 5 этой статьи.

❓ Можно ли автоматически убирать нули при создании новых документов?

Да, для этого измените модуль документа. В процедуре ПередЗаписью() добавьте код:

Процедура ПередЗаписью(Отказ)

Если Номер ПОДОБНО "0%" Тогда

Номер = СтроковоеЧисло(Номер);

КонецЕсли;

КонецПроцедуры

Это будет убирать нули при каждом сохранении документа.

❓ Почему после SQL-запроса некоторые номера стали отрицательными?

Это происходит, если в поле были строки, начинающиеся с нулей и содержащие нечисловые символы (например, "00-123"). SQL пытается преобразовать их в число и получает ошибку. Используйте TRIM для очистки данных перед преобразованием:

UPDATE Table SET Field = CAST(REPLACE(Field, '-', '') AS INT)