Ситуация со сбившейся нумерацией в 1С — это классическая проблема, возникающая из-за «человеческого фактора». Когда пользователь начинает вручную корректировать номера документов, автоматический алгоритм платформы 1С:Предприятие теряет ориентир. В результате система либо перестает увеличивать номер на единицу, либо начинает выдавать ошибки о неуникальности, либо нумерация принимает странный вид. Рассмотрим подробно, как работает этот механизм в «1С:Управление торговлей 11.4» и какими способами можно вернуть порядок в базу данных.
Прежде чем переходить к лечению, проанализируем «физику» процесса. В платформе 1С реализован механизм лексикографического сравнения строк. Это означает, что система не просто ищет «самое большое число», она ищет «самую старшую строку». Для программы номер 0000-000009 меньше, чем 0000-00001, если в последнем случае общее количество символов в строке изменилось.
Основные факторы, сбивающие автоматику:
Рассмотрим самый простой способ, который часто помогает без программирования. Нам нужно найти «виновника» — тот самый документ, после которого всё пошло не так. Посмотрим на алгоритм действий:
Номер в порядке убывания. Самый верхний документ в списке — это тот номер, на который сейчас ориентируется система.0000-000001.0000-1 или 0000-0000001), нам необходимо вручную исправить этот номер на правильный, соблюдая количество знаков.Важный нюанс: Как отмечалось в обсуждении, простая попытка «убрать один ноль» может не сработать, если нарушена общая длина строки, заданная в конфигураторе. Система автоматически дополнит строку нулями до нужной длины, и вы снова вернетесь к ошибке. Нужно следить, чтобы количество символов строго соответствовало стандарту вашей базы.
Если документов с «плохими» номерами накоплено слишком много и исправлять их вручную нельзя (например, они уже распечатаны и переданы контрагентам), лучше всего начать нумерацию с чистого листа. В «1С:Управление торговлей 11.4» это делается через механизм префиксов.
Выясним, как это работает. Номер документа в УТ 11 состоит из трех сегментов: Префикс организации + Префикс информационной базы + Номер документа. Если префиксы не заданы, система подставляет нули.
Чтобы начать нумерацию заново:
ТД).Теперь при создании нового документа 1С увидит, что документов с префиксом ТД еще не существует. Она автоматически создаст номер вида ТД00-000001. Старые документы останутся в базе со своими номерами (без префиксов), что позволит легко осуществлять по ним поиск, а новая нумерация пойдет корректно и последовательно.
Если вы исправили номера, но система упорно продолжает предлагать «кривой» номер, значит, сработал механизм кэширования. Нам нужно заставить платформу пересчитать нумерацию заново, обратившись к базе данных, а не к памяти сервера. Для этого используем встроенный метод ОбновитьНумерациюОбъектов.
Разберем, как выполнить этот код, если у вас есть права администратора. Можно воспользоваться консолью кода или создать внешнюю обработку со следующим фрагментом:
// Обновление нумерации для конкретного типа документа
МетаданныеДокумента = Метаданные.Документы.ПриобретениеТоваровУслуг;
ОбновитьНумерациюОбъектов(МетаданныеДокумента);
// Либо обновление для всех объектов сразу (может занять время)
// ОбновитьНумерациюОбъектов();
Этот метод принудительно очищает кэш номеров в памяти сервера приложений 1С:Предприятие и заставляет систему заново вычислить максимальный номер среди существующих в базе документов данного типа. Для быстрой синхронизации кэша и устранения сбоев пригодится обработка для исправления ошибки неуникальности номеров.
В конфигурациях на базе БСП (Библиотека стандартных подсистем), к которым относится УТ 11.4, есть мощный инструмент — «Групповое изменение реквизитов». Если «товаровед накосячил» в большом количестве документов, мы можем выделить их и массово изменить номера по определенной маске. Для автоматизации этой задачи пригодится инструмент для групповой перенумерации документов с учетом префиксов.
Однако помните о рисках! В сообщении 20 упоминался метод правки через SQL-запросы. Мы крайне не рекомендуем использовать SQL для изменения номеров в УТ 11. Номер документа — это не просто строка в таблице, он связан с движениями по регистрам, отображается в печатных формах и может участвовать в обмене данными с бухгалтерской базой. Прямая правка в SQL может привести к рассинхронизации данных и ошибкам при обновлении конфигурации. Чтобы избежать расхождений в результатах синхронизации, полезно автоматически сравнивать бухгалтерские проводки между базами.
Чтобы нумерация больше не сбивалась, проанализируем возможность ограничения прав пользователя. В 1С есть стандартное право «Интерактивное изменение номера».
Для предотвращения будущих ошибок выполним следующие шаги:
Если право редактирования номера все же необходимо (например, для ввода входящих номеров накладных поставщика), убедитесь, что вы используете для этого специальный реквизит «Номер входящего документа», а не стандартный системный реквизит Номер (или Код для справочников).
Подводя итог, отметим: если нумерация сбилась «вчера», проще всего исправить последние несколько документов вручную, соблюдая длину строки. Если же проблема застарелая — внедряйте префикс организации. Это самый надежный способ «разрезать» историю нумерации на «до» и «после», сохранив порядок в учете. В качестве профилактики технических проблем также рекомендуется настроить автоматическое архивирование и тестирование баз 1С.