Сбой автонумерации в конфигурациях на базе 1С:Предприятие 8 — это классическая проблема, с которой часто сталкиваются специалисты после переноса данных, настройки обменов или некорректного ручного ввода номеров. В случае с УТ 10.3 (которая базируется на обычных формах) ситуация осложняется тем, что префикс документа не всегда является статичным значением из одного справочника. Разберем детально, почему возникает «склейка» префиксов (например, появление «ТДЧ» вместо «ТД») и как очистить базу от «памяти» о неправильных номерах.
Прежде всего, нам необходимо понять, как платформа 1С собирает текстовую часть номера. Проанализируем структуру номера. В УТ 10.3 итоговый префикс — это составная строка, которая обычно формируется из двух или трех частей:
Сервис — Настройка программы) или непосредственно в плане обмена. В коде это значение часто извлекается из константы ПрефиксВнутреннегоУзлаПланаОбмена.Организации на соответствующей вкладке.Рассмотрим пример из ситуации автора: если в рабочей базе установлен префикс узла «Т», а у организации «Торговый дом» стоит префикс «ДЧ» (который мог приехать из тестовой базы вместе с документами), система выполнит конкатенацию (сложение строк) и выдаст «ТДЧ». Если же в тестовой базе был установлен префикс «Ч» для узла обмена, то при переносе документов Заказ клиента через Конвертацию данных (КД), этот символ мог «зацепиться» за номера документов.
Часто пользователи задаются вопросом: «Я удалил документ с плохим номером, но следующий создается с еще большим номером. Где он хранится?». Разберем этот технический нюанс. Платформа 1С не хранит «последний использованный номер» в отдельной таблице базы данных. Алгоритм работы функции УстановитьНовыйНомер() следующий:
ЗаказПокупателя).Важный момент: Если в базе остался хотя бы один документ (даже помеченный на удаление или скрытый фильтрами прав доступа), номер которого начинается на «ТДЧ», система будет считать этот префикс «старшим» и продолжит нумерацию именно в нем. Платформа всегда стремится сохранить уникальность и преемственность самого длинного найденного префикса.
Выясним причину, почему это происходит только в заказах. Проанализируем ситуацию по шагам:
Воспользуемся консолью запросов или обычным списком документов. Нам нужно найти самый первый документ в хронологическом порядке, у которого появился префикс «ТДЧ». Скорее всего, это документ, импортированный из другой базы. Посмотрим на код простого запроса для поиска таких объектов:
ВЫБРАТЬ
ЗаказПокупателя.Ссылка,
ЗаказПокупателя.Номер,
ЗаказПокупателя.Дата
ИЗ
Документ.ЗаказПокупателя КАК ЗаказПокупателя
ГДЕ
ЗаказПокупателя.Номер ПОДОБНО "ТДЧ%"
УПОРЯДОЧИТЬ ПО
ЗаказПокупателя.Дата
Если запрос вернул документы, значит, они физически присутствуют в базе. Их нужно либо перенумеровать, либо полностью удалить (Shift+Delete), так как пометка на удаление не исключает номер из анализа платформой.
Проверим настройки обмена. Перейдем в Операции — Планы обмена. Рассмотрим узел «По этой базе» (предопределенный узел). Если в поле Префикс там стоит значение «Ч» или «ТД», это и есть корень проблемы. При создании нового документа 1С берет префикс организации и добавляет к нему префикс узла.
Для исправления ситуации воспользуемся стандартной обработкой Перенумерация объектов (она обычно входит в состав ИТС или консоли администратора). Пошагово выполним следующие действия:
ДокументСсылка.ЗаказПокупателя.Если после удаления всех документов с неправильными номерами и перенумерации система продолжает подставлять «ТДЧ», мы имеем дело с кэшированием. Платформа 1С кэширует некоторые значения для ускорения работы. Выполним следующие действия:
%AppData%\1C\1Cv8).Тестирование и исправление с галочкой Пересчет итогов, хотя это редко влияет именно на нумерацию, но помогает обновить состояние таблиц.Если штатные средства не помогают, проанализируем код. В конфигураторе найдем подписку на событие ПриУстановкеНовогоНомера. Рассмотрим, нет ли там специфического кода, который принудительно меняет префикс для заказов. Пример того, как может выглядеть некорректная программная установка номера:
Процедура ПриУстановкеНовогоНомераДокумента(Источник, СтандартнаяОбработка, Префикс) Экспорт
// Если здесь жестко прописано условие
Если ТипЗнч(Источник) = Тип("ДокументОбъект.ЗаказПокупателя") Тогда
Префикс = Префикс + "Ч"; // Это может быть причиной!
КонецЕсли;
КонецПроцедуры
Если такой код обнаружен, его нужно скорректировать. Также стоит проверить модуль самого документа ЗаказПокупателя, процедуру ПередЗаписью. Возможно, там реализована логика, которая анализирует реквизит Организация и подменяет префикс «на лету».
Подведем итог: появление лишних символов в номере в УТ 10.3 почти всегда связано либо с «мусорными» документами, пришедшими через обмен (КД), либо со склейкой префикса организации и префикса узла обмена. Системный подход к очистке данных, проверка планов обмена и использование обработки перенумерации гарантированно решают эту проблему.