Как это работает?
Лучше увидеть. Демонстрация на видео - соединение организаций баз данных по их ссылкам. Заранее знаем, что некоторые организации в базу Б были перенесены ранее из базы А:
Внутренние процессы, происходившие при действиях в видео, легче понять по схеме:
Вас интересует самое необычное - как переносится ссылка на объект? Смотрим схему преобразования:
По схеме видно, что ссылка на объект внешней базы данных преобразуется в ссылку локальной базы, если есть сопоставление метаданных или имена объектов метаданных в информационных базах одинаковые. Преобразование простое - средствами 1С создается ссылка на объект информационной базы. Существует ли объект по этой ссылке - мы уже видим в результате запроса или в результате соединения таблиц.
А что если сопоставление не выполнено пользователем и имена объектов метаданных разные? Например, нужно сравнить справочники "Контрагенты" и "Клиенты". Передать же из одной базы данных в другую при этом что-то нужно. Для этого я сделал текстовое представление ссылки, удобное для восприятия. Представление состоит из трех частей - источника ссылки, имени объекта метаданных и уникальный идентификатор ссылки:
Ext:::Справочник.Клиенты:::6daa4786-ae81-11ec-abee-00e04c362ccc
Преобразование ссылок лучше видно на примере работы с параметрами запроса:
То, что мы видим как "<Объект не найден> (37:ac4600e04c362ccc11ecfdb3a32b1108)" - является полноценной ссылкой в базе данных на какой то объект (который не существует). Это значит, что мы можем использовать эту ссылку в запросе - при соединении таблиц, в условиях запроса и т.д.
Когда это нужно?
• Пример: обмен данными между базами был, но перестал работать на длительное время. Из за этого между базами появилась рассинхронизация данных, так как создавались справочники или документы в обоих базах. Обработка покажет списком созданные и измененные элементы из обоих информационных баз.
• Между действующими базами А и Б требуется настроить обмен, но ранее часть данных одной информационной базы унаследована из второй базы - например, база Б является копией базы А в далеком прошлом. В таком случае консоль запросов поможет разобраться, какие ссылки есть в обоих базах и не изменили своего логического значения (например, не переименованы), а каких ссылок вовсе нету.
• Трудно отладить кривой обмен данными, элементы пропадают, замещаются или дублируются (например, из за поиска по уникальному идентификатору). Обработка поможет сразу найти разные элементы с одинаковыми уникальными идентификаторами.
• Без использования ссылок на объекты консоль запросов поможет выполнить сравнение большого количества данных по значениям реквизитов примитивных типов - например, по номеру и дате документа.
• Не обязательно справочники сравнивать только со справочниками - бывает так, что требуется проверить данные при преобразовании одной структуры данных в другую, например - справочников в документы или регистры сведений.
Установка и использование
1. Если используете расширение - включаете расширение как обычно. Пользователю нужно добавить роль "Запр_ОсновнаяРоль" из расширения.
ВНИМАНИЕ Разные конфигурации имеют разные режимы совместимости, поэтому свойства совместимости расширения необходимо отредактировать, если оно не подключается.
2. Разницы нету, как запускать обработку - из файла или встроенную в расширение. Обработка одна и та же, в программном коде происходит определение способа работы автоматически.
3. Для подключения к внешней информационной базе необходима зарегистрированная в операционной системе компонента com-коннектора 1С (сама компонента находится в папке с платформой).
4. Параметры подключения к внешней базе задаются через кнопку "Параметры подключения".
5. Для получения таблицы данных из одной базы в другой помещайте полученную запросом таблицу в менеджер временных таблиц.
6. Работа с языком запроса 1С Предприятия никак не изменилась - используйте консоль запросов так, пользовались ей всегда.
Дополнительная информация
• Логика в обработке отзеркалена, поэтому все операции можно выполнять как из локальной во внешнюю, так и во внешней в локальную базу данных.
• Расширение нужно для того, чтобы COM-объект с подключением к внешней базе не создавался каждый раз при выполнении запроса. Обработка из расширения работает как самостоятельно, так и с подключенным расширением.
•Подключать расширение во внешней информационной базе не нужно - все что требуется от внешней базы данных - чтобы пользователь, через которого мы подключаемся, имел необходимые права. А вот в той базе, где требуется использование обработки, пользователю нужно добавить роль из расширения - иначе подсистема расширения не будет видна.
Тестировалось на платформе 8.3.20.1549 (x64), но будет работать и на более ранних версиях, т.к. в расширении и обработке ничего из нового функционала платформы не используется.
Внимание!
Тем, кто скачивает обработку, а не расширение: добавьте самостоятельно общий модуль. Это значительно ускорит работу обработки. При выполнении запроса каждый раз создается новый экземпляр соединения. Это занимает 1-2 секунды. С общим же модулем соединение с внешним источником остается одно и тоже, его не нужно создавать каждый раз.
Функция ПолучитьСоединениеСВнешнимИсточником(ВерсияCOMКоннектора, ПараметрыПодключенияИБ) Экспорт
COMКоннектор = Новый COMОбъект(ВерсияCOMКоннектора);
Возврат COMКоннектор.Connect(ПараметрыПодключенияИБ);
КонецФункции
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.151.27