|
Как построить запрос с условием к другой базе | ☑ | ||
---|---|---|---|---|
0
DSSS
16.02.12
✎
14:24
|
Доброго дня.
Задача для 8.2 Есть ИБ1 со справочником Номенклатура и ИБ2 со справочником Товары. Данные мигрируют из ИБ1 в ИБ2 через обработку обмена данными, в правилах настроена конвертация справочника Номенклатура в справочник Товары. Синхронизация по уникальному идентификатору. Подскажите, кто в курсе, как сделать следующее: получить, находясь в ИБ2, запросом данные о номенклатуре из ИБ1, но с условием, что номенклатура из ИБ1 в списке, который содержит элементы справочника Товары ИБ2? Можно так: синхронизировать справочники, например, по коду, а затем поставить в запросе условие Номенклатура.код в &СписокКодов, а СписокКодов заполнить кодами из ИБ2. А можно как-то обойтись без этого? может подскажите более интересные варианты. Цель выполнения этого запроса - нарисовать отчет. Еще очень хотелось бы нарисовать этот отчет, используя СКД. Не подскажите, как сделать такое на СКД, если это возможно? Спасибо. |
|||
1
DSSS
16.02.12
✎
14:42
|
Хотя наверное можно поставить условие Номенклатура в &Товары, а &Товары заполнить из ИБ1 по уникальному удентификатору.
|
|||
2
Kashemir
16.02.12
✎
14:50
|
(1) Ясно дело что условие надо накладывать в тех значениях типах, которые соответствуют контексту выполнения
|
|||
3
Kashemir
16.02.12
✎
14:55
|
(0) По поводу интересных вариантов - самый очевидный - комсоединение в удаленную базу, выполнение отчета в ее контексте, заворачивание результатов через XTDO в хмл и выводи себе где хочешь
|
|||
4
Vladal
16.02.12
✎
14:58
|
(3) Я делал проще. Выполнял запрос по кому в подключаемой базе, потом в рабочей базе обрабатывал тот результат.
|
|||
5
Vladal
16.02.12
✎
14:59
|
Хотя (3) универсальнее.
|
|||
6
DSSS
16.02.12
✎
15:03
|
(3) Спасибо.
>> заворачивание результатов через XTDO в хмл и выводи себе где хочешь я могу в моем примере сделать запрос из ИБ2 к ИБ1, получить результат в формате ИБ1, а представить его в формате ИБ2? правила ИБ1 в ИБ2 есть. (4) Может тормозить.. Если первоначальная выборка 10 тыс. элементов, то в конечном результате после отбора может быть только 10. |
|||
7
Kashemir
16.02.12
✎
15:04
|
(6) Неа, придется ручками конвертировать
|
|||
8
DSSS
16.02.12
✎
15:08
|
(7) Не совсем представляю правильную последовательность действий..
1. Получение условия в формате ИБ1. 2. Запрос к ИБ1 из ИБ2. 3. в ИБ2 конвертация результата в формат ИБ2 с помощью правил обмена 4. Представление результата в ИБ2. Так? |
|||
9
vmv
16.02.12
✎
15:11
|
строить синхронизацию по коду/номеру - ущербный путь.
надо использовать ГУИды |
|||
10
vmv
16.02.12
✎
15:12
|
(3) - прав. это все и баста
|
|||
11
Kashemir
16.02.12
✎
15:19
|
(8) Ну если прям хочется обратно Я бы сделал так.
1. ИБ1 Конвертнул значения условий к значениям базы ИБ2 - если есть ГУИД - это плевое дело. 2. Создаем Комсоединение к ИБ2, создаем в ее контексте схему. 3. Проходимся по настройкам - выбираем все используемые поля и на их базе фигачим упрощенную настройку с единственной детальной группировкой и всеми используемыми полями. 4. Результаты выполнения схемы на ИБ2 выгружаем в таблицу (если у схемы несколько наборов - могут быть проблемы с пунктом 3) 5. Через сериализатор достаем таблицу на сторону ИБ1. Проходимся по значениям таблицы и конвертим их к ИБ1. 6. Берем исходную схему с первично заданными настройки, заменяем источники данных на данные детальной таблицы (таблиц) 7. Вуаля - выводим. Однако это путь ненадежен и будет работать далеко не всегда, допустим при сложных настройках в таблицах могут появится одноименные колонки, несколько наборов данных могут запросто доставить, сложные настройки табличного типа (вертикальные группировки) попросту не способны вывестись средствами скд в табличном виде и прочее. Советую дальше (3) не идти - проблем не оберешся. Либо хотя бы очень жестко привязать пользователя к настройкам. |
|||
12
DSSS
16.02.12
✎
15:30
|
(11)
Спасибо тебе! Наверное еще можно создать схему в ИБ2 (там где рисуется отчет) через внешний источник данных и заполнить его данными, полученными от ИБ1. но опять же фильтроваться эта таблица будет после выполнения всего запроса. >> Проходимся по значениям таблицы и конвертим их к ИБ1. В любом случае, получается, что без перебора не обойтись. |
|||
13
Kashemir
16.02.12
✎
15:31
|
(12) Почему после ? Фильтруй до
|
|||
14
DSSS
16.02.12
✎
15:37
|
(13) Можешь дать пример, если есть... что-то уже запутался..
Ты имеешь в виду поставить условие на запрос к ИБ1, находясь в ИБ2, конвертируя каждое значение условия? т.е. если условие &Товары, то нужно конвертировать каждое значение этого списка используя правила? Так? |
|||
15
Kashemir
16.02.12
✎
15:38
|
(14) Давай мыло - примерчик пришлю
|
|||
16
Kashemir
16.02.12
✎
15:40
|
(14) Ну да - хотя имея строковый ИД можно и без правил на стороне ИБ2 получить
|
|||
17
DSSS
16.02.12
✎
15:40
|
(15)
[email protected] |
|||
18
Kashemir
16.02.12
✎
15:47
|
(17) Выслал - адаптируй к своей конфе и можно использовать как каркасную.
|
|||
19
DSSS
16.02.12
✎
15:49
|
(18)
Спасибо тебе! |
|||
20
Kashemir
16.02.12
✎
15:50
|
(19) Да не вопрос :)
|
|||
21
Kashemir
16.02.12
✎
16:22
|
+(14) Пример получения ссылки по ИД
// СоединениеСБД - ранее открытое ком соединение ИДНоменклатурыБазыБД1 = "83d0e83d-a6ca-11dd-8f72-001c23dc29dd"; СоединениеСБД.Catalogs["Номенклатура"].GetRef(СоединениеСБД.NewObject("UUID", ИДНоменклатурыБазыБД1)); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |