Как обеспечить уникальность кодов справочников и номеров документов в РИБ 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При настройке распределенной информационной базы (РИБ / УРБД) в самописной или малотиповой конфигурации разработчики часто сталкиваются с важной проблемой: в разных узлах базы данных пользователи начинают создавать элементы справочников и документы с одинаковыми кодами и номерами. Рассмотрим подробнее, почему так происходит, как платформа 1С обрабатывает дубли и какими способами можно реализовать автоматическую назначение префиксов для обеспечения уникальности.

Причина возникновения дублей и механизм работы РИБ

Выясним причину дублирования. На техническом уровне платформа 1С идентифицирует любые объекты ссылочных типов (справочники, документы) по их внутреннему уникальному идентификатору (GUID/UUID). Если в двух независимых узлах РИБ параллельно создаются два элемента справочника, платформа присвоит им разные GUID.

При очередном сеансе обмена оба элемента попадают в обе базы. Платформа не перезапишет один элемент другим, однако пользователи увидят в списке две разные записи с абсолютно одинаковыми кодами или номерами. Чтобы избежать путаницы в учете и обеспечить удобную поисковую уникальность, необходимо каждому узлу РИБ назначить свой уникальный префикс автонумерации.

Решение 1: Настройка подписок на события автонумерации

Проанализируем наименее трудоемкий способ реализации префиксации в самописной конфигурации. Вместо того чтобы переписывать код во всех формах или модулях объектов, разберем шаг за шагом процесс настройки централизованных подписок на события.

  1. Проверка типов кодов и номеров: Убедимся, что для всех справочников и документов, участвующих в обмене, тип кода и номера установлен как строковый (а не числовой), чтобы платформа могла добавлять буквенные префиксы.
  2. Создание подписки для справочников: Создадим подписку на событие ПриУстановкеНовогоКода. В качестве источника укажем необходимые справочники, планы видов характеристик и планы счетов.
  3. Создание подписки для документов: Создадим отдельную подписку на событие ПриУстановкеНовогоНомера для документов, бизнес-процессов и задач.
  4. Написание обработчика: В общем модуле пропишем процедуры формирования префикса.

Посмотрим на пример кода процедур-обработчиков события для справочников и документов:


// Процедура-обработчик для справочников (событие ПриУстановкеНовогоКода)
Процедура УстановкаНовогоКодаПриУстановкеНовогоКода(Источник, СтандартнаяОбработка, Префикс) Экспорт
	
	// Присваиваем префикс текущего узла распределенной базы
	Префикс = ПланыОбмена.АвтоматическийОбмен.ЭтотУзел().Код;

КонецПроцедуры

Для передаваемых параметров сеанса или динамического добавления префикса организации можно использовать каскадную функцию формирования строки:


Процедура ДобавитьПрефиксУзла(Префикс) Экспорт

	Если ПараметрыСеанса.ИспользованиеРИБ Тогда
		Префикс = ПараметрыСеанса.ПрефиксУзлаРаспределеннойИнформационнойБазы + Префикс;
	КонецЕсли;

КонецПроцедуры

Платформа автоматически найдет максимальный существующий номер с указанным префиксом и присвоит новому объекту следующий порядковый номер вида Префикс + ПорядковыйНомер.

Решение 2: Использование подсистемы «Префиксация объектов» из БСП

Если нет необходимости изобретать велосипед, разберем готовое решение из Библиотеки Стандартных Подсистем (БСП). Внедрение подсистемы «Префиксация объектов» дает следующие преимущества:

  1. Поддержка составных каскадных префиксов (Префикс узла РИБ + Префикс организации).
  2. Наличие определяемого типа ОбъектСПрефиксомАвтонумерации, к которому достаточно привязать все необходимые объекты метаданных.
  3. Готовые механизмы и обработки для перепрефиксации объектов при изменении структуры узлов.

Важные технические нюансы при работе с префиксами в РИБ

Рассмотрим ключевые особенности и детали разработки, о которых нельзя забывать при настройке автонумерации:

1. Длина полей кодов и номеров в конфигураторе: При добавлении префикса узла (например, 2–4 символа) и разделителей доступное количество цифр под сам номер уменьшается. Если длина номера документа составляла 8 символов, а префикс занимает 4 символа, под порядковый номер останется всего 4 цифры (максимум 9999 документов). При превышении этого значения платформа выдаст ошибку неуникальности. Необходимо заранее увеличить длину строк в метаданных.

2. Алфавит и символы префикса: Рекомендуется использовать только символы латинского алфавита в верхнем регистре и цифры (без спецсимволов и пробелов). Использование кириллицы или спецсимволов может приводить к ошибкам сортировки на уровне СУБД и проблемам при генерации штрихкодов формата Code128.

3. Работа с нумераторами документов: Если для группы документов используется общий объект метаданных «Нумератор», поиск последнего номера с префиксом выполняется в рамках всего нумератора. Сбой в нумерации одного документа с некорректным префиксом может нарушить автонумерацию других связанных документов.

4. Смена префикса узла в процессе эксплуатации: Изменение кода или префикса узла в существующей базе не пересчитывает коды ранее созданных документов. В базе останутся элементы со старыми префиксами, поэтому для их исправления потребуется групповая перепрефиксация специально написанной обработкой.

← На главную