Как убрать лидирующие нули в номерах счетов-фактур в Книге продаж 1С:Бухгалтерия 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Налоговый учет
← На главную

В практике работы с конфигурацией 1С:Бухгалтерия предприятия 3.0 часто возникает ситуация, когда стандартная нумерация документов выглядит избыточно. Например, вместо лаконичного номера АС93 в Книге продаж и печатных формах отображается АС000093. Это происходит из-за механизмов платформы 1С, которые автоматически дополняют номер нулями до определенной длины для обеспечения корректной сортировки и уникальности. Разберем подробно, как решить эту задачу, сохранив префикс организации, и почему простого изменения номера в карточке документа часто бывает недостаточно.

Выясняем причину: почему номера в Книге продаж не меняются сразу?

Проанализируем ситуацию, с которой сталкиваются многие разработчики: после программного изменения номера в самом документе Счет-фактура выданный, отчет Книга продаж продолжает упорно выводить старый номер с нулями. Выясним причину этого поведения. Дело в том, что отчет строится не напрямую по реквизитам документов, а на основании данных регистров накопления (в частности, регистра НДС Продажи).

При проведении счета-фактуры или регламентного документа Формирование записей книги продаж, данные о номере «замораживаются» в регистре. Поэтому, если мы просто программно перезапишем поле Номер у объекта, записи в регистрах останутся прежними. Чтобы изменения отразились в отчете, документы необходимо перепроводить. Рассмотрим основные способы решения задачи далее.

Способ 1: Программное удаление нулей через алгоритм

Если нам нужно разово исправить существующие документы, мы можем воспользоваться написанием произвольного алгоритма. Рассмотрим пример, когда мы точно знаем длину префикса (например, 2 символа АС). Посмотрим на вариант преобразования строки:


Префикс = Лев(Объект.Номер, 2); 
ТелоНомера = Прав(Объект.Номер, СтрДлина(Объект.Номер) - 2); 
// Удаляем нули, преобразуя в число и обратно в строку
ЧисловойНомер = Число(ТелоНомера);
Объект.Номер = Префикс + Формат(ЧисловойНомер, "ЧГ=0");
Объект.Записать(РежимЗаписиДокумента.Проведение);

Этот код эффективно убирает нули, но он чувствителен к структуре номера. Если префикс имеет переменную длину, лучше использовать более универсальный подход. Проанализируем цикл, который корректно находит первый значащий символ после префикса:


ДлинаПрефикса = 2; // Например, 'АС'
Поз = ДлинаПрефикса + 1;
Пока Сред(Номер, Поз, 1) = "0" Цикл
    Поз = Поз + 1;
КонецЦикла;
НовыйНомер = Лев(Номер, ДлинаПрефикса) + Сред(Номер, Поз);

Важный момент: при использовании метода Число() нужно быть уверенным, что в оставшейся части номера нет букв (например, АС000А93), иначе система выдаст ошибку преобразования типа. Если такие номера возможны, используйте строковые функции обработки, как показано в примере с циклом.

Способ 2: Использование механизмов БСП (Библиотеки стандартных подсистем)

Рассмотрим более современный и «чистый» способ, который подходит для версии 8.3. В составе типовых конфигураций есть общие модули, предназначенные специально для работы с префиксами. Вместо того чтобы изобретать «велосипед», мы можем вызвать стандартную функцию, которая учитывает префиксы организации и информационных баз.

Для удаления нулей можно использовать функцию ПрефиксацияОбъектовКлиентСервер.УдалитьЛидирующиеНулиИзНомераОбъекта(Номер). Однако помните, что она может удалить и сам префикс, если он не отделен дефисом. Для получения номера именно «как на печать» (без лишних нулей и технических префиксов) лучше использовать:

ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Номер, Истина, Истина)

Этот метод проанализирует структуру номера и вернет максимально лаконичный вариант, принятый в учете.

Способ 3: Групповое изменение реквизитов

Если вы не хотите писать код в конфигураторе, воспользуемся стандартной обработкой «Групповое изменение реквизитов» (раздел Администрирование — Обслуживание — Корректировка данных). Выполним следующие шаги:

  1. Выберем тип объекта: Счет-фактура выданный.
  2. Настроим отбор по периоду или конкретным документам, которые требуют исправления.
  3. В поле «Номер» нажмем на гиперссылку «Дополнительные параметры» и выберем режим выполнения произвольного алгоритма.
  4. Напишем код, аналогичный приведенному выше, используя переменную Объект.Номер.
  5. Обязательно убедимся, что установлена галочка «Выполнять в транзакции» и, если это доступно, «Проводить при записи».

После выполнения обработки данные в регистре НДС Продажи обновятся, и Книга продаж будет формироваться корректно.

Способ 4: Использование расширения конфигурации (рекомендуемый)

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

Проанализируем ситуацию: отчет «Книга продаж» собирает данные в таблицу значений перед выводом на экран. С помощью расширения мы можем подключиться к процедуре после заполнения этой таблицы и «пробежаться» циклом по колонке с номерами счетов-фактур, применяя к ним функцию удаления нулей. Таким образом:

Риски и последствия изменения нумерации

Разберем, к чему может привести массовое удаление нулей в номерах документов. Система 1С использует строковую сортировку. Если у вас появится номер АС9 и АС10, то при наличии лидирующих нулей они сортируются правильно. Если вы уберете нули вручную и сделаете номера разной длины, автонумерация может «сломаться». Следующий созданный документ может получить неожиданный номер, так как платформа ищет максимальную строку.

Посмотрим на рекомендации по минимизации рисков:

  1. Перед любыми массовыми изменениями номеров всегда делайте резервную копию базы.
  2. Если вы сократили номер до АС93, воспользуйтесь обработкой «Установка номера следующего документа», чтобы задать системе новый правильный шаблон для будущих документов.
  3. Помните о законодательстве: налоговая не штрафует за наличие нулей в номерах, так как это не мешает идентификации сделки. Главное, чтобы номера у вас и у вашего контрагента в декларациях совпадали.

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

← На главную