В процессе работы с программными продуктами 1С, особенно в конфигурации "Бухгалтерия предприятия 3.0", пользователи часто сталкиваются с ситуацией, когда автоматическая нумерация документов (в частности, счетов-фактур) "замирает" на определенной отметке, например, 09999. Система выдает ошибку о не уникальности номера, и создание новых документов становится возможным только при ручном вводе следующего значения. Однако при следующем создании документа автонумератор снова предлагает ошибочное значение. Рассмотрим подробно, почему это происходит и как восстановить корректную работу системы.
Для начала разберем внутренние механизмы платформы 1С. В системе номер документа является строковым типом данных. Это означает, что при определении следующего номера платформа выполняет строковую сортировку и инкрементирует числовую часть строки. Основные причины сбоя заключаются в следующем:
0000-000001 ввел 0000-1), система перестраивает логику поиска максимального значения под новый формат.Проанализируем ситуацию по шагам и выясним, как вернуть автоматический порядок.
Первым делом проанализируем текущие номера в списке счетов-фактур. Если мы видим, что документы имеют разную длину (например, часть номеров 0000-009999, а часть — 0000-9999), нам необходимо привести их к единому стандарту, установленному в конфигурации (обычно это 12 или 11 символов).
Рассмотрим, как программно исправить длину номера. Для этого можно воспользоваться групповым изменением реквизитов или написать простую обработку. Важно помнить: для изменения номера нужно напрямую присваивать значение свойству Номер, а не использовать метод УстановитьНовыйНомер(), так как последний попытается снова применить ошибочный алгоритм.
Посмотрим на пример кода для исправления номеров:
Выборка = Документы.СчетФактураВыданный.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
СтарыйНомер = Объект.Номер;
// Допустим, мы хотим, чтобы номер был строго 12 символов
// Если номер вида "0000-9999", превращаем его в "0000-00009999"
Если СтрДлина(СтарыйНомер) < 12 Тогда
ЧастиНомера = СтрРазделить(СтарыйНомер, "-");
Если ЧастиНомера.Количество() = 2 Тогда
Префикс = ЧастиНомера[0];
ЧислоЧасть = ЧастиНомера[1];
НужноеКоличествоНулей = 12 - СтрДлина(Префикс) - 1; // 1 - это дефис
НовыйНомер = Префикс + "-" + Прав("0000000000" + ЧислоЧасть, НужноеКоличествоНулей);
Объект.Номер = НовыйНомер;
Объект.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Важно: Перед выполнением таких действий в рабочей базе обязательно создайте резервную копию!
После того как все номера в базе приведены к единому формату и лишние символы удалены, необходимо сообщить платформе, что реестр номеров изменился. Для этого используется встроенная процедура ОбновитьНумерациюОбъектов. Она заставляет систему заново просканировать таблицу документов и найти реальный максимум.
Выполнить её можно через консоль кода или внешнюю обработку:
МетаданныеДокумента = Метаданные.Документы.СчетФактураВыданный;
ОбновитьНумерациюОбъектов(МетаданныеДокумента);
Если в вашей конфигурации счета-фактуры разных видов (выданные, на аванс) используют общий Нумератор, эту процедуру следует выполнить и для самого нумератора, если это позволяет синтаксис вашей версии платформы.
Иногда даже после исправления всех номеров и вызова обновления, система продолжает "предлагать" старый ошибочный номер. Это происходит из-за кэширования номеров на стороне сервера 1С:Предприятие (актуально для клиент-серверных версий). Чтобы принудительно сбросить этот кэш, можно применить проверенный метод со сменой префикса.
Выполним следующие действия:
0000-00010000).После записи этого документа "руками", следующий за ним должен создаться автоматически с номером 0000-00010001.
Часто программисты забывают, что платформа учитывает номера документов, помеченных на удаление. Если в базе лежит удаленный счет-фактура с номером 09999 или некорректным строковым значением, он будет блокировать автонумерацию так же эффективно, как и проведенный документ. Рассмотрим алгоритм действий:
Не стоит забывать и о типовых средствах конфигурации "Бухгалтерия предприятия". В разделе "Отчеты" — "Экспресс-проверка" существует пункт "Соблюдение хронологии и сквозной нумерации счетов-фактур". Хотя этот инструмент чаще используется бухгалтерами для поиска пропусков, он также помогает выявить документы, которые выбиваются из общего шаблона. Однако помните, что автоматическое исправление в экспресс-проверке может перенумеровать документы за весь год, что не всегда приемлемо для налогового учета.
Подводя итог, разберем краткий чек-лист для восстановления нумерации:
Объект.Номер = "...".ОбновитьНумерациюОбъектов().Соблюдение этих правил позволит вам быстро вернуть систему в рабочее состояние без необходимости глобальной перенумерации всех документов в информационной базе.