Сбой автонумерации документов в программных продуктах «1С:Предприятие 8» — одна из наиболее распространенных и неприятных технических проблем. Особенно остро она ощущается в конфигурации «1С:Бухгалтерия государственного учреждения 1.0» (БГУ 1.0) при оформлении кассовых документов, таких как «Заявка на кассовый расход» (ЗКР), «Заявка на возврат» или «Заявка на наличные». Ошибка в нумерации может привести к серьезным последствиям, ведь эти документы выгружаются в систему казначейства (СУФД), и любое несовпадение номеров в 1С и казначействе заблокирует выверку документов.
В этой статье мы подробно разберем, почему «ломается» механизм автонумерации в 1С, как устроена платформа на техническом уровне, и как исправить нумерацию без изменения исторических данных, чтобы не нарушить интеграцию с СУФД.
Давайте выясним техническую причину происходящего. В платформе «1С:Предприятие» реализован специальный механизм оптимизации работы пользователей — кэширование номеров на стороне сервера приложений. Это сделано для повышения производительности при многопользовательской работе, чтобы при создании нового документа сервер мгновенно выдавал свободный номер, не блокируя при этом всю таблицу базы данных.
Однако у этого механизма есть побочный эффект. Проанализируем типичный сценарий сбоя:
АБ00-000452 вводит номер АБ00-009999 или вообще убирает лидирующие нули, записывая номер как 999).9999).Для принудительной очистки этого кэша и повторного сканирования физической базы данных на предмет реального максимального номера в платформе существует специальный метод — ОбновитьНумерациюОбъектов(). Рассмотрим подробнее, как им пользоваться.
Рассмотрим еще одну частую проблему, упомянутую пользователями: когда количество кассовых заявок переваливает за 1000, программа отказывается присваивать новые номера текущего года и возвращается к старым периодам (например, к номерам прошлых лет).
Суть проблемы кроется в том, что номера документов в 1С хранятся в строковом (текстовом) формате. Это позволяет использовать буквенные префиксы организаций и баз (например, префикс ФП в номере ФП00-000001). Сортировка строковых значений в базе данных происходит по правилам лексикографического (алфавитного) сравнения, а не математического сложения:
"999" считается больше, чем строка "0000001000", так как первый символ «9» больше «0».Для «Заявок на кассовый расход» в конфигурации «1С:Бухгалтерия государственного учреждения 1.0» по умолчанию установлена периодичность нумерации «В пределах года». Это значит, что каждый новый календарный год нумерация должна автоматически сбрасываться и начинаться с единицы (с учетом установленных префиксов).
Если этого не произошло, мы имеем дело с одной из следующих проблем:
12 вместо буквенного ОД), алгоритм автонумерации платформы дает сбой, так как он не может корректно отделить префикс от самого числового номера документа. Префикс должен состоять строго из букв.Массовая перенумерация документов задним числом с помощью готовых обработок — это крайняя и очень опасная мера. Если документы уже выгружены в СУФД и распечатаны на бумаге, изменение их номеров в базе 1С приведет к хаосу в учете. Мы настоятельно рекомендуем использовать безопасный метод восстановления автонумерации.
Давайте пошагово разберем, как восстановить порядок, не меняя прошлые документы:
АБ00-001254. Значит, следующий должен быть АБ00-001255.АБ00-001255).Если у вас есть права администратора или программиста, вы можете выполнить принудительное обновление кэша нумерации без сторонних обработок. Для этого можно использовать «Консоль кода», запустить 1С в режиме отладки или создать простую внешнюю обработку в конфигураторе.
Проанализируем пример кода для сброса кэша нумерации по основным кассовым документам БГУ 1.0:
// Сбрасываем кэш номеров для Заявок на кассовый расход
ОбновитьНумерациюОбъектов(Метаданные.Документы.ЗаявкаНаКассовыйРасход);
// Сбрасываем кэш номеров для Заявок на возврат
ОбновитьНумерациюОбъектов(Метаданные.Документы.ЗаявкаНаВозврат);
// Сбрасываем кэш номеров для Заявок на наличные
ОбновитьНумерациюОбъектов(Метаданные.Документы.ЗаявкаНаНаличные);
Сообщить("Кэш автонумерации кассовых документов успешно обновлен!");
После выполнения этого кода платформа заново просканирует таблицы базы данных. В качестве ориентира она возьмет последний созданный нами вручную документ с правильной структурой номера (например, АБ00-001255), обновит внутренний счетчик, и все последующие новые документы будут автоматически получать правильные номера (АБ00-001256, АБ00-001257 и так далее).
Чтобы избежать подобных проблем в дальнейшей работе учреждения, рекомендуем предпринять следующие превентивные меры: