Имя: Пароль:
1C
1С v8
Как сделать запросом
0 Borteg
 
16.09.13
16:47
Добрый день. Есть таблица значений с колонками ИНН, НомерДоговора, КодАгента
Есть запрос, который по этим данным находит контрагента и договор в базе.
"ВЫБРАТЬ
                |    ВЫБОР
                |        КОГДА ЕСТЬNULL(ВложенныйЗапрос._1, 0) <> 0
                |            ТОГДА ВложенныйЗапрос._1
                |        ИНАЧЕ ВЫБОР
                |                КОГДА ЕСТЬNULL(ВложенныйЗапрос._2, 0) <> 0
                |                    ТОГДА ВложенныйЗапрос._2
                |                ИНАЧЕ ВЫБОР
                |                        КОГДА ЕСТЬNULL(ВложенныйЗапрос._3, 0) <> 0
                |                            ТОГДА ВложенныйЗапрос._3
                |                    КОНЕЦ
                |            КОНЕЦ
                |    КОНЕЦ КАК Договор,
                |    ВложенныйЗапрос.Приоритет
                |ПОМЕСТИТЬ ОбединенныеДоговора
                |ИЗ
                |    (ВЫБРАТЬ
                |        МАКСИМУМ(ДоговорыКонтрагентов.Ссылка) КАК _1,
                |        NULL КАК _2,
                |        NULL КАК _3,
                |        1 КАК Приоритет
                |    ИЗ
                |        Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
                |    ГДЕ
                |        ДоговорыКонтрагентов.Владелец.ИНН = &ИНН
                |        И ДоговорыКонтрагентов.Владелец.КодАгента = &КодАгента
                |        И ДоговорыКонтрагентов.Номер = &Номер
                |    
                |    ОБЪЕДИНИТЬ ВСЕ
                |    
                |    ВЫБРАТЬ
                |        NULL,
                |        МАКСИМУМ(ДоговорыКонтрагентов.Ссылка),
                |        NULL,
                |        2
                |    ИЗ
                |        Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
                |    ГДЕ
                |        ДоговорыКонтрагентов.Владелец.ИНН = &ИНН
                |        И ДоговорыКонтрагентов.Номер = &Номер
                |    
                |    ОБЪЕДИНИТЬ ВСЕ
                |    
                |    ВЫБРАТЬ
                |        NULL,
                |        NULL,
                |        МАКСИМУМ(ДоговорыКонтрагентов.Ссылка),
                |        3
                |    ИЗ
                |        Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
                |    ГДЕ
                |        ДоговорыКонтрагентов.Владелец.ИНН = &ИНН
                |        И ДоговорыКонтрагентов.Владелец.Наименование ПОДОБНО ""%"" + ""(авиа)"" + ""%"") КАК ВложенныйЗапрос
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
                |    ОбединенныеДоговора.Договор КАК ДоговорИскомый,
                |    ОбединенныеДоговора.Приоритет КАК ПриоритетИскомогоДоговора
                |ИЗ
                |    ОбединенныеДоговора КАК ОбединенныеДоговора
                |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОбединенныеДоговора КАК ОбединенныеДоговораДляСоединенияСсобой
                |        ПО ОбединенныеДоговора.Договор = ОбединенныеДоговораДляСоединенияСсобой.Договор";

Сейчас я обхожу таблицу значений. И для каждого значения делаю запрос. А как можно одним запросом сделать?
Я поместил Таблицу значений в ВТ. Никак не могу понять теперь как в этом же запросе сделать запрос по данным ВТ и сразу же получить искомую таблицу(Кодагент,ИНН,НомерДоговора,найденныйКонтрагент,найденный договор.
1 Чайник Рассела
 
16.09.13
16:49
ТЗ в запрос и левое соединение. Правда не совсем кошерно.
2 Borteg
 
16.09.13
16:51
(1) Тз в запросе, но у меня сейчас там устанавливаются параметры              |        ДоговорыКонтрагентов.Владелец.ИНН = &ИНН
                |        И ДоговорыКонтрагентов.Владелец.КодАгента = &КодАгента
                |        И ДоговорыКонтрагентов.Номер = &Номер
Как эти параметры прям из Вт и тянуть?
3 scanduta
 
16.09.13
16:54
ответ в (1)
4 unregistered
 
16.09.13
17:15
Что-то вроде (упрощенный вариант):

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТЗ", ТЗ);
Запрос.Текст =
"ВЫБРАТЬ
|   ТЗ.ИНН,
|   ТЗ.КодАгента,
|   ТЗ.НомерДоговора
| ПОМЕСТИТЬ ВремТЗ
| ИЗ
|   &ТЗ КАК ТЗ
|;
|//////////////////////////////////////////////////////////
|ВЫБРАТЬ
|  ДоговорыКонтрагентов.Владелец КАК Контрагент,
|  МАКСИМУМ(ДоговорыКонтрагентов.Ссылка) КАК Договор
|ИЗ
|  ВремТЗ КАК ВремТЗ
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|  ПО ВремТЗ.ИНН = ДоговорыКонтрагентов.Владелец.ИНН
|  И ВремТЗ.КодАгента = ДоговорыКонтрагентов.Владелец.КодАгента
|  И ВремТЗ.НомерДоговора = ДоговорыКонтрагентов.Номер
|СГРУППИРОВАТЬ ПО
|  ДоговорыКонтрагентов.Владелец";
5 Heckfy
 
16.09.13
17:18
ТЗ в Массив. ЗАпрос с условием вСписке (то бишь в массиве) :)
6 c00Lo
 
16.09.13
17:20
зашибись договор контрагента максимум выбирать...
7 unregistered
 
16.09.13
17:32
(6) >>  договор контрагента максимум выбирать...

Такое решение принято в (0).
Коряво конечно, но иногда имеет право на жизнь...
8 aexeel
 
16.09.13
17:44
В исходном примере МАКСИМУМ не обоснован. Вместо него лучше использовать ПЕРВЫЕ 1.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн