Консоль запросов к двум базам (общий менеджер временных таблиц)

4 комментария 307 07.12.2022
Позволяет выполнять запросы к двум информационным базам, используя при этом общий менеджер временных таблиц. Ссылки информационных баз преобразовываются так, будто они находятся в одной базе 1С.
Стоимость решения
от 2 000 руб.
Решение подходит для платформ:
8.2, 8.3
Данное решение подходит для следующих конфигураций:
ERP. Управление предприятием 2
ERP. Управление холдингом
Архив
Бухгалтерия 2.0
Бухгалтерия 3.0
Бухгалтерия государственного учреждения
Договоры
Документооборот
Зарплата и управление персоналом
Комплексная автоматизация 1.1
Комплексная автоматизация 2.0
Платежные документы
Розница
Управление нашей фирмой
Управление производственным предприятием 1.3
Управление торговлей (ред. 10.3)
Управление торговлей (ред. 11)
Управление холдингом
Адаптация
Данное решение может быть адаптировано под ваши задачи или конфигурацию 1С
Код решения
Полностью открыт
Скриншоты
Описание решения

Как это работает?

Лучше увидеть. Демонстрация на видео - соединение организаций баз данных по их ссылкам. Заранее знаем, что некоторые организации в базу Б были перенесены ранее из базы А:


Внутренние процессы, происходившие при действиях в видео, легче понять по схеме:

Вас интересует самое необычное - как переносится ссылка на объект?

Смотрим схему преобразования:

По схеме видно, что ссылка на объект внешней базы данных преобразуется в ссылку локальной базы, если есть сопоставление метаданных или имена объектов метаданных в информационных базах одинаковые. Преобразование простое - средствами 1С создается ссылка на объект информационной базы. Существует ли объект по этой ссылке - мы уже видим в результате запроса или в результате соединения таблиц.

А что если сопоставление не выполнено пользователем и имена объектов метаданных разные?

Например, нужно сравнить справочники "Контрагенты" и "Клиенты". Передать же из одной базы данных в другую при этом что-то нужно. Для этого я сделал текстовое представление ссылки, удобное для восприятия. Представление состоит из трех частей - источника ссылки, имени объекта метаданных и уникальный идентификатор ссылки:

Ext:::Справочник.Клиенты:::6daa4786-ae81-11ec-abee-00e04c362ccc

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


То, что мы видим как "<Объект не найден> (37:ac4600e04c362ccc11ecfdb3a32b1108)" - является полноценной ссылкой в базе данных на какой то объект (который не существует). Это значит, что мы можем использовать эту ссылку в запросе - при соединении таблиц, в условиях запроса и т.д.

Установка и использование

  1. Если используете расширение - включаете расширение как обычно. Пользователю нужно добавить роль "Запр_ОсновнаяРоль" из расширения.

    ВНИМАНИЕ! Разные конфигурации имеют разные режимы совместимости, поэтому свойства совместимости расширения необходимо отредактировать, если оно не подключается.
  2. Разницы нету, как запускать обработку - из файла или встроенную в расширение. Обработка одна и та же, в программном коде происходит определение способа работы автоматически.
  3. Для подключения к внешней информационной базе необходима зарегестрированная в операционной системе компонента com-коннектора 1С (сама компонента находится в папке с платформой, регистрация осуществляется через командную строку Windows).
  4. Параметры подключения к внешней базе задаются через кнопку "Параметры подключения".
  5. Для получения таблицы данных из одной базы в другой помещайте полученную запросом таблицу в менеджер временных таблиц.
  6. Работа с языком запроса 1С Предприятия никак не изменилась - используйте консоль запросов так, пользовались ей всегда.
Кому подойдет решение

Когда это нужно?

  • Пример: обмен данными между базами был, но перестал работать на длительное время. Из за этого между базами появилась рассинхронизация данных, так как создавались справочники или документы в обоих базах. Обработка покажет списком созданные и измененные элементы из обоих информационных баз.
  • Между действующими базами А и Б требуется настроить обмен, но ранее часть данных одной информационной базы унаследована из второй базы - например, база Б является копией базы А в далеком прошлом. В таком случае консоль запросов поможет разобраться, какие ссылки есть в обеих базах и не изменили своего логического значения (например, не переименованы), а каких ссылок вовсе нету.
  • Трудно отладить кривой обмен данными, элементы пропадают, замещаются или дублируются (например, из-за поиска по уникальному идентификатору). Обработка поможет сразу найти разные элементы с одинаковыми уникальными идентификаторами.
  • Без использования ссылок на объекты консоль запросов поможет выполнить сравнение большого количества данных по значениям реквизитов примитивных типов - например, по номеру и дате документа.
  • Не обязательно справочники сравнивать только со справочниками - бывает так, что требуется проверить данные при преобразовании одной структуры данных в другую, например - справочников в документы или регистры сведений.

Дополнительная информация

  • Логика в обработке отзеркалена, поэтому все операции можно выполнять как из локальной во внешнюю, так и во внешней в локальную базу данных.
  • Расширение нужно для того, чтобы COM-объект с подключением к внешней базе не создавался каждый раз при выполнении запроса. Обработка из расширения работает как самостоятельно, так и с подключенным расширением.
  • Подключать расширение во внешней информационной базе не нужно - все что требуется от внешней базы данных - чтобы пользователь, через которого мы подключаемся, имел необходимые права. А вот в той базе, где требуется использование обработки, пользователю нужно добавить роль из расширения - иначе подсистема расширения не будет видна.

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

Функционал

Внимание!

Тем, кто приобретает обработку, а не расширение: добавьте самостоятельно общий модуль. Это значительно ускорит работу обработки. При выполнении запроса каждый раз создается новый экземпляр соединения. Это занимает 1-2 секунды. С общим же модулем соединение с внешним источником остается одно и тоже, его не нужно создавать каждый раз.

Техподдержка
Без техподдержки
Комментарии (4)
Владислав Лебедев
11.01.2023 в 15:01
Прикольная штука. А на новой платформе будет работать?
Николай Волкотюк
12.01.2023 в 07:11
Владислав, разрабатывалась и использовалась на платформе 8.3.20.1549 (x64), но будет работать как на старых, так и на новых версиях, т.к. никакие специфические методы в обработке не используются.
Владислав Лебедев
13.01.2023 в 14:42
Николай, вы написали оказывается в статье. Простите, не заметил сразу. Возможно скоро понадобится, а то какая-то свистопляска с обменами сейчас. Но руководство еще думает.
Николай Волкотюк
14.01.2023 в 07:09
Владислав, эту обработку написал для себя тогда, когда нужно было восстановить обмен между УПП и БП, который встал почти на год. Усложняло условия работы то, что обе базы активно использовались, их нельзя было оторвать от производства или создать новый образ БД. К тому же, правила обмена были частично самописные, с ошибками поиска/замещения ссылок по уникальному идентификатору. Единственный выход был - создавать "золотой молоток" вместо кучи мелких обработок, связанных с анализом данных при обмене.

Для добавление комментария необходимо авторизоваться.

Вход | Регистрация