При работе с распределенными информационными базами (УРБД) в платформе 1С:Предприятие 7.7 нередко возникает необходимость узнать, в какой именно информационной базе — центральной или периферийной — был первоначально создан конкретный документ или элемент справочника. Разберем штатные функции синтаксического помощника, а также альтернативные варианты решения этой задачи.
Для определения источника происхождения объекта в компоненте УРБД предусмотрена специализированная функция языка 1С 7.7:
ИБСозданияОбъекта(<Объект>) (англоязычный синоним: ObjectCreationIB)
В качестве параметра <Объект> передается ссылка на объект метаданных (например, элемент справочника или документ). Функция возвращает трехсимвольную строку, представляющую собой трехзначный код (идентификатор) информационной базы, в которой объект был физически записан впервые.
Рассмотрим пример использования данной функции в коде:
КодБазы = ИБСозданияОбъекта(ТекущийДокумент());
Если ПустаяСтрока(КодБазы) = 0 Тогда
Сообщить("Документ создан в ИБ с кодом: " + КодБазы);
Иначе
Сообщить("Не удалось определить базу создания объекта.");
КонецЕсли;
Для реализации логики миграции и обработки данных в распределенной среде полезно применять и другие методы компоненты DistrDB.dll:
ТекущаяИБКод() (CurrentIBCode) — возвращает 3-символьный код информационной базы, в которой выполняется код в данный момент.ЭтоПеренесенныйОбъект(<Объект>) (IsTransferredObject) — возвращает 1, если объект мигрировал из другой базы через обмен данными, или 0, если он был создан локально.ЦентральнаяИБ() (CentralIB) — позволяет узнать статус базы: возвращает 1 для центральной ИБ и 0 для периферийной.Проанализируем, как платформа 1С 7.7 хранит сведение о базе создания на физическом уровне. При включенном механизме УРБД внутренний идентификатор каждого нового объекта (в таблицах справочников SC*, заголовков документов DH* и общего журнала _1SJOURN) формируется как 9-символьная строка в 36-ричной системе счисления.
Последние три символа внутреннего идентификатора (DBSIGN) хранят код базы-источника. Это позволяет определить базу создания без вызова функции компоненты:
ЗначениеВСтрокуВнутр(): Разбрав внутреннее строковое представление объекта, можно извлечь код ИБ из соответствующей подстроки идентификатора.ID (для справочников) или IDDOC (для документов), достаточно срезaть последние три символа полученной строки.Выясним важные нюансы, о которых следует помнить при программировании:
ИБСозданияОбъекта() и сопутствующие методы доступны только при установленной и зарегистрированной компоненте УРБД (файл DistrDB.dll).