При активном документообороте в программе «1С:Бухгалтерия 8» пользователи нередко сталкиваются с ситуацией, когда автоматическая нумерация счетов-фактур или реализаций внезапно прекращает увеличивать разрядность. Например, при достижении номера 09999 система упорно пытается присвоить следующему документу тот же самый номер 09999, вызывая ошибку нарушения уникальности, либо не дает перейти на диапазон 10000. Разберем по шагам, почему возникает эта проблема, как устроена механика платформенного нумератора и как безопасно восстановить последовательность номеров без риска для налоговой отчетности.
Чтобы понять причину сбоя, проанализируем логику, по которой платформа 1С формирует очередной номер документа:
МК00-0000001), то под числовую часть изначально выделяется строго определенное количество разрядов.МК00-09997 вместо МК00-0009997), платформа фиксирует новый шаблон, где длина числовой части сокращена до 5 символов. Когда нумерация доходит до максимального числа для данной разрядности (9999), следующий номер 10000 физически не помещается в выделенный короткий числовой блок без изменения строкового префикса. Платформа не может самостоятельно сдвинуть префиксную часть влево и «застревает» на максимальном числе диапазона.Выясним причину сбоя на конкретных данных. Для этого необходимо найти точку, начиная с которой длина номеров документов уменьшилась.
С на английскую C) или вводят букву О вместо цифры 0, что создает отдельную ветку нумерации.Частый вопрос бухгалтеров при исправлении нумерации: не изменятся ли номера документов в уже сданных декларациях по НДС и книгах продаж? Разберем этот важный момент.
В типовых конфигурациях 1С печатные формы и выгрузка книги продаж в ФНС формируются с помощью служебных механизмов (например, функции ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать). Этот алгоритм автоматически отсекает префиксы организации и все лидирующие нули. Следовательно, документы с номерами МК00-09998 и МК00-0009998 для налоговой инспекции и печатных форм абсолютно идентичны — их номер на печать будет равен 9998.
Поэтому правильное решение — не перенумеровывать документы заново со смещением значений, а дополнить недостающее количество нулей перед значащей частью каждого ошибочного номера.
Пример восстановления номеров:
МК00-09997 преобразуем в МК00-0009997;МК00-09998 преобразуем в МК00-0009998;МК00-09999 преобразуем в МК00-0009999.Если документов с нарушенной разрядностью много, исправление выполняется с помощью внешней обработки или через инструмент Групповое изменение реквизитов (с включенным отображением служебных реквизитов). Код алгоритма исправления номеров для внешней обработки выглядит следующим образом:
Выборка = Документы.СчетФактураВыданный.Выбрать(НачалоГода(ТекущаяДата()), КонецДня(ТекущаяДата()));
Пока Выборка.Следующий() Цикл
ОбъектДок = Выборка.ПолучитьОбъект();
НомерСтр = СокрЛП(ОбъектДок.Номер);
// Если длина номера меньше стандартной длины 11 символов
Если СтрДлина(НомерСтр) = 9 Тогда
// Добавляем недостающие два нуля после дефиса (позиция 5)
Префикс = Лев(НомерСтр, 5);
ЧисловаяЧасть = Сред(НомерСтр, 6);
ОбъектДок.Номер = Префикс + "00" + ЧисловаяЧасть;
Попытка
ОбъектДок.Записать(РежимЗаписиДокумента.Запись);
Исключение
Сообщить("Ошибка при записи документа: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
После того как все номера документов в текущем году приведены к единой разрядности, платформа 1С может продолжать помнить старый шаблон из-за серверного кэширования. Чтобы принудительно обновить внутренний счетчик нумератора, выполним процедуру ОбновитьНумерациюОбъектов.
Для этого откроем внешнюю обработку или консоль кода и выполним команду:
ОбновитьНумерациюОбъектов(Метаданные.Документы.СчетФактураВыданный);
В клиент-серверном варианте работы (SQL), если после вызова процедуры нумератор по-прежнему пытается назначить старый номер, рекомендуется перезапустить рабочие процессы кластера серверов 1С (rphost) или перезапустить службу сервера 1С:Предприятия.
Чтобы избежать повторения подобной ситуации, применим организационные и программные меры защиты:
ПередЗаписью документа, выдавая предупреждение при попытке сохранить нестандартный номер.