Лидирующие нули в номерах документов, справочников или отчётах 1С — распространённая проблема, которая мешает корректной работе с данными. Они появляются при импорте из Excel, миграции баз или ошибках в алгоритмах нумерации. В некоторых случаях нули критичны: например, при обмене с банками, госорганами или контрагентами, где формат номера строго регламентирован.
В этой статье разберём 5 способов удаления ведущих нулей — от простых ручных методов до программных решений с примерами кода. Все инструкции актуальны для 1С:Предприятие 8.3 (включая последние релизы) и адаптированы под типовые конфигурации: Бухгалтерия 3.0, Управление торговлей 11, Зарплата и управление персоналом 3.1 и другие. Особое внимание уделим нюансам, которые часто упускают: влияние на историю изменений, совместимость с внешними системами и производительность при массовой обработке.
Если вы не программист, начните с первых трёх разделов — там описаны методы без кода. Разработчикам пригодятся последние два раздела с примерами на встроенном языке и SQL-запросами. В конце статьи — FAQ с ответами на типичные ошибки и чек-лист для проверки результата.
1. Почему появляются лидирующие нули и когда их нужно убирать
Лидирующие (ведущие) нули в 1С возникают по трём основным причинам:
🔹 Импорт данных из внешних источников. Например, при загрузке справочников из Excel или XML, где номера хранятся как текстовые строки с фиксированной длиной (например, "00012345" вместо "12345"). Типичный случай — миграция данных из устаревших систем типа 1С 7.7 или корпоративных ERP.
🔹 Ошибки в алгоритмах нумерации. В некоторых конфигурациях (например, в 1С:Документооборот) номера документов формируются с автоматическим дополнением нулями до заданной длины. Если этот параметр настроен неверно, нули остаются даже там, где не нужны.
🔹 Требования внешних систем. Банки, госорганы (например, ФНС или ПФР) и некоторые контрагенты могут требовать номера без ведущих нулей в электронных документах (например, в счетах-фактурах или платежных поручениях). В таких случаях нули приходится убирать принудительно.
Когда удаление нулей обязательно:
- 📄 При обмене данными с банками (например, в платежных поручениях формата
1.03) - 📊 В отчётах для госорганов (например, в декларациях или расчётах по страховым взносам)
- 🔄 При интеграции с CRM или другими системами, где номера используются как уникальные идентификаторы
- 📎 В печатных формах документов, где нули портят внешний вид (например, в договорах или актах)
Когда нули можно оставить:
- ⚙️ Если они не мешают бизнес-процессам (например, в внутренних справочниках)
- 📂 В архивных данных, где изменение номеров может нарушить целостность истории
- 🔗 Если внешние системы принимают номера как с нулями, так и без них
⚠️ Внимание: Перед массовым удалением нулей проверьте, не используются ли номера как ссылки в других документах или отчётах. Изменение номера может привести к разрыву связей!
2. Способ 1: Ручное редактирование через форму документа
Самый простой метод — исправить номер непосредственно в карточке документа или элемента справочника. Он подходит для единичных случаев, когда нулей мало и они не связаны с другими объектами.
Пошаговая инструкция:
- Откройте документ или элемент справочника с лидирующими нулями (например, через журнал документов или список справочника).
- Перейдите в режим редактирования (кнопка
Изменитьили двойной клик по строке). - Найдите поле с номером (обычно оно называется
НомерилиКод). - Удалите нули вручную или замените номер на корректный (например,
00123→123). - Сохраните изменения (кнопка
Записать и закрытьилиOK).
Ограничения метода:
- 🐢 Медленно при большом количестве документов (например, если нулей тысячи).
- 🔗 Может нарушить ссылки, если номер используется в других объектах (например, в движениях документов).
- 📅 Не подходит для исторических данных — изменение номера документа может исказить отчёты.
Пример:
Допустим, у вас есть документ Поступление товаров №000456. После редактирования он станет Поступление товаров №456. Если этот номер ранее использовался в отчётах или связанных документах (например, в Реализации товаров), ссылки могут "сломаться".
⚠️ Внимание: В некоторых конфигурациях (например, в 1С:ERP) номера документов блокируются после проведения. Чтобы изменить такой номер, сначала нужно сделать документ непроводённым!
Перед массовым ручным редактированием создайте резервную копию базы через Администрирование → Обслуживание → Резервное копирование. Это поможет откатить изменения, если что-то пойдёт не так.
3. Способ 2: Настройка формата отображения в печатных формах
Если лидирующие нули мешают только в печатных формах (например, в счетах или актах), их можно убрать без изменения самих данных. Для этого используется настройка формата поля в макете печатной формы.
Как это работает:
В 1С печатные формы создаются на основе макетов, где для каждого поля можно задать формат отображения. Если номер хранится как строка (например, "001234"), его можно преобразовать в число прямо в макете.
Инструкция для типовой конфигурации:
- Откройте печатную форму документа (например, через
Печать → Настроить форму). - Перейдите в режим редактирования макета (кнопка
Изменить формуилиКонструктор макета). - Найдите поле с номером (обычно оно привязано к реквизиту
НомерилиNumber). - В свойствах поля измените формат на
Число(если номер — числовой) или используйте выражение вида:Число(Значение) - Сохраните макет и проверьте результат.
Пример для справочника Номенклатура:
Если в печатной форме справочника код товара отображается как 000123, а нужно 123, в макете замените поле Код на выражение:
Формат(Код, "ЧДЦ=0; ЧГ=0")
Эта формула убирает все ведущие нули и отображает код как целое число.
Когда этот способ не подходит:
Откройте документ в режиме "Все действия" → "Изменить форму". Найдите поле с номером и посмотрите его тип в свойствах. Если тип — "Строка", значит, нули хранятся явно. Если "Число", то проблема в отображении, а не в данных. Для массового удаления нулей в сотнях или тысячах документов ручное редактирование неэффективно. В этом случае поможет внешняя обработка, которую можно скачать из каталога Инфостарт или написать самостоятельно.
Где взять готовую обработку:
Как использовать обработку:
Популярные обработки:
Преимущества метода:
Недостатки:
Проверьте обработку на тестовой базе|Создайте резервную копию рабочей базы|Уточните, какие типы документов нужно обработать|Согласуйте изменения с бухгалтерией (если номера используются в отчётах)|Запустите обработку в нерабочее время--> Если вы разработчик или имеете доступ к конфигуратору, самый гибкий способ — написать собственный код для удаления нулей. Этот метод подходит для нетиповых конфигураций или когда нужна тонкая настройка (например, обработка только определённых видов документов).
Пример кода для удаления нулей в номерах документов:
// Отбор документов за последний год НачалоПериода = НачалоГода(ТекущаяДата()); КонецПериода = КонецДня(ТекущаяДата()); // Перебираем все виды документов Для Каждого ВидДок Из Метаданные.Документы Цикл Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Ссылка КАК Ссылка |ИЗ | Документ." + ВидДок.Имя + " КАК Документ |ГДЕ | Документ.Номер ПОДОБНО '0%' | И Документ.Дата МЕЖДУ &НачалоПериода И &КонецПериода"; Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", КонецПериода); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ДокОбъект = Выборка.Ссылка.ПолучитьОбъект(); ТекущийНомер = ДокОбъект.Номер; // Удаляем ведущие нули НовыйНомер = СтроковоеЧисло(ТекущийНомер); Если НовыйНомер <> ТекущийНомер Тогда ДокОбъект.Номер = НовыйНомер; ДокОбъект.Записать(); Сообщить("Изменён номер документа: " + ДокОбъект.ВидовойПризнак() + " " + ДокОбъект.Номер); КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры // Функция для удаления ведущих нулей из строки Функция СтроковоеЧисло(Значение) Если ТипЗнч(Значение) = Тип("Строка") Тогда Возврат Число(Значение); Иначе Возврат Значение; КонецЕсли; КонецФункции
Как проверить, хранится ли номер как строка или число?
4. Способ 3: Групповая обработка через внешнюю обработку
— репозитории с открытыми обработками для 1С.
.epf или .erf).Файл → Открыть и выберите скачанный файл.
Номер или Код).Выполнить и дождитесь завершения.
Название
Автор
Поддерживаемые конфигурации
Особенности
Удаление ведущих нулей в номерах
Алексей Лукашёв (Infostart)
Бухгалтерия 3.0, УТ 11, ERP 2
Работает с документами и справочниками, сохраняет историю изменений
Массовое изменение номеров
Компания "Альт-Софт"
Любые типовые конфигурации
Поддерживает регулярные выражения для сложных замен
Очистка номеров от нулей
Иван Петров (GitHub)
1С 8.3 (все редакции)
Бесплатная, открытый код, требует доработки под специфику базы
⚠️ Внимание: Перед запуском обработки проверьте её на копии рабочей базы! Некоторые обработки могут изменять не только номера, но и связанные данные (например, движения документов).
5. Способ 4: Программное решение на встроенном языке 1С
Процедура УбратьВедущиеНулиИзНомеров()
Как запустить код:
- Откройте конфигуратор 1С (
Файл → Конфигуратор). - Перейдите в
Отладка → Открыть модульи выберите любой глобальный модуль (например,УправляемоеПриложение). - Вставьте код в конец модуля.
- Запустите процедуру через
Отладка → Начать отладкуили вызовите её из командной строки 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%';
Как найти реальные имена таблиц:
- Откройте
Администрирование → Поддержка и обслуживание → Диагностика → Анализ производительности. - Включите отображение SQL-запросов.
- Выполните любой запрос к документу или справочнику в 1С.
- Посмотрите сгенерированный 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)