При настройке распределенной информационной базы (РИБ / УРБД) в самописной или малотиповой конфигурации разработчики часто сталкиваются с важной проблемой: в разных узлах базы данных пользователи начинают создавать элементы справочников и документы с одинаковыми кодами и номерами. Рассмотрим подробнее, почему так происходит, как платформа 1С обрабатывает дубли и какими способами можно реализовать автоматическую назначение префиксов для обеспечения уникальности.
Выясним причину дублирования. На техническом уровне платформа 1С идентифицирует любые объекты ссылочных типов (справочники, документы) по их внутреннему уникальному идентификатору (GUID/UUID). Если в двух независимых узлах РИБ параллельно создаются два элемента справочника, платформа присвоит им разные GUID.
При очередном сеансе обмена оба элемента попадают в обе базы. Платформа не перезапишет один элемент другим, однако пользователи увидят в списке две разные записи с абсолютно одинаковыми кодами или номерами. Чтобы избежать путаницы в учете и обеспечить удобную поисковую уникальность, необходимо каждому узлу РИБ назначить свой уникальный префикс автонумерации.
Проанализируем наименее трудоемкий способ реализации префиксации в самописной конфигурации. Вместо того чтобы переписывать код во всех формах или модулях объектов, разберем шаг за шагом процесс настройки централизованных подписок на события.
ПриУстановкеНовогоКода. В качестве источника укажем необходимые справочники, планы видов характеристик и планы счетов.ПриУстановкеНовогоНомера для документов, бизнес-процессов и задач.Посмотрим на пример кода процедур-обработчиков события для справочников и документов:
// Процедура-обработчик для справочников (событие ПриУстановкеНовогоКода)
Процедура УстановкаНовогоКодаПриУстановкеНовогоКода(Источник, СтандартнаяОбработка, Префикс) Экспорт
// Присваиваем префикс текущего узла распределенной базы
Префикс = ПланыОбмена.АвтоматическийОбмен.ЭтотУзел().Код;
КонецПроцедуры
Для передаваемых параметров сеанса или динамического добавления префикса организации можно использовать каскадную функцию формирования строки:
Процедура ДобавитьПрефиксУзла(Префикс) Экспорт
Если ПараметрыСеанса.ИспользованиеРИБ Тогда
Префикс = ПараметрыСеанса.ПрефиксУзлаРаспределеннойИнформационнойБазы + Префикс;
КонецЕсли;
КонецПроцедуры
Платформа автоматически найдет максимальный существующий номер с указанным префиксом и присвоит новому объекту следующий порядковый номер вида Префикс + ПорядковыйНомер.
Если нет необходимости изобретать велосипед, разберем готовое решение из Библиотеки Стандартных Подсистем (БСП). Внедрение подсистемы «Префиксация объектов» дает следующие преимущества:
ОбъектСПрефиксомАвтонумерации, к которому достаточно привязать все необходимые объекты метаданных.Рассмотрим ключевые особенности и детали разработки, о которых нельзя забывать при настройке автонумерации:
1. Длина полей кодов и номеров в конфигураторе: При добавлении префикса узла (например, 2–4 символа) и разделителей доступное количество цифр под сам номер уменьшается. Если длина номера документа составляла 8 символов, а префикс занимает 4 символа, под порядковый номер останется всего 4 цифры (максимум 9999 документов). При превышении этого значения платформа выдаст ошибку неуникальности. Необходимо заранее увеличить длину строк в метаданных.
2. Алфавит и символы префикса: Рекомендуется использовать только символы латинского алфавита в верхнем регистре и цифры (без спецсимволов и пробелов). Использование кириллицы или спецсимволов может приводить к ошибкам сортировки на уровне СУБД и проблемам при генерации штрихкодов формата Code128.
3. Работа с нумераторами документов: Если для группы документов используется общий объект метаданных «Нумератор», поиск последнего номера с префиксом выполняется в рамках всего нумератора. Сбой в нумерации одного документа с некорректным префиксом может нарушить автонумерацию других связанных документов.
4. Смена префикса узла в процессе эксплуатации: Изменение кода или префикса узла в существующей базе не пересчитывает коды ранее созданных документов. В базе останутся элементы со старыми префиксами, поэтому для их исправления потребуется групповая перепрефиксация специально написанной обработкой.