Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Ошибка с запросом          
Vofka Подменю пользователя
сообщение 06.09.10, 9:09
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Есть обработка:
//************
    ТЗ1=Новый ТаблицаЗначений();
    ТЗ1.Колонки.Добавить("А", Новый ОписаниеТипов("Строка"));
    ТЗ1.Колонки.Добавить("Б", Новый ОписаниеТипов("Строка"));
    ТЗ1.Колонки.Добавить("Кво", Новый ОписаниеТипов("Число"));
    Для Сч=0 По 100 Цикл
        Стр=ТЗ1.Добавить();
        Стр.А="А"+Сч;
        Стр.Б="Б"+Сч;
        Стр.Кво = 1;
    КонецЦикла;
    
    //************
    ТЗ2 = Новый ТаблицаЗначений();
    ТЗ2.Колонки.Добавить("А", Новый ОписаниеТипов("Строка"));
    ТЗ2.Колонки.Добавить("Б", Новый ОписаниеТипов("Строка"));
    ТЗ2.Колонки.Добавить("Кво", Новый ОписаниеТипов("Число"));
    Для Сч=0 По 100 Цикл
        Стр=ТЗ2.Добавить();
        Стр.А="А"+Сч;
        Стр.Б="Б"+Сч;
        Стр.Кво = 1;
    КонецЦикла;
    
    //************
    
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    *
    |ИЗ
    |(Выбрать
    |    Т1.А,
    |    Т1.Б,
    |    Т1.Кво
    |Из
    |    &Таб1 Как Т1
    |
    |ОБЪЕДИНИТЬ
    |
    |Выбрать
    |    Т2.А,
    |    Т2.Б,
    |    Т2.Кво
    |Из
    |    &Таб2 Как Т2)";
    
    Запрос.УстановитьПараметр("Таб1", ТЗ1);
    Запрос.УстановитьПараметр("Таб2", ТЗ2);
    ТИтог = Запрос.Выполнить().Выгрузить();


Жму "Выполнить", получаю ошибку:

Цитата
Ошибка при вызове метода контекста (Выполнить): Содержимое объекта данных может быть выбрано только во временную таблицу
ТИтог = Запрос.Выполнить().Выгрузить();
по причине:
Содержимое объекта данных может быть выбрано только во временную таблицу


Шо за беда? sad.gif

logist Подменю пользователя
сообщение 06.09.10, 10:01
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Подумайте в эту сторону:
Цитата(Vofka @ 06.09.10, 11:09) *
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
...


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Vofka Подменю пользователя
сообщение 06.09.10, 10:13
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    *
    |ПОМЕСТИТЬ ВТТаб
    |ИЗ
    |(Выбрать
    |    Т1.А,
    |    Т1.Б,
    |    Т1.Кво
    |Из
    |    &Таб1 Как Т1
    |
    |ОБЪЕДИНИТЬ
    |
    |Выбрать
    |    Т2.А,
    |    Т2.Б,
    |    Т2.Кво
    |Из
    |    &Таб2 Как Т2)";
    
    Запрос.УстановитьПараметр("Таб1", ТЗ1);
    Запрос.УстановитьПараметр("Таб2", ТЗ2);
    ТИтог = Запрос.Выполнить().Выгрузить();


Ошибка такая же.

logist Подменю пользователя
сообщение 06.09.10, 10:26
Сообщение #4

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Неее... думать в эту сторону это думать дальше, а не использовать одну строчку smile.gif
Я не силен в запросах, просто судя по ошибке надо использовать временные таблицы.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Vofka Подменю пользователя
сообщение 06.09.10, 10:39
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Пробую так:

Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    *
    |ПОМЕСТИТЬ ВТТаб
    |ИЗ
    |(Выбрать
    |    Т1.А,
    |    Т1.Б,
    |    Т1.Кво
    |Из
    |    &Таб1 Как Т1
    |
    |ОБЪЕДИНИТЬ
    |
    |Выбрать
    |    Т2.А,
    |    Т2.Б,
    |    Т2.Кво
    |Из
    |    &Таб2 Как Т2)";
    
    Запрос.УстановитьПараметр("Таб1", ТЗ1);
    Запрос.УстановитьПараметр("Таб2", ТЗ2);
    Запрос.Выполнить();    
    
    ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ ВТТаб");
    ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;
    ТЗИтоги=ЗапросТМП.Выполнить().Выгрузить();
    ТЗИтоги.ВыбратьСтроку();


Всёравно та же ошибка:
Ошибка при вызове метода контекста (Выполнить): Содержимое объекта данных может быть выбрано только во временную таблицу
    Запрос.Выполнить();    
по причине:
Содержимое объекта данных может быть выбрано только во временную таблицу


Делал по примеру:
ТЗ=Новый ТаблицаЗначений();
//Колонки должны быть типизированы
ТЗ.Колонки.Добавить("А", Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("Б", Новый ОписаниеТипов("Строка"));

//Заполняем таблицу данными
Стр=ТЗ.Добавить();
Стр.А="А";
Стр.Б="Б";
Стр=ТЗ.Добавить();
Стр.А="А1";
Стр.Б="Б1";


//Загружаем таблицу значений в менеджер временных таблиц запроса
Запрос=Новый Запрос("Выбрать Т.А, Т.Б ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
//Вариант: Запрос=Новый Запрос("Выбрать * ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Таб",ТЗ);
Запрос.Выполнить();

//Получаем таблицу из менеджера временных таблиц запроса
ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ ВТТаб");
ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;
ТЗ1=ЗапросТМП.Выполнить().Выгрузить();
ТЗ1.ВыбратьСтроку(); //Показываем полученную таблицу


Пример у меня работает, а то что я хочу - нет

Vofka Подменю пользователя
сообщение 06.09.10, 14:10
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Все это началось из-за того, что возникла необходимость прочитать и обработать данные запросом из таблицы значений. Точнее из 2-х отдельных таблиц и результат объединить. Может можно это сделать по проще?

World1С Подменю пользователя
сообщение 06.09.10, 14:19
Сообщение #7

Оратор
Иконка группы
Квалифицированному 1С программисту
Группа: Местный
Сообщений: 358
Из: г.Луганск, обл.Луганская
Спасибо сказали: 110 раз
Рейтинг: 0

Убери конструкцию ПОМЕСТИТЬ


Signature
В наше время люди всему знают цену, но понятия не имеют о подлинной ценности.
Оскар Уайлд

Vofka Подменю пользователя
сообщение 06.09.10, 15:17
Сообщение #8

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

А откуда тогда будет брать данные 2-й запрос?

Пока дошел до такого, вроде работает:
ТЗ1 = Новый ТаблицаЗначений();    
    ТЗ2 = Новый ТаблицаЗначений();
    
    ЗапросТМЦ = Новый Запрос;
    ЗапросТМЦ.Текст = "
    |ВЫБРАТЬ ПЕРВЫЕ 100
    |    СпрНоменклатура.Ссылка КАК Номенклатура
    |ИЗ
    |    Справочник.Номенклатура КАК СпрНоменклатура
    |ГДЕ
    |    СпрНоменклатура.ЭтоГруппа = 0";
    ТЗ1 = ЗапросТМЦ.Выполнить().Выгрузить();
    ТЗ2 = ЗапросТМЦ.Выполнить().Выгрузить();
    
    ТЗ1.Колонки.Добавить("Кво", Новый ОписаниеТипов("Число"));
    ТЗ1.Колонки.Добавить("ТЗ", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(3)));
    
    ТЗ2.Колонки.Добавить("Кво", Новый ОписаниеТипов("Число"));
    ТЗ2.Колонки.Добавить("ТЗ", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(3)));
    
    ТЗ1.ЗаполнитьЗначения(1, "Кво");
    ТЗ1.ЗаполнитьЗначения("ТЗ1", "ТЗ");
    
    ТЗ2.ЗаполнитьЗначения(1, "Кво");
    ТЗ2.ЗаполнитьЗначения("ТЗ2", "ТЗ");
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    *
    |ПОМЕСТИТЬ ВТ1
    |ИЗ
    |    &ТЗ1 КАК ТЗ1";
    Запрос.УстановитьПараметр("ТЗ1", ТЗ1);
    Запрос.Выполнить();
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    *
    |ПОМЕСТИТЬ ВТ2
    |ИЗ
    |    &ТЗ2 КАК ТЗ2";
    Запрос.УстановитьПараметр("ТЗ2", ТЗ2);
    Запрос.Выполнить();
    
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Подзапрос.Номенклатура КАК Номенклатура,
    |    СУММА(Подзапрос.Кво) КАК Кво
    |ИЗ
    |(ВЫБРАТЬ
    |    Номенклатура КАК Номенклатура,
    |    Кво КАК Кво
    |ИЗ
    |    ВТ1
    |    
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    Номенклатура КАК Номенклатура,
    |    Кво КАК Кво
    |ИЗ
    |    ВТ2) КАК Подзапрос
    |СГРУППИРОВАТЬ ПО
    |    Номенклатура";
    
    ТЗИтоги = Запрос.Выполнить().Выгрузить();


Если это через }*{опу - прошу пояснить smile.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 26.04.24, 20:56
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!