Имя: Пароль:
1C
1С v8
Запрос. Как передать результат одного запроса в другой
0 Wefast
 
25.06.15
09:29
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    Запрос2 = Новый Запрос;
    Запрос2.УстановитьПараметр("ИсхТаблица", РезультатЗапроса);
    Запрос2.УстановитьПараметр("Ссылка", Объект.СсылкаНаОбъкт);
    Запрос2.Текст =
        "ВЫБРАТЬ
        |    ИсхТаблица.ИспользуетсяАвтовыбор,
        |    ИсхТаблица.КлючСвязиПродукция КАК КлючСвязиПродукция
        |ПОМЕСТИТЬ ВТ_1
        |ИЗ
        |    &ИсхТаблица КАК ИсхТаблица
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_1.ИспользуетсяАвтовыбор,
        |    ВТ_1.КлючСвязиПродукция
        |ИЗ
        |    ВТ_1 КАК ВТ_1";
    
    РезультатЗапроса2 = Запрос2.Выполнить().Выгрузить();



{Форма.Форма.Форма(86)}: Ошибка при вызове метода контекста (Выполнить)
    РезультатЗапроса2 = Запрос2.Выполнить().Выгрузить();
по причине:
{(3, 2)}: Тип не может быть выбран в запросе
<<?>>ИсхТаблица.КлючСвязиПродукция КАК КлючСвязиПродукция
1 Mirnin
 
25.06.15
09:38
Типизируй колонки - задай тип для КлючСвязиПродукция.
2 palpetrovich
 
25.06.15
09:40
покажи первый Запрос
3 Timon1405
 
25.06.15
09:40
(0) вообще, для этого есть МенеджерВременныхТаблиц
4 Wefast
 
25.06.15
09:41
(1) Если ставлю тип полям - он не сохраняется.
(3) Результат первого запроса я использую еще в другом месте
(2)
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказНаПроизводствоМатериалыИУслуги.Ссылка,
        |    ЗаказНаПроизводствоМатериалыИУслуги.НомерСтроки,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Этап,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Склад,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатьяКалькуляции,
        |    ВЫБОР
        |        КОГДА АналогиВПроизводствеСрезПоследних.Аналог <> NULL
        |            ТОГДА 0
        |        ИНАЧЕ ЗаказНаПроизводствоМатериалыИУслуги.ИспользуетсяАвтовыбор
        |    КОНЕЦ КАК ИспользуетсяАвтовыбор,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СведенияАвтовыбора,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ПрименениеМатериала,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ПроизводитсяВПроцессе,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СпецификацияПолуфабриката,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ВариантОбеспечения,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ДатаПотребности,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ЗаказатьНаСклад,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязи,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиПродукция,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиЭтапы,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиСпецификация,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Запланировать,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатусУказанияСерий,
        |    ЗаказНаПроизводствоМатериалыИУслуги.УказыватьСерии,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Серия,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КодСтроки,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатусУказанияСерийОтправитель,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатусУказанияСерийПолучатель,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Подразделение,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиЭтапыСтрока,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.Аналог, ЗаказНаПроизводствоМатериалыИУслуги.Номенклатура) КАК Номенклатура,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.ХарактеристикаАналога, ЗаказНаПроизводствоМатериалыИУслуги.Характеристика) КАК Характеристика,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.УпаковкаАналога, ЗаказНаПроизводствоМатериалыИУслуги.Упаковка) КАК Упаковка,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.КоличествоАналога, ЗаказНаПроизводствоМатериалыИУслуги.Количество) КАК Количество,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.КоличествоУпаковокАналога, ЗаказНаПроизводствоМатериалыИУслуги.КоличествоУпаковок) КАК КоличествоУпаковок
        |ИЗ
        |    Документ.ЗаказНаПроизводство.МатериалыИУслуги КАК ЗаказНаПроизводствоМатериалыИУслуги
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналогиВПроизводстве.СрезПоследних(&дата, ) КАК АналогиВПроизводствеСрезПоследних
        |        ПО ЗаказНаПроизводствоМатериалыИУслуги.Номенклатура = АналогиВПроизводствеСрезПоследних.Материал
        |ГДЕ
        |    ЗаказНаПроизводствоМатериалыИУслуги.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("дата", ТекущаяДата());
    Запрос.УстановитьПараметр("Ссылка",Объект.СсылкаНаОбъкт);
5 Рэйв
 
25.06.15
09:43
(4)Составные типы помоему в вт не ходят
6 Wefast
 
25.06.15
09:44
В общем задача такова если попроще.
Есть мышка и клавиатура со спецификациями в ТЧ1
А есть их спецификации в ТЧ2
И связать получится только ключом.

Я меняю номенклатуру в ТЧ2 и делаю подмену

Но мне нужно понять спецификацию какой номенклатуры из ТЧ1 я изменил.
7 patria0muerte
 
25.06.15
09:44
Для первого запроса:
1) Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц
2) Запрос помещаешь в ВТЗаказНаПроизводство.

Во втором запросе
ЗАпрос2 = Новый ЗАпрос;
Запрос2.менеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;

И в запросе2 уже обращаешься к нужной ВТ...

А вообще чего ты в один запрос все не положишь? ТАм бы уже нужных ВТ наплодил, да по пакетам распихал бы...
8 Timon1405
 
25.06.15
09:47
(5) +1 Если уж так нужен дальше "результат первого запроса", выберите в нем конце все поля из последней ВТ в запросе, у вам будет и результат и последняя ВТ в менеджере
9 patria0muerte
 
25.06.15
09:49
(4) Так ты сделай пакетами. Если по твоему примеру брать - то у тебя два пакета на выходе будет:
1) тот который "Результат первого запроса я использую еще в другом месте "
2) и то, что тебе нужно по сабжу

А табличку свою корневую в ВТ прям в запросе положь
10 Wefast
 
25.06.15
09:49
(5) Я же передаю Ключ и булево значение. Нет там составного типа данных.

(7) Т.е. в первом запросе я помещаю ее во временную таблицу. Пишу Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц

Пишу перед вторым запросом Запрос2.менеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;

И у меня во втором запросе становятся доступны все временные таблицы из первого запроса?


А вот работать с несколькими пакетами мне не приходилось.
11 patria0muerte
 
25.06.15
09:54
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказНаПроизводствоМатериалыИУслуги.Ссылка,
        |    ЗаказНаПроизводствоМатериалыИУслуги.НомерСтроки,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Этап,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Склад,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатьяКалькуляции,
        |    ВЫБОР
        |        КОГДА АналогиВПроизводствеСрезПоследних.Аналог <> NULL
        |            ТОГДА 0
        |        ИНАЧЕ ЗаказНаПроизводствоМатериалыИУслуги.ИспользуетсяАвтовыбор
        |    КОНЕЦ КАК ИспользуетсяАвтовыбор,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СведенияАвтовыбора,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ПрименениеМатериала,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ПроизводитсяВПроцессе,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СпецификацияПолуфабриката,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ВариантОбеспечения,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ДатаПотребности,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ЗаказатьНаСклад,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязи,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиПродукция,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиЭтапы,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиСпецификация,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Запланировать,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатусУказанияСерий,
        |    ЗаказНаПроизводствоМатериалыИУслуги.УказыватьСерии,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Серия,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КодСтроки,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатусУказанияСерийОтправитель,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатусУказанияСерийПолучатель,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Подразделение,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиЭтапыСтрока,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.Аналог, ЗаказНаПроизводствоМатериалыИУслуги.Номенклатура) КАК Номенклатура,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.ХарактеристикаАналога, ЗаказНаПроизводствоМатериалыИУслуги.Характеристика) КАК Характеристика,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.УпаковкаАналога, ЗаказНаПроизводствоМатериалыИУслуги.Упаковка) КАК Упаковка,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.КоличествоАналога, ЗаказНаПроизводствоМатериалыИУслуги.Количество) КАК Количество,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.КоличествоУпаковокАналога, ЗаказНаПроизводствоМатериалыИУслуги.КоличествоУпаковок) КАК КоличествоУпаковок
        |    ПОМЕСТИТЬ ВТЗаказНаПроизводство
        |ИЗ
        |    Документ.ЗаказНаПроизводство.МатериалыИУслуги КАК ЗаказНаПроизводствоМатериалыИУслуги
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналогиВПроизводстве.СрезПоследних(&дата, ) КАК АналогиВПроизводствеСрезПоследних
        |        ПО ЗаказНаПроизводствоМатериалыИУслуги.Номенклатура = АналогиВПроизводствеСрезПоследних.Материал
        |ГДЕ
        |    ЗаказНаПроизводствоМатериалыИУслуги.Ссылка = &Ссылка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ * ИЗ ВТЗаказНаПроизводство
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТЗаказНаПроизводство.ИспользуетсяАвтовыбор,
        |    ВТЗаказНаПроизводство.КлючСвязиПродукция
        |ИЗ
        |    ВВТЗаказНаПроизводство КАК ВТЗаказНаПроизводство";
    
    Запрос.УстановитьПараметр("дата", ТекущаяДата());
    Запрос.УстановитьПараметр("Ссылка",Объект.СсылкаНаОбъкт);

МассивРезультатовЗапроса = Запрос.ВыполнитьПакет();
РезультатЗапроса1 = МассивРезультатовЗапроса[1]; ///тут то, что у тебя в первом запросе
РезультатЗапроса2 = МассивРезультатовЗапроса[2]; /// тут то, что искал по сабжу..
12 Wefast
 
25.06.15
09:58
(11) Спасибо.
13 patria0muerte
 
25.06.15
09:58
(10) Да, так и есть... но если тебе нужен потом будет еще первый запрос, то тебе нужно будет его из той ВТ еще запросом достать...