Как определить базу создания объекта в 1С 7.7 при использовании УРБД?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Основной способ: использование функции ИБСозданияОбъекта()

Для определения источника происхождения объекта в компоненте УРБД предусмотрена специализированная функция языка 1С 7.7:

ИБСозданияОбъекта(<Объект>) (англоязычный синоним: ObjectCreationIB)

В качестве параметра <Объект> передается ссылка на объект метаданных (например, элемент справочника или документ). Функция возвращает трехсимвольную строку, представляющую собой трехзначный код (идентификатор) информационной базы, в которой объект был физически записан впервые.

Рассмотрим пример использования данной функции в коде:


КодБазы = ИБСозданияОбъекта(ТекущийДокумент());
Если ПустаяСтрока(КодБазы) = 0 Тогда
    Сообщить("Документ создан в ИБ с кодом: " + КодБазы);
Иначе
    Сообщить("Не удалось определить базу создания объекта.");
КонецЕсли;

Связанные функции компоненты УРБД

Для реализации логики миграции и обработки данных в распределенной среде полезно применять и другие методы компоненты DistrDB.dll:

  1. ТекущаяИБКод() (CurrentIBCode) — возвращает 3-символьный код информационной базы, в которой выполняется код в данный момент.
  2. ЭтоПеренесенныйОбъект(<Объект>) (IsTransferredObject) — возвращает 1, если объект мигрировал из другой базы через обмен данными, или 0, если он был создан локально.
  3. ЦентральнаяИБ() (CentralIB) — позволяет узнать статус базы: возвращает 1 для центральной ИБ и 0 для периферийной.

Внутренний механизм идентификации и альтернативные способы

Проанализируем, как платформа 1С 7.7 хранит сведение о базе создания на физическом уровне. При включенном механизме УРБД внутренний идентификатор каждого нового объекта (в таблицах справочников SC*, заголовков документов DH* и общего журнала _1SJOURN) формируется как 9-символьная строка в 36-ричной системе счисления.

Последние три символа внутреннего идентификатора (DBSIGN) хранят код базы-источника. Это позволяет определить базу создания без вызова функции компоненты:

  1. Через встроенную функцию ЗначениеВСтрокуВнутр(): Разбрав внутреннее строковое представление объекта, можно извлечь код ИБ из соответствующей подстроки идентификатора.
  2. Прямым запросом к базе данных (SQL / DBF / 1С++): Считав значение поля ID (для справочников) или IDDOC (для документов), достаточно срезaть последние три символа полученной строки.

Ограничения и особенности работы

Выясним важные нюансы, о которых следует помнить при программировании:

  1. Функция ИБСозданияОбъекта() и сопутствующие методы доступны только при установленной и зарегистрированной компоненте УРБД (файл DistrDB.dll).
  2. Для объектов, созданных до перевода базы в режим распределенной ИБ или до присвоения трехзначного кода ИБ, функция вернет пустую строку (внутренний идентификатор объекта содержит пробелы на месте кода базы).
  3. Определить место создания еще не записанного (нового) объекта в памяти невозможно — идентификатор формируется только в момент первой записи в базу данных.
← На главную