Как добавить описание методов УРБД в синтакс-помощник 1С 7.7 и настроить распределенную базу данных

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

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

Почему методы УРБД не отображаются по умолчанию?

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

Как расширить синтакс-помощник с помощью ALS-файлов

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

  1. Выясним имя нужного файла. Официальный файл описания синтаксиса распределенных баз от компании 1С называется distrib.als. В кругах разработчиков также часто встречаются его копии или модификации под именами urbd.als или rbd.als.
  2. Найдем или скачаем этот файл (ссылки на специализированные архивы файлов синтаксиса часто публикуются на профильных форумах разработчиков 1С 7.7).
  3. Закроем все запущенные сессии Конфигуратора и Предприятия 1С 7.7.
  4. Скопируем скачанный файл (например, distrib.als) в каталог BIN установленной платформы (обычно он располагается по пути вида C:\Program Files (x86)\1Cv77\BIN\).
  5. Запустим Конфигуратор заново. Теперь в синтакс-помощнике на вкладке "Встроенный язык" появится полноценный раздел с описанием функций автообмена.

Полный справочник методов УРБД в 1С 7.7

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

1. Функции определения статуса текущей информационной базы:

2. Определение происхождения объектов:

3. Метод управления авторегистрацией изменений:

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


Процедура ИзменитьБезВыгрузки(ВыбДокумент)
    Док = СоздатьОбъект("Документ");
    Док.НайтиДокумент(ВыбДокумент);
    
    // Блокируем объект перед изменением
    Док.Блокировка(1);
    
    // Отключаем регистрацию изменений для этого сеанса записи
    Док.РегистрацияИзменений(0);
    
    // Вносим изменения в реквизиты
    Док.Комментарий = "Служебная корректировка без обмена";
    
    // Записываем документ
    Док.Записать();
    
    // Снимаем блокировку
    Док.Блокировка(0);
КонецПроцедуры

Важное правило использования метода: действие вызова РегистрацияИзменений(0) распространяется исключительно на один последующий вызов метода Записать() текущего позиционированного объекта. Если вы перепозиционируете объект или выберете другой элемент, режим сбросится в исходное состояние (авторегистрация включена).

Библиотека DistrDB.dll и хитрости ее установки

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

Если в вашем каталоге BIN отсутствует файл DistrDB.dll, создайте в этой папке пустой текстовый файл, переименуйте его в DistrDB.dll, а затем запустите процесс восстановления (Repair) или переустановки платформы 1С 7.7 из оригинального дистрибутива. Установщик обнаружит "поврежденный" (нулевого размера) файл библиотеки и автоматически перезапишет его полноценной рабочей версией из состава дистрибутива.

Внутреннее устройство УРБД: базы данных под капотом

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

  1. 1sdbset.dbf (на SQL-сервере — таблица _1SDBSET) — содержит перечень всех информационных баз, входящих в данное распределенное пространство, включая их коды, наименования и глобальные уникальные GUID-идентификаторы.
  2. 1sdwnlds.dbf (на SQL-сервере — таблица _1SDWNLDS) — содержит историю загрузок пакетов и номера ожидаемых и полученных сообщений обмена для контроля транзакционной целостности.
  3. 1supdts.dbf (на SQL-сервере — таблица _1SUPDTS) — центральная таблица регистрации изменений. Сюда записываются ссылки на все измененные объекты конфигурации и данных, которые должны быть отправлены в периферийные базы. В полях таблицы фиксируются тип объекта, его внутренний идентификатор (ID) и код базы-получателя.

Практические приемы оптимизации и обход ограничений

Штатные механизмы 1С 7.7 не предоставляют разработчику гибких инструментов для массового управления регистрацией изменений. Например, в платформе отсутствует аналог метода "ЗарегистрироватьИзменения" для целого класса объектов, который появился только в 1С 8. Если требуется выгрузить, к примеру, весь справочник "Номенклатура" на новую периферийную точку, стандартными средствами пришлось бы перезаписывать каждый элемент в цикле, что вызовет колоссальные транзакционные блокировки таблиц базы данных и займет часы работы.

Для обхода этого ограничения разработчики используют прямые SQL-запросы (в случае работы на MS SQL) или прямое низкоуровневое редактирование DBF-файла таблицы 1supdts.dbf. Запись напрямую в таблицу регистрации изменений позволяет мгновенно поставить любой объем данных в очередь на выгрузку без физического изменения и перезаписи самих объектов. Это предотвращает блокировки таблиц документов и справочников и экономит колоссальное количество времени администратора.

Полная деинсталляция («отвязка») УРБД от информационной базы

Рано или поздно филиальная структура может измениться. Если перед вами стоит задача превратить базу данных, которая ранее функционировала как периферийная или центральная в распределенной структуре, в обычную локальную или сетевую информационную базу (например, для объединения баз или перехода на базовую версию платформы), Конфигуратор не позволит сделать это штатно. Нам потребуется провести ручную процедуру очистки ("отвязки") базы от признаков распределенности.

Рассмотрим по шагам безопасный алгоритм деинсталляции УРБД:

  1. Создайте полную резервную копию информационной базы данных! Любые ручные манипуляции с системными таблицами несут риск повреждения структуры базы.
  2. Перейдите в каталог базы данных (для DBF-версии) и полностью удалите физические файлы служебных таблиц автообмена вместе с их индексами:
    • 1sdbset.dbf и 1sdbset.cdx
    • 1sdwnlds.dbf и 1sdwnlds.cdx
    • 1supdts.dbf и 1supdts.cdx
    В случае использования SQL-версии базы данных эти таблицы необходимо аккуратно очистить или удалить с помощью SQL-скриптов в среде SQL Server Management Studio.
  3. Откройте файл настроек системы 1ssystem.dbf (в SQL-версии — таблица _1SSYSTEM) с помощью специализированного редактора DBF-таблиц.
  4. Найдите в таблице единственную строку данных. Проанализируйте поля этой строки: нас интересуют поля DBSIGN (код текущей базы в распределенной структуре) и DBSETUUID (уникальный идентификатор распределенного пространства). Очистите значения в этих полях (сделайте их пустыми).
  5. Сохраните изменения в файле 1ssystem.dbf.
  6. Запустите Конфигуратор 1С 7.7. Внесите любое незначительное изменение в структуру или свойства конфигурации (например, добавьте или удалите пробел в поле комментария любого справочника) и сохраните конфигурацию (нажмите клавишу F7 для реструктуризации).

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

← На главную