Почему в номере счета-фактуры появляется лишняя буква и как исправить автонумерацию в 1С?

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

При ведении учета в программе «1С:Бухгалтерия» пользователи и администраторы нередко сталкиваются с ситуацией, когда при создании новых документов к стандартному префиксу организации внезапно прибавляется посторонний символ. Например, при установленном префиксе организации АМ новый документ Счет-фактура выданный получает номер АМП000009860. При этом при формировании печатной формы типовой алгоритм удаляет только зарегистрированный префикс АМ, а в печатный бланк выводится некорректный номер П000009860. Разберем механизм возникновения этой ошибки и пошаговый алгоритм ее устранения.

Как работает автонумерация и почему «залипает» лишний символ

Для понимания корня проблемы проанализируем, как платформа «1С:Предприятие» формирует очередной номер документа:

  1. Лексикографическое сравнение строк: когда в системе создается новый документ, платформа выполняет поиск максимального строкового значения номера среди существующих документов за текущий период (как правило, год) с учетом установленного префикса. В таблице символов любая буква (включая «П») старше цифры «0». Если в базе появился хотя бы один документ с номером АМП000000001, платформа при следующей автонумерации сравнивает номера посимвольно и считает запись с буквой старше любой записи вида АМ000099999. В результате инкремент применяется именно к ошибочной цепочке.
  2. Механизм очистки префикса при печати: типовая функция (например, ОбщегоНазначения.ПолучитьНомерНаПечать) удаляет из строки номера только те префиксы, которые явно зарегистрированы в программе (префикс организации, префикс информационной базы, служебные дефисы), а также ведущие нули. Нераспознанный буквенный символ «П» алгоритм считает значащей частью номера и выводит его в печатную форму.

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

Шаг 1. Поиск источника сбоя в базе данных

Прежде чем приступать к исправлению, выясним, когда и в каком документе впервые появился некорректный префикс:

  1. Откроем журнал документов Счета-фактуры выданные.
  2. Настроим сортировку по номеру или установим отбор по организации.
  3. Найдем самый ранний документ в текущем периоде, содержащий лишнюю букву в номере.
  4. Через меню «Все функции» (или «Функции для технического специалиста») откроем Журнал регистрации и проверим события изменения этого документа, чтобы точно определить пользователя или обработку, создавшую ошибочную запись.

Шаг 2. Групповое исправление номеров документов

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

Используем типовую обработку «Групповое изменение реквизитов» или выполним программную обработку выборки документов:


Выборка = Документы.СчетФактураВыданный.Выбрать(НачалоГода(ТекущаяДата()), КонецГода(ТекущаяДата()));
Пока Выборка.Следующий() Цикл
    ОбъектДокумент = Выборка.ПолучитьОбъект();
    Если Лев(ОбъектДокумент.Номер, 3) = "АМП" Тогда
        // Заменяем букву "П" на "0", сохраняя фиксированную длину номера
        ОбъектДокумент.Номер = "АМ0" + Сред(ОбъектДокумент.Номер, 4);
        ОбъектДокумент.Записать(РежимЗаписиДокумента.Запись);
    КонецЕсли;
КонецЦикла;

Шаг 3. Сброс кэша автонумерации платформы

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


// Сброс кэша нумератора для конкретного вида документов
ОбновитьНумерациюОбъектов(Метаданные.Документы.СчетФактураВыданный);

Если требуется обновить пространство номеров для всех объектов конфигурации сразу, метод вызывается без параметров: ОбновитьНумерациюОбъектов().

Проверка и профилактика

Разберем действия для проверки результата и предотвращения повторных сбоев:

  1. Создадим новый документ Счет-фактура выданный по проблемной организации и убедимся, что номер сформировался по шаблону АМ000000001 (или с очередным правильным числовым значением).
  2. Сформируем печатную форму документа и проверим, что префикс и лидирующие нули отсекаются корректно.
  3. Если документы создаются внешними обработками, проверим программный код: при формировании документов следует избегать прямой записи поля Номер, позволяя платформе отрабатывать стандартное событие ПриУстановкеНовогоНомера.
  4. Для исключения человеческого фактора рекомендуется отключить возможность ручного редактирования номеров документов в правах пользовательских ролей.
← На главную