Имя: Пароль:
1C
1С v8
Выгрузка результата пакетного запроса в таблицу значений
0 новичок12345
 
14.10.12
17:03
помогите плиз! не могу понять что не так делаю. Запрос точно рабочий, как его правильно выгрузить?
Для каждого СтрокаТаблицы Из ТаблицаДанных Цикл
       а = а + 1;
       Если а > 1 тогда
           Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ ";
       КонецЕсли;
       ИмяВида        = СтрокаТаблицы.ИмяТаблицы;
       
       
       Запрос.Текст = Запрос.Текст +    
       
       "ВЫБРАТЬ
       |    "+ИмяВида+".Ссылка
       |ИЗ
       |    Документ."+ИмяВида+" КАК "+ИмяВида+"
       |ГДЕ
       |    ("+ИмяВида+".Дата МЕЖДУ &ДатаНачала И &ДатаКонца
       |                И ("+ИмяВида+".ОтражатьВБухгалтерскомУчете = &БухУчет
       |            ИЛИ "+ИмяВида+".ОтражатьВНалоговомУчете = &НалУчет))";
       
       Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
       Запрос.УстановитьПараметр("ДатаКонца", ДатаОкончания);
       Запрос.УстановитьПараметр("БухУчет", "Нет");
       Запрос.УстановитьПараметр("НалУчет", "Нет");
       
   КонецЦикла;
   МассивРезультатов = Запрос.ВыполнитьПакет();
   ТаблицаОтобранных.Очистить();
   Для Каждого Строка Из МассивРезультатов Цикл
       ЗаполнитьЗначенияСвойств(ТаблицаОтобранных.Добавить(), Строка);
   КонецЦикла;

массивРезультатов пустой, почему?
1 Нуф-Нуф
 
14.10.12
17:04
ТаблицаОтобранных.Очистить();
   Для Каждого Строка Из МассивРезультатов Цикл
       ЗаполнитьЗначенияСвойств(ТаблицаОтобранных.Добавить(), Строка);
   КонецЦикла;


это че?
2 aleks-id
 
14.10.12
17:05
а зачем в цикле параметры устанавливать?
3 новичок12345
 
14.10.12
17:06
ТаблицаОтобранных  - это таблица значений. Просто очищаю ее перед записью. А цикл это попытка заполнить таблицу значений результатом запроса, но так как результат запроса пустой, то не получается
4 новичок12345
 
14.10.12
17:07
(2) косяк , сейчас подправим
5 France
 
14.10.12
17:08
посмотри что у тебя в "Строка"
6 новичок12345
 
14.10.12
17:08
консоль запросов показывает что запрос рабочий. А вот как его выгрузить непонятно мне
7 новичок12345
 
14.10.12
17:09
(5) поле объекта не обнаружено
8 новичок12345
 
14.10.12
17:12
Вообще, это правильно: МассивРезультатов = Запрос.ВыполнитьПакет()
В данном случае эту конструкцию нужно использовать?
9 France
 
14.10.12
17:13
МассивРезультатов[XXX].Выбрать()
10 новичок12345
 
14.10.12
17:17
(9) дело в том, что в массив записана одна строка с типом результат запроса и пустым значением
11 dauster
 
14.10.12
17:24
Мне одному кажется, что "Строка" - служебное слово и не следует его использовать в цикле? Может, использовать другое обозначение?
12 aleks-id
 
14.10.12
17:26
МассивРезультатов = Запрос.ВыполнитьПакет().Выгрузить();
13 новичок12345
 
14.10.12
17:28
(12) метод объекта Выгрузить() не обнаружен
14 новичок12345
 
14.10.12
17:30
(11) мне кажется что косяк идет на этапе выполнения запроса, я сейчас закомментировал все, кроме массиваРезультатов все равно не работает
15 новичок12345
 
14.10.12
17:31
если делаю так:
МассивРезультатов = Запрос.Выполнить().Выгрузить()
то просто ТЗ пустая
16 France
 
14.10.12
17:33
(13) ты внЫмательно хлянь 9.. если и это не поможет, в любом типовом сделай глобальный поиск по "ВыполнитьПакет" и насладись ж Ызнью.. вот... как то так..
17 новичок12345
 
14.10.12
17:33
(16) Спасибо, сейчас пробегусь.
18 новичок12345
 
14.10.12
18:04
все равно идет пустой массив. уже и так делал:
МассивРезультатов = Запрос.Выполнить();
   ма = МассивРезультатов.Выгрузить();
и так:
МассивРезультатов = Запрос.ВыполнитьПакет();
   ВсегоЗапросов = МассивРезультатов.Количество();    
   Для Индекс = 0 по МассивРезультатов.ВГраница() Цикл
       Выборка = МассивРезультатов[Индекс].Выгрузить();            
   КонецЦикла;
19 новичок12345
 
14.10.12
18:08
может дело все-таки в запросе? хотя консоль дает результат
20 notebug
 
14.10.12
18:30
(0) а текст запроса формируется только в цикле? до цикла текст запроса пустой? если да, то зачем вам пакет?

Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
  ТаблицаОтобранных = Результат.Выгрузить();
  ...
КонецЕсли;


а если все же пакет, то:
МассивРезультатов = Запрос.ВыполнитьПакет();
РезультатЗапроса = МассивРезультатов[0];
Если НЕ РезультатЗапроса .Пустой() Тогда
  ТаблицаОтобранных = РезультатЗапроса .Выгрузить();
  ...
КонецЕсли;
21 новичок12345
 
14.10.12
18:41
(20) возвращает почему-то пустой... в чем может быть причина?
22 новичок12345
 
14.10.12
18:47
Для каждого СтрокаТаблицы Из ТаблицаДанных Цикл
       а = а + 1;
       //Если а > 1 тогда
       //    Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ ";
       //КонецЕсли;
       ИмяВида        = СтрокаТаблицы.ИмяТаблицы;
       
       
       Запрос.Текст = //Запрос.Текст +    
       
       "ВЫБРАТЬ
       |    "+ИмяВида+".Ссылка
       |ИЗ
       |    Документ."+ИмяВида+" КАК "+ИмяВида+"
       |ГДЕ
       |    ("+ИмяВида+".Дата МЕЖДУ &ДатаНачала И &ДатаКонца
       |                И ("+ИмяВида+".ОтражатьВБухгалтерскомУчете = &БухУчет
       |            ИЛИ "+ИмяВида+".ОтражатьВНалоговомУчете = &НалУчет))";
       
       
       РезультатЗапроса = Запрос.Выполнить().Выгрузить();
   КонецЦикла;

Сделал так... уже тут результатЗапроса пустой...
23 новичок12345
 
14.10.12
18:47
На выходе беру Запрос.Текст, копирую в консоль, все работает
24 notebug
 
14.10.12
19:05
а параметры куда дел?
25 новичок12345
 
14.10.12
19:08
ОХОХ!!!! Вот я затупил!!!!! Взял из консоли значение "Отражать в бух учете" так и скопировал "Нет"!!! Ну это ж надо! Всем спасибо, сломал себе мозг и вас помучил, а все из-за своей невнимательности((