Имя: Пароль:
1C
1С v8
Как построить запрос с условием к другой базе
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
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));
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.