Имя: Пароль:
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) Да, так и есть... но если тебе нужен потом будет еще первый запрос, то тебе нужно будет его из той ВТ еще запросом достать...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn