Часто в работе с 1С пользователи сталкиваются с ситуацией, когда при наступлении нового календарного года нумерация документов не сбрасывается к единице, а продолжает идти «внахлест» с предыдущими периодами. Давайте разберемся, почему это происходит и какие шаги необходимо предпринять для решения этой задачи.
Механизм автонумерации в 1С при установленной периодичности в пределах года ориентируется на максимальный номер, уже существующий в базе данных для текущего типа объекта. Платформа 1С не умеет «угадывать» намерения пользователя: если в базе уже есть документ с номером «00000010» за 2022 год, а вы создаете новый документ в 2024 году, система видит, что свободный номер для следующего документа должен быть «00000011».
Главная причина сбоя заключается в том, что автонумерация не пересчитывается автоматически при изменении даты существующего документа. Если пользователь вручную поменял дату документа с 2022 на 2024 год, номер остался прежним. Система теперь считает, что этот «старый» номер занят в 2024 году, и все новые документы начинают отсчет именно от него.
Первым делом нам необходима обработка номеров объектов, чтобы найти «нарушителя» — документ, который «застрял» из прошлого года и мешает правильной последовательности. Для этого выполним следующие действия:
Поскольку сама по себе платформа 1С не проверяет факт смены года при записи документа, нам необходимо реализовать эту проверку самостоятельно. В типовых конфигурациях (например, в ЗУП или УТ) это реализуется через обработчик события ПередЗаписью в Модуле объекта.
Рассмотрим пример того, как можно принудительно очистить номер, если год в дате документа изменился:
Процедура ПередЗаписью(Отказ, Замещение)
// Проверяем, изменилась ли дата документа относительно уже записанной в базе
Если ЭтоНовый() = Ложь Тогда
ТекДата = Ссылка.Дата;
Если Год(Дата) <> Год(ТекДата) Тогда
// Если год изменился, очищаем номер, чтобы 1С присвоила новый
Номер = "";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Разберем, что происходит в этом коде:
ПередЗаписью, так как именно в этот момент платформа принимает решение о генерации номера.Дата) и год из уже записанной в базе (Ссылка.Дата).Номер пустое значение.в пределах года, начнет отсчет с единицы для нового года.Если решение с кодом в модуле объекта не помогает, возможно, в вашей системе установлены подписки на события или расширения. Эти инструменты могут перехватывать процесс записи и принудительно задавать формат номера, игнорируя стандартные механизмы.
Для диагностики этой ситуации мы рекомендуем:
отладчиком: поставьте точку останова в Модуле объекта на процедуре ПередЗаписью.Номер.Расширений конфигурации. Вполне вероятно, что одно из них содержит логику, которая принудительно фиксирует номер.Подводя итог, можно сказать, что правильная нумерация в 1С — это баланс между настройками в Конфигураторе и корректной обработкой даты пользователями. Помните, что настройка Автонумерация в свойствах документа лишь задает правило, но не гарантирует защиту от человеческого фактора (ручного изменения дат). Используйте программный контроль в ПередЗаписью, чтобы система автоматически «подхватывала» смену года и обнуляла счетчик, обеспечивая порядок в вашей документации.