Имя: Пароль:
1C
1C 7.7
v7: обход результата запроса
0 Bigbro
 
18.06.20
07:06
товарищи динозавры кто еще помнит, практикует.
как правиильно из запроса выбрать записи по 2й группировке, отфильтровав по конкретному значению 1й?
Группировка("Объект")
Группировка("Событие")
Объект меня интересует конкретный, если бы и событие было конкретное, то Сделал бы Запрос.Получить(Объект,Событие)
а как выбрать все события по конкретному Объекту?
в запрос условие не хочу добавлять - мне по всем нужны данные, это в цикле гонять запросы. как то правильно спозиционироваться в выборке.
с пустым вторым параметром Запрос.Получить(Объект,) - ничего не дает.
в доке написано что дальнейшая выборка с помощью группировки() возможна.
наставьте на путь)
1 Ёпрст
 
гуру
18.06.20
07:12
С аомощью прямого позиционирования..для первой группировки получить, а вторую обходишь циклом. Усё
2 Ёпрст
 
гуру
18.06.20
07:13
И не забывать потом первую сбросить
3 Андрей_Андреич
 
naïve
18.06.20
07:16
(2) Сбросить - это Запрос.ВНачалоВыборки()?
4 Ёпрст
 
гуру
18.06.20
07:19
(3) ага, просто уже наложение снеговика в мозгу)
5 Ёпрст
 
гуру
18.06.20
07:20
Емли не сбрасывать, то может не найти, если второе получить будет раньше первого..это как найти в тз
6 Bigbro
 
18.06.20
07:23
так не работает же.
если пишу просто Запрос.Получить(Объект) - то ошибка, надо запятую добавлять
а когда Запрос.Получить(Объект,) то в отладчике он возвращает 0, то есть не получил данные.
и дальнейшая группировка естественно ничего не дает.
7 Bigbro
 
18.06.20
07:24
хотя я кажется знаю в чем может быть проблема .... сейчас проверим.
8 Ёпрст
 
гуру
18.06.20
07:26
Если не находит, то нет такоготобъекта в выборке
9 Bigbro
 
18.06.20
07:29
там есть нюанс, объект - справочник, может быть разных видов. в запросе я отбираю только тот вид что мне нужен. ну и значение для поиска - конкретный элемент.
может это влиять?
в выборке есть, я в ТЗ попробовал выгрузил - все записи на месте.
10 Ёпрст
 
гуру
18.06.20
07:32
Сделай вначаловыборкиипередтполучить
11 Bigbro
 
18.06.20
07:32
это сразу сделал.
12 Ёпрст
 
гуру
18.06.20
07:33
Ну тогда, покажи свой код, может не ссылку, а переменную с типом пихаешь в методтполучить
13 Ёпрст
 
гуру
18.06.20
07:34
.текущийэлемент() пихай, если это не реквизит ыормы, а че рез создать объект слеплено
14 Bigbro
 
18.06.20
07:39
я пихал значение из ТЗ, тип вид значения в нем верный.
попробовал создал справочник нужного вида, спозиционировался на Текущийэлемент() - не помогло.
15 Bigbro
 
18.06.20
07:43
ладно, похоже проще будет в ТЗ выгрузить и оттуда уже выдергивать.
16 Ёпрст
 
гуру
18.06.20
08:15
Код покажи
17 Ёпрст
 
гуру
18.06.20
08:15
и текст запроса
18 Bigbro
 
18.06.20
08:23
да не могу я код показывать..
но там все достаточно тривиально.
соседний запрос где по 2 группировкам получаю конкретное значение работает нормально, а тут вот засада.
я уже переделал на вывод через ТЗ.
19 Ёпрст
 
гуру
18.06.20
08:25
должно работать, такой метод часто для шахматки использовался, где был обход всех дат и через получить позиционирование..
20 Bigbro
 
18.06.20
08:29
ну там возможно по 2 параметрам позиционировалось - так работает.
а я не знаю заранее ни сколько будет событий, ни самих этих событий у меня нет списка.
поэтому думал что смогу спозиционироваться по объекту а дальше выгрести все что есть по второй группировке
но почему то не пошло.
21 Ёпрст
 
гуру
18.06.20
09:08
(20) должно работать, без текста запроса не видно. Единственное, нельзя опускать первые значения группировок, все последующие можно, при позиционировании.
22 Bigbro
 
18.06.20
09:23
Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Объект = Справочник.События.Объект;
    |Событие = Справочник.События.ТекущийЭлемент;
    |Время = Справочник.События.ВыбВремя;
    |Условие(Объект.Вид() = ""Сотрудники"");
    |Группировка Объект Упорядочить По Объект.Наименование Без Групп;
    |Группировка Событие;
    |Условие(Объект В СЗСотр);
    |Без Итогов;
    |";

вот такой запрос, отбросив детали.
Запрос.Получить(Объект,) возвращает 0.
23 Ёпрст
 
гуру
18.06.20
10:00
(22) ёпт... БезИтогов же..там нет группировок, она одна всегда
24 Ёпрст
 
гуру
18.06.20
10:01
Выкини без итогов из текста и заработает
25 Bigbro
 
18.06.20
10:21
выкинул, все равно получить ноль возвращает.
в топку короче, надо дальше делать.
потом как нибудь будет время поэкспериментирую.
26 vladko
 
18.06.20
10:23
(6)
Если у тебя 3 группировки в запросе, тогда в методе Запрос.Получить() уже должно быть 3 параметра и т.д.
27 Bigbro
 
18.06.20
10:37
(26) да, я понимаю.
28 Ёпрст
 
гуру
18.06.20
11:02
(25) Ну значит пихаешь не ссылочный объект в метод Получить
29 Ёпрст
 
гуру
18.06.20
11:02
кинь реквизит на форму с нужным типом справочника, выбери туда значение, которое точно есть в выборке и проверь на нём
30 Ёпрст
 
гуру
18.06.20
11:04
и вот это выкинь
Упорядочить По Объект.Наименование

оно и так будет упорядочено по наименованию всегда (если конечно, основное представление в виде наименования, а не кода)
31 Bigbro
 
18.06.20
11:08
там еще несколько упорядочиваний, запрос побольше, я вырезал все что не относится к ситуации.
по форме проверю, еще мысль возникла, проверю но попозже когда доделаю.
32 Ёпрст
 
гуру
18.06.20
11:11
Или.. выгрузить запрос в индексированнуюТЗ и там уже группировки какие угодно и обход по нужным ключам
33 Bigbro
 
18.06.20
11:12
(32) ну да, я пока так и сделал.
34 vladko
 
18.06.20
14:29
Но конструкция, типа,

Спр = СоздатьОбъект("Справочники.ОбъектыСобытий");
Спр.НайтиПоКоду("1",0);
Объект = Спр.ТекущийЭлемент();

Запрос.ВНачалоВыборки();
Если Запрос.Получить(Объект,) > 0 Тогда
Пока Запрос.Группировка("Событие") = 1 Цикл
    ..............
КонецЦикла;
КонецЕсли;

Должна безупречно срабатывать.