Сбой нумерации в конфигурациях на базе «1С:Предприятие 8.3» — ситуация, с которой рано или поздно сталкивается любой специалист. Чаще всего это происходит при настройке интеграций, изменении префиксов организации или информационной базы, а также после ручного вмешательства пользователей. Если ошибки возникли в ходе миграции, стоит изучить раздел с готовыми решениями для переноса данных в БП, чтобы исключить некорректную запись объектов. В данной статье мы подробно разберем, как устроена система нумерации, почему она «ломается» и как восстановить порядок, сохранив при этом юридическую значимость уже выданных документов.
Для начала проанализируем, как платформа 1С вычисляет следующий номер. В системе работает механизм автонумерации, который при создании нового объекта ищет в базе данных документ того же типа с максимальным номером. Однако поиск происходит не среди всех документов, а в разрезе префикса и периодичности (обычно это год).
Префикс в современных типовых конфигурациях (например, БП 3.0, ERP, УТ 11) формируется из двух составляющих:
Если номер имеет вид ОС00-000018, то ОС — это префикс организации, а 00 — префикс базы. Как только в базе появляется документ с новым префиксом, например ОСБП-000001, система создает новую «ветку» нумерации. С этого момента для префикса ОСБП отсчет пойдет с единицы, а старая последовательность ОС00 останется нетронутой.
Рассмотрим ситуацию, когда вы случайно создали документ с новым префиксом и нумерация началась заново, но при этом старые документы уже распечатаны и переданы клиентам. Изменять их номера нельзя, так как это приведет к расхождениям в актах сверки и налоговой отчетности.
Выясним причину: система «увидела» новый префикс и зафиксировала его как основной для текущих действий. Чтобы вернуться к нужной последовательности, мы можем применить метод «ручного толчка»:
ОС00-000018, а новый создался как ОСБП-000001, нам нужно изменить его на ОС00-000019.После записи документа с номером ОС00-000019 система при создании следующего объекта автоматически предложит ОС00-000020. Этот метод хорош тем, что он не требует удаления данных, но оставляет в базе «дыру» в виде одного документа с нестандартным префиксом.
Если документов с неправильными номерами накопилось много, целесообразно воспользоваться программными средствами. Рассмотрим алгоритм действий, который позволит привести базу в порядок системно. Для решения такой задачи можно использовать обработку для перенумерации документов с учетом префикса.
Воспользуемся встроенной обработкой «Групповое изменение реквизитов» или напишем небольшой фрагмент кода. Логика решения будет следующей:
// Пример программной очистки номера для восстановления автонумерации
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
// Устанавливаем режим загрузки, чтобы обойти проверки и не менять дату/автора
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Номер = ""; // Очищаем номер
ДокументОбъект.Записать();
// Теперь, если вызвать метод УстановитьНовыйНомер(),
// система присвоит его исходя из актуального префикса в настройках
ДокументОбъект.УстановитьНовыйНомер(ПрефиксОрганизации);
ДокументОбъект.Записать();
Проанализируем шаги подробнее. Сначала мы устанавливаем свойство ОбменДанными.Загрузка = Истина. Это критически важно: так мы гарантируем, что при записи документа не сработают подписки на события и встроенные проверки, которые могли бы помешать записи объекта без номера или изменить движения документа в регистрах.
Иногда нумерация сбивается даже при правильном визуальном отображении префикса. Разберем по шагам, почему это происходит. Существует риск использования схожих по написанию символов разных раскладок. Например, буква «С» в префиксе ОС00 может быть русской, а в OC00 — латинской. Для человеческого глаза они идентичны, но для базы данных 1С это совершенно разные строки.
Чтобы выяснить, нет ли в базе таких «двойников», можно использовать следующий код в консоли запросов:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.Номер
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Номер ПОДОБНО "%C%" // Здесь нужно проверить оба варианта раскладки
Если вы обнаружили такие документы, их необходимо перенумеровать, приведя префикс к единому стандарту кодировки.
Важно помнить, что в клиент-серверном варианте работы платформа 1С использует кеширование номеров. Это делается для повышения производительности: сервер «бронирует» диапазон номеров для сеансов пользователей. Если вы исправили номера в базе, но система продолжает предлагать старые ошибочные значения, попробуйте выполнить следующие действия:
ОбновитьПовторноИспользуемыеЗначения(), хотя он и не всегда напрямую влияет на нумератор, это помогает обновить состояние сеанса.Agent 1C:Enterprise.Чтобы избежать подобных проблем в будущем, рекомендуем придерживаться следующих правил:
000000001 номер 1), автонумерация может перестать работать корректно, так как 1С будет искать следующий номер путем прибавления единицы к текстовой строке, и логика сравнения строк может выдать непредсказуемый результат.Подведем итог: если нумерация «слетела», самым безопасным способом для работающей базы является ручная корректировка номера следующего создаваемого документа с соблюдением всех префиксов и длины строки. Если же масштаб проблемы велик, используйте групповую обработку с включенным режимом ОбменДанными.Загрузка, чтобы восстановить последовательность без нарушения целостности учета.