При ведении учета в программе «1С:Бухгалтерия» пользователи и администраторы нередко сталкиваются с ситуацией, когда при создании новых документов к стандартному префиксу организации внезапно прибавляется посторонний символ. Например, при установленном префиксе организации АМ новый документ Счет-фактура выданный получает номер АМП000009860. При этом при формировании печатной формы типовой алгоритм удаляет только зарегистрированный префикс АМ, а в печатный бланк выводится некорректный номер П000009860. Разберем механизм возникновения этой ошибки и пошаговый алгоритм ее устранения.
Для понимания корня проблемы проанализируем, как платформа «1С:Предприятие» формирует очередной номер документа:
АМП000000001, платформа при следующей автонумерации сравнивает номера посимвольно и считает запись с буквой старше любой записи вида АМ000099999. В результате инкремент применяется именно к ошибочной цепочке.ОбщегоНазначения.ПолучитьНомерНаПечать) удаляет из строки номера только те префиксы, которые явно зарегистрированы в программе (префикс организации, префикс информационной базы, служебные дефисы), а также ведущие нули. Нераспознанный буквенный символ «П» алгоритм считает значащей частью номера и выводит его в печатную форму.Чаще всего первопричиной сбоя становятся не ручные ошибки бухгалтера, а некорректно написанные внешние обработки загрузки данных, нетиповые правила обмена или разовые сбои при программном создании документов, когда реквизиту Номер напрямую присваивается строка с нарушением формата.
Прежде чем приступать к исправлению, выясним, когда и в каком документе впервые появился некорректный префикс:
Счета-фактуры выданные.Журнал регистрации и проверим события изменения этого документа, чтобы точно определить пользователя или обработку, создавшую ошибочную запись.Для восстановления правильной автонумерации необходимо убрать лишнюю букву из всех ошибочных документов текущего года. При этом критически важно сохранить общую разрядность (длину) номера, заменив постороннюю букву на числовой ноль. Если просто удалить букву, длина строки уменьшится, что приведет к новым сбоям сортировки платформы.
Используем типовую обработку «Групповое изменение реквизитов» или выполним программную обработку выборки документов:
Выборка = Документы.СчетФактураВыданный.Выбрать(НачалоГода(ТекущаяДата()), КонецГода(ТекущаяДата()));
Пока Выборка.Следующий() Цикл
ОбъектДокумент = Выборка.ПолучитьОбъект();
Если Лев(ОбъектДокумент.Номер, 3) = "АМП" Тогда
// Заменяем букву "П" на "0", сохраняя фиксированную длину номера
ОбъектДокумент.Номер = "АМ0" + Сред(ОбъектДокумент.Номер, 4);
ОбъектДокумент.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЦикла;
После корректировки номеров в базе платформа может продолжать подставлять ошибочный префикс из внутреннего кэша автонумерации текущего сеанса или сервера 1С. Чтобы принудительно обновить счетчик без перезапуска службы сервера, вызовем встроенный метод платформы:
// Сброс кэша нумератора для конкретного вида документов
ОбновитьНумерациюОбъектов(Метаданные.Документы.СчетФактураВыданный);
Если требуется обновить пространство номеров для всех объектов конфигурации сразу, метод вызывается без параметров: ОбновитьНумерациюОбъектов().
Разберем действия для проверки результата и предотвращения повторных сбоев:
Счет-фактура выданный по проблемной организации и убедимся, что номер сформировался по шаблону АМ000000001 (или с очередным правильным числовым значением).Номер, позволяя платформе отрабатывать стандартное событие ПриУстановкеНовогоНомера.