Как исправить сбой автонумерации заявок на кассовый расход в 1С:БГУ 1.0?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет
← На главную

Сбой автонумерации документов в программных продуктах «1С:Предприятие 8» — одна из наиболее распространенных и неприятных технических проблем. Особенно остро она ощущается в конфигурации «1С:Бухгалтерия государственного учреждения 1.0» (БГУ 1.0) при оформлении кассовых документов, таких как «Заявка на кассовый расход» (ЗКР), «Заявка на возврат» или «Заявка на наличные». Ошибка в нумерации может привести к серьезным последствиям, ведь эти документы выгружаются в систему казначейства (СУФД), и любое несовпадение номеров в 1С и казначействе заблокирует выверку документов.

В этой статье мы подробно разберем, почему «ломается» механизм автонумерации в 1С, как устроена платформа на техническом уровне, и как исправить нумерацию без изменения исторических данных, чтобы не нарушить интеграцию с СУФД.

Почему автонумерация «ломается» и система «помнит» ошибочные номера?

Давайте выясним техническую причину происходящего. В платформе «1С:Предприятие» реализован специальный механизм оптимизации работы пользователей — кэширование номеров на стороне сервера приложений. Это сделано для повышения производительности при многопользовательской работе, чтобы при создании нового документа сервер мгновенно выдавал свободный номер, не блокируя при этом всю таблицу базы данных.

Однако у этого механизма есть побочный эффект. Проанализируем типичный сценарий сбоя:

  1. Один из пользователей случайно или намеренно вручную изменяет номер в документе (например, вместо очередного номера АБ00-000452 вводит номер АБ00-009999 или вообще убирает лидирующие нули, записывая номер как 999).
  2. Сервер приложений считывает этот новый «максимальный» номер и мгновенно перестраивает свой внутренний счетчик в оперативной памяти под этот новый формат. Теперь он считает, что следующий номер должен быть на единицу больше.
  3. Даже если этот документ впоследствии будет удален, помечен на удаление или ему вручную вернут правильный номер, серверный кэш номеров автоматически не очищается. При попытке создать новый документ система продолжит предлагать некорректный номер (например, ориентируясь на старое значение 9999).

Для принудительной очистки этого кэша и повторного сканирования физической базы данных на предмет реального максимального номера в платформе существует специальный метод — ОбновитьНумерациюОбъектов(). Рассмотрим подробнее, как им пользоваться.

Проблема «перехода за 1000» и лидирующих нулей

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

Суть проблемы кроется в том, что номера документов в 1С хранятся в строковом (текстовом) формате. Это позволяет использовать буквенные префиксы организаций и баз (например, префикс ФП в номере ФП00-000001). Сортировка строковых значений в базе данных происходит по правилам лексикографического (алфавитного) сравнения, а не математического сложения:

Почему сбивается ежегодная периодичность нумерации?

Для «Заявок на кассовый расход» в конфигурации «1С:Бухгалтерия государственного учреждения 1.0» по умолчанию установлена периодичность нумерации «В пределах года». Это значит, что каждый новый календарный год нумерация должна автоматически сбрасываться и начинаться с единицы (с учетом установленных префиксов).

Если этого не произошло, мы имеем дело с одной из следующих проблем:

  1. Документы с «будущей» датой. В базе данных присутствует документ (возможно, помеченный на удаление или не проведенный), дата которого ошибочно установлена будущим годом или концом текущего года. Платформа ориентируется на этот документ при расчете периодов нумерации.
  2. Цифры в префиксах организации. Если в карточке учреждения в поле префикса затесались цифры (например, префикс 12 вместо буквенного ОД), алгоритм автонумерации платформы дает сбой, так как он не может корректно отделить префикс от самого числового номера документа. Префикс должен состоять строго из букв.
  3. Общий нумератор. «Заявка на кассовый расход», «Заявка на возврат» и другие кассовые документы в системе БГУ 1.0 завязаны на один общий сквозной нумератор. Если сбой произошел хотя бы в одном виде документов (например, в заявке на возврат), автонумерация автоматически сломается и во всех остальных связанных типах документов.

Как безопасно исправить нумерацию без изменения старых документов

Массовая перенумерация документов задним числом с помощью готовых обработок — это крайняя и очень опасная мера. Если документы уже выгружены в СУФД и распечатаны на бумаге, изменение их номеров в базе 1С приведет к хаосу в учете. Мы настоятельно рекомендуем использовать безопасный метод восстановления автонумерации.

Давайте пошагово разберем, как восстановить порядок, не меняя прошлые документы:

  1. Выясните, какой правильный порядковый номер должен быть назначен следующему создаваемому документу. Например, последний отправленный в казначейство документ имел номер АБ00-001254. Значит, следующий должен быть АБ00-001255.
  2. Откройте журнал документов и создайте новую «Заявку на кассовый расход» текущей датой.
  3. Вручную измените номер нового документа, вписав его строго по шаблону. Очень важно соблюсти разрядность, буквенный префикс, дефис и все лидирующие нули (например, запишите номер как АБ00-001255).
  4. При попытке изменения номера программа выдаст предупреждение о том, что номер редактируется вручную и автонумерация может быть нарушена. Согласитесь с этим предупреждением.
  5. Запишите созданный документ (проводить его не обязательно, достаточно просто сохранить).
  6. Теперь нам необходимо сбросить неверный кэш автонумератора на сервере. Для этого выполните команду очистки кэша.

Как выполнить сброс кэша нумерации с помощью кода 1С

Если у вас есть права администратора или программиста, вы можете выполнить принудительное обновление кэша нумерации без сторонних обработок. Для этого можно использовать «Консоль кода», запустить 1С в режиме отладки или создать простую внешнюю обработку в конфигураторе.

Проанализируем пример кода для сброса кэша нумерации по основным кассовым документам БГУ 1.0:


// Сбрасываем кэш номеров для Заявок на кассовый расход
ОбновитьНумерациюОбъектов(Метаданные.Документы.ЗаявкаНаКассовыйРасход);

// Сбрасываем кэш номеров для Заявок на возврат
ОбновитьНумерациюОбъектов(Метаданные.Документы.ЗаявкаНаВозврат);

// Сбрасываем кэш номеров для Заявок на наличные
ОбновитьНумерациюОбъектов(Метаданные.Документы.ЗаявкаНаНаличные);

Сообщить("Кэш автонумерации кассовых документов успешно обновлен!");

После выполнения этого кода платформа заново просканирует таблицы базы данных. В качестве ориентира она возьмет последний созданный нами вручную документ с правильной структурой номера (например, АБ00-001255), обновит внутренний счетчик, и все последующие новые документы будут автоматически получать правильные номера (АБ00-001256, АБ00-001257 и так далее).

Рекомендации по предотвращению сбоев нумерации в будущем

Чтобы избежать подобных проблем в дальнейшей работе учреждения, рекомендуем предпринять следующие превентивные меры:

← На главную