Почему при изменении флага отражения в бухучете сбивается нумерация документа и как ее исправить в 1С:УТ 10.3

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В конфигурации 1С:Управление торговлей 10.3 пользователи и разработчики нередко сталкиваются с ситуацией, когда при включении или отключении признака ОтражатьВБухгалтерскомУчете документу присваивается некорректный короткий номер (например, трехзначный вместо стандартного одиннадцатизначного формата с лидирующими нулями). Разберем механизм работы нумератора, выясним причины такого поведения и рассмотрим пошаговые способы восстановления корректной автонумерации.

Механизм формирования номеров и причины сбоя

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

  1. Обработчик изменения реквизита на форме. В форме документа при переключении флажка вызывается процедура ОтражатьВБухгалтерскомУчетеПриИзменении(). В типовых конфигурациях при изменении режима учета пересчитывается префикс номера документа (или сбрасывается ранее назначенный номер), после чего вызывается процедура перенумерации.
  2. Событие назначения номера. При вызове платформенного метода УстановитьНовыйНомер() срабатывает событие модуля объекта ПриУстановкеНовогоНомера, а также подписки на события, где формируется префикс (например, префикс организации, узла РИБ или префикс управленческого/бухгалтерского учета).
  3. Лексикографическое (строковое) сравнение. Номера документов в 1С имеют строковый тип данных. Платформа вычисляет следующий номер, находя максимальное строковое значение за текущий период нумерации (обычно год) с учетом префикса. Если пользователь хотя бы один раз вручную сохранил документ с коротким номером без ведущих нулей (к примеру, 999 вместо 00000000999), строка "999" при сравнении оказывается больше, чем "00000000999". В результате платформа продолжает нумеровать документы в коротком формате (1000, 1001 и т.д.).
  4. Общие нумераторы. Если документ использует общий объект метаданных Нумератор, сбойный номер мог быть введен в совершенно другом виде документа, входящем в состав того же нумератора.
  5. Кэширование счетчиков номеров. Платформа кэширует последний выданный номер в памяти сеанса/сервера. Простое ручное переименование одного документа не сбрасывает внутренний счетчик автонумерации.

Шаг 1. Поиск документов с некорректными номерами

Рассмотрим порядок действий для обнаружения документов, нарушивших нумерационный ряд:

  1. Откроем список документов нужного вида за текущий календарный год.
  2. Выполним сортировку списка по колонке Номер по убыванию.
  3. Проверим верхние позиции списка: если первыми отображаются короткие номера без лидирующих нулей (например, 100, 500, 999), зафиксируем эти документы.
  4. Если документ входит в общий нумератор, проверим все связанные с ним виды документов аналогичным образом.
  5. Проверим справочник Организации и настройки программы на корректность заданных префиксов (отсутствие лишних пробелов и специальных символов).

Шаг 2. Исправление номеров и восстановление разрядности

После выявления всех документов с нарушенным форматом необходимо привести их номера к стандартной длине, установленной в метаданных (дописать недостающие лидирующие нули с сохранением префикса). Разберем варианты исправления:

  1. Ручное исправление. Если поврежденных документов немного, откроем меню Сервис → Настройка учета → Настройка стратегии редактирования номеров (кодов) объектов, временно разрешим редактирование номеров и вручную допишем нули в номера найденных документов.
  2. Групповая обработка. Если сбойных документов много, воспользуемся стандартной обработкой Универсальный подбор и обработка объектов либо обработкой Групповое изменение реквизитов с включенной возможностью изменения служебных полей, чтобы пакетно выровнять длину номеров.

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

После того как все документы в базе приведены к корректному виду, необходимо принудительно обновить счетчик нумерации платформы с помощью глобального метода ОбновитьНумерациюОбъектов(). Выполнить данный вызов можно через внешнюю обработку или обработку «Групповая обработка справочников и документов» под учетной записью с полными административными правами.

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

Для сброса нумерации конкретного вида документа:

ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг);

Если для группы документов используется объект метаданных Нумератор:

ОбновитьНумерациюОбъектов(Метаданные.Нумераторы.ОсновнойНумератор);

Для полного сброса счетчиков автонумерации по всей информационной базе:

ОбновитьНумерациюОбъектов();

Шаг 4. Проверка и создание точки отсчета

Проанализируем правильность выполненных действий:

  1. Создадим новый тестовый документ и проверим присвоенный ему номер.
  2. Изменим состояние флага ОтражатьВБухгалтерскомУчете и убедимся, что номер переформировывается с корректной длиной и сохранением префикса.
  3. Если автоматическое присвоение номера не началось с нужной позиции, вручную запишем один новый документ с правильным полным номером (например, УТ000001001), после чего удалим его или продолжим нормальную работу — следующий документ получит номер УТ000001002 автоматически.
← На главную