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

Важно понимать, что подход зависит от контекста: в некоторых случаях нули являются частью бизнес-логики (например, в штрихкодах или стандартных кодах номенклатуры), и их удаление может нарушить работу системы. Поэтому перед правками всегда проверяйте, не используются ли эти нули в справочниках, регистрах или внешних интеграциях. Если вы работаете с 1С:Бухгалтерия 3.0, 1С:УТ 11 или 1С:ERP, учтите, что в новых версиях платформы (8.3.20+) появились дополнительные инструменты для обработки строк.

1. Удаление лидирующих нулей через формат ячейки (для отчётов и печатных форм)

Самый простой способ скрыть ведущие нули — изменить формат отображения прямо в отчёте или печатной форме. Это не удаляет нули из базы данных, но делает их невидимыми для пользователя. Метод подходит для 1С:Комплексная автоматизация, 1С:ЗУП и других типовых конфигураций, где важно сохранить исходные данные, но при этом вывести их в удобном виде.

Чтобы применить формат:

  • 📊 Откройте нужный отчёт или печатную форму в режиме 1С:Предприятие.
  • 🖱️ Кликните правой кнопкой по ячейке с номером и выберите Формат → Число.
  • 🔢 В поле Формат укажите ЧГ0 (для целых чисел) или ЧДЦ=0;ЧГ=0 (для чисел с десятичными знаками).
  • 💾 Сохраните изменения и обновите отчёт.

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

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

2. Использование функции СОКРЛП() для строковых полей

Если лидирующие нули хранятся в строковых полях (например, в реквизитах справочников или документов), самый надёжный способ их убрать — применить встроенную функцию СОКРЛП(). Она удаляет все пробелы и непечатаемые символы, включая ведущие нули, если они не являются частью числа.

Примеры использования:

  • 📝 Для справочника Номенклатура:
    Артикул = СОКРЛП(Артикул);
  • 📄 В модуле документа Поступление товаров:
    НомерДокумента = СОКРЛП(НомерДокумента);
  • 🔍 В запросе:
    ВЫБРАТЬ
    

    СОКРЛП(Номенклатура.Артикул) КАК АртикулБезНулей

    ИЗ

    Документ.ПоступлениеТоваров КАК ПоступлениеТоваров

Функция СОКРЛП() работает во всех версиях платформы 1С:Предприятие 8.3 и не требует дополнительных прав доступа. Однако она удаляет все пробелы, поэтому если в вашем коде есть значимые разделители (например, в составных артикулах типа "ABC 123"), используйте более точный метод — регулярные выражения или ЛЕВ() + НАЙТИ().

💡

Если после применения СОКРЛП() в отчёте появляются ошибки сортировки, проверьте, не используются ли ведущие нули для выравнивания чисел по ширине. В этом случае лучше применить формат ячейки (способ 1).

3. Программное удаление нулей через обработку данных

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

Алгоритм действий:

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

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

    Если ЛЕВ(Объект.Артикул, 1) = "0" Тогда

    Объект.Артикул = СОКРЛП(Объект.Артикул);

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

    КонецЕсли;

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

  4. Запустите обработку в режиме 1С:Предприятие и выберите нужные элементы.

Для крупных баз данных (10 000+ записей) рекомендуется выполнять обработку в фоновом задании, чтобы не блокировать работу пользователей. Также не забывайте делать резервную копию перед массовыми изменениями!

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

4. Регулярные выражения для сложных случаев

Если ведущие нули являются частью составного кода (например, "001-ABC-0045"), и вам нужно удалить только нули в начале строки, используйте регулярные выражения. В 1С:Предприятие 8.3.10+ для этого есть объект РегулярноеВыражение.

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

Текст = "00012345";

РегВыр = Новый РегулярноеВыражение("^0+");

ТекстБезНулей = РегВыр.Заменить(Текст, ""); // Результат: "12345"

Разберём параметры регулярного выражения:

  • 🔹 ^ — начало строки.
  • 🔹 0+ — один или более нулей.
  • 🔹 Заменить(Текст, "") — удаляет найденные символы.

Этот метод гибкий: вы можете модифицировать шаблон, чтобы удалять нули только до первого ненулевого символа или сохранять определённое количество знаков. Например, шаблон "^0{3}" удалит ровно 3 нуля в начале.

⚠️ Внимание: Регулярные выражения доступны только в 1С:Предприятие 8.3.10 и выше. Для старых версий используйте комбинацию функций ЛЕВ(), ПРАВ() и НАЙТИ().

5. Настройка обмена данными (для импорта из Excel и других систем)

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

Способы предотвращения нулей при импорте:

Источник данных Решение Пример кода/настройки
Excel (через ЗагрузкаДанныхИзТабличногоДокумента) Преобразовать столбец в текстовый формат перед загрузкой Таблица.Колонка("Артикул").ТипЗначения = Тип("Строка")
XML-файлы (обмен с сайтом или 1С:EDI) Добавить обработчик для удаления нулей в модуле обмена Если Значение = "00123" Тогда Значение = "123"
Текстовые файлы (CSV, TXT) Использовать СОКРЛП() при чтении файла Артикул = СОКРЛП(СтрокаРазделить(Строка, ";")[1])

Если вы используете 1С:Конвертация данных или EnterpriseData, добавьте правило преобразования в шаблоне обмена. Например, для поля Артикул в справочнике Номенклатура:

Если Источник.Артикул = "00123" Тогда

Приемник.Артикул = "123";

КонецЕсли;

Excel|XML (обмен с сайтом)|Текстовые файлы (CSV)|База данных (SQL)|Другой-->

6. Типичные ошибки и как их избежать

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

  • 🔴 Ошибка сортировки после удаления нулей:

    Если нули были частью логики сортировки (например, "001", "010", "100"), их удаление нарушит порядок. Решение: используйте функцию Формат() с ведущими нулями только для отображения, но храните исходные значения.

  • 🔴 Потеря данных при массовой обработке:

    При программном удалении нулей из справочников (способ 3) может пропасть часть информации, если нули были значимыми. Всегда делайте резервную копию и тестируйте на копии базы.

  • 🔴 Ошибки в интеграциях:

    Если ваша обменивается данными с 1С:УТМ, Диадок или СБИС, удаление нулей может нарушить сопоставление документов. Проверьте требования контрагентов перед правками.

Критическая ошибка: В конфигурациях с штрихкодами (например, 1С:Розница) удаление ведущих нулей из артикулов может сделать штрихкоды нечитаемыми. Всегда сверяйтесь с форматом EAN-13 или Code 128, где нули являются обязательной частью.

Что делать, если после удаления нулей перестали работать отчёты?

Если отчёты используют сравнение строк с ведущими нулями (например, ЕСЛИ Артикул = "00123" ТО...), после удаления нулей условия перестанут срабатывать. Решение:

1. Найдите все такие условия в модулях отчётов (через поиск по коду).

2. Замените жёсткие сравнения на СОКРЛП(Артикул) = "123".

3. Перепроверьте логику работы отчётов на тестовых данных.

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

Можно ли удалить нули только для конкретного отчёта, не изменяя данные в базе?

Да, используйте вычисляемое поле в отчёте. В конструкторе запроса добавьте колонку:

СОКРЛП(Номенклатура.Артикул) КАК АртикулБезНулей

Или примените формат ячейки (способ 1). Данные в базе останутся без изменений.

Почему после применения СОКРЛП() в запросе нули остаются?

Скорее всего, поле имеет числовой тип, а не строковый. Преобразуйте его явно:

СОКРЛП(СТРОКА(Номенклатура.Код))

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

Как удалить нули из номера документа при печати?

В печатной форме найдите поле с номером документа и измените его выражение на:

=СОКРЛП(Номер)

Если номер хранится как число, используйте:

=Формат(Номер, "ЧГ=0")
Можно ли автоматически удалять нули при вводе в форму?

Да, добавьте обработчик события ПриИзменении для поля ввода:

Процедура АртикулПриИзменении(Элемент)

Элемент.Значение = СОКРЛП(Элемент.Значение);

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

Но учтите, что это может раздражать пользователей, если нули вводятся осознанно.

Как проверить, есть ли в базе записи с лидирующими нулями?

Выполните запрос:

ВЫБРАТЬ

Номенклатура.Ссылка КАК Ссылка,

Номенклатура.Артикул КАК Артикул

ИЗ

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

ГДЕ

ЛЕВ(Номенклатура.Артикул, 1) = "0"

Для ускорения работы на большой базе добавьте индекс по полю Артикул.

💡

Перед удалением лидирующих нулей всегда проверяйте, не используются ли они в бизнес-процессах: штрихкодах, стандартных отчётах или обменах с контрагентами. Лучше скрыть нули для отображения (способ 1 или 2), чем удалять их из данных без необходимости.