Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Обход вложенных группировок запроса по регистру сведений (http://forums.kuban.ru/f1040/obhod_vlozhennyh_gruppirovok_zaprosa_po_registru_svedenij-8736080.html)

mr Gilmor 10.10.2018 15:47

Обход вложенных группировок запроса по регистру сведений
 
Надо организовать обход результатов запроса к регистру сведений по двум группировкам в виде двух вложенных циклов (как в v7).
Регистр сведений ЦеныНоменклатурыПоставщиков.
Упрощенно:
Измерения - Поставщик,Номенклатура.
Ресурс - Цена.
Т.е. надо для каждого поставщика получить по каждой номенклатуре цену (последнюю).
Текст запроса:
"ВЫБРАТЬ
|ЦеныНоменклатурыПоставщиковСрезПоследних.Поставщи к КАК Поставщик,
|ЦеныНоменклатурыПоставщиковСрезПоследних.Номенкла тура КАК Номенклатура,
|ЦеныНоменклатурыПоставщиковСрезПоследних.Цена КАК Цена
|ИЗ
РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПо следних()
|КАК ЦеныНоменклатурыПоставщиковСрезПоследних
|СГРУППИРОВАТЬ ПО
|ЦеныНоменклатурыПоставщиковСрезПоследних.Поставщи к,
|ЦеныНоменклатурыПоставщиковСрезПоследних.Номенкла тура;
Пытаюсь организовать обход группировок двумя циклами примерно так:
Результат = Запрос.Выполнить();
ВыборкаП Результат.Выбрать(ОбходРезультатовЗапроса.ПоГруппи ровкам,"Поставщик");
Пока ВыборкаП.Следующий() Цикл
Поставщик = ВыборкаП.Партнер;
...
ВыборкаН = ВыборкаП.Выбрать(ОбходРезультатовЗапроса.ПоГруппир овкам,"Номенклатура");
Пока ВыборкаН.Следующий() Цикл
Номенклатура = ВыборкаН.Номенклатура;
...
КонецЦикла;
КонецЦикла;

И что-то заставить работать не могу.
Ругается на неизвестную переменную ОбходРезультатовЗапроса. Понимаю, что надо как-то итоги в запрос добавить, но квалификации не хватает.
Прошу помощи у коллег.

roma n 10.10.2018 15:53

секция ИТОГИ в запросе?
Ну и ОбходРезульта_ТА_Запроса

mr Gilmor 10.10.2018 15:57

1-roma n >Я понимаю, что в запросе нужны ИТОГИ, но не вкурю, как правильно это написать. По какой переменной/группировке запроса и т.д.
Если не затруднит, напишите этот кусок запроса.

mr Gilmor 10.10.2018 15:58

ИТОГИ ??? ПО ???

user1C 10.10.2018 15:59

[quote=roma n;46071049]Ругается на неизвестную переменную ОбходРезультатовЗапроса[/quote]
[quote=roma n;46071049] ОбходРезульта_ТА_Запроса[/quote]
глаз размылить для начала)

mr Gilmor 10.10.2018 16:06

4-user1C >Меня в данном случае лучше, как слепого, перевести через улицу, и я дальше сам пойду :)
Куда ОбходРезульта_ТА_Запроса вставить ?
И как ИТОГИ правильно написать ?

mr Gilmor 10.10.2018 20:12

Други, не бросайте в годину тяжкую.
Поможите, кто чем может.

roma n 11.10.2018 09:20

502 ошибка

roma n 11.10.2018 09:23

ВЫБРАТЬ
ЦеныНоменклатурыПоставщиковСрезПоследних.Поставщи к КАК Поставщик,
ЦеныНоменклатурыПоставщиковСрезПоследних.Номенкла тура КАК Номенклатура,
ЦеныНоменклатурыПоставщиковСрезПоследних.Цена КАК Цена
ИЗ РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних()
КАК ЦеныНоменклатурыПоставщиковСрезПоследних
ИТОГИ ПО
ЦеныНоменклатурыПоставщиковСрезПоследних.Поставщик";

roma n 11.10.2018 09:24

Результат = Запрос.Выполнить();
ВыборкаП Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппи ровкам);
Пока ВыборкаП.Следующий() Цикл
Поставщик = ВыборкаП.Партнер;

ВыборкаН = ВыборкаП.Выбрать(); // без параметров

mr Gilmor 11.10.2018 14:10

Ругается "Переменная не определена ОбходРезультатовЗапроса".
А СГРУППИРОВАТЬ ПО точно не нужно ?

user1C 11.10.2018 14:19

)))
мда...

US1C 11.10.2018 14:58

(0) Если не секрет, линейный обход одним циклом чем не устраивает?
Я так понимаю, что итожить цены не требуется (да и странно это было бы). Соответственно каждая связка Контрагент-Номенклатура уникальна и будет получена обычным перебором.

mr Gilmor 11.10.2018 15:32

12-US1C >А надо в конце каждого прохода внешнего цикла (после отработки внутреннего) выполнить определенные действия с использованием текущего значения переменной внешнего цикла. Конкретно, выгрузить данные по ценам всей номенклатуры каждого поставщика.
Можно и перебором плоской таблицы. Но хотелось бы элегатнее.

mr Gilmor 11.10.2018 15:37

11-user1C >Понимаю, смех уместен. Но практическая помощь будет уместнее :))

Uho 11.10.2018 15:42

Весело тут у вас...
14-mr Gilmor > Читай (4) столько раз, пока не поймешь

mr Gilmor 11.10.2018 15:55

15-Uho >Блин, вкурил, не РезультаТОВ, а РезультаТА.
А все-таки СГРУППИРОВАТЬ ПО требуется ?

mr Gilmor 11.10.2018 16:02

Так, вроде чего-то полетело.
roma_n - огромное спасибо. Да и всем остальным тоже.

US1C 11.10.2018 16:04

Попробуй так:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыПоставщиковСрезПоследних.Поставщик КАК Поставщик,
| ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыПоставщиковСрезПоследних.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиковСрезПоследних
|ИТОГИ ПО
| ТипЦен";

РезультатЗапроса = Запрос.Выполнить();

ВыборкаПоставщик = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаПоставщик.Следующий() Цикл

ВыборкаДетальныеЗаписи = ВыборкаПоставщик.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

КонецЦикла;
КонецЦикла;

mr Gilmor 11.10.2018 16:12

18-US1C >Да, у меня тоже самое, только ИТОГИ ПО Поставщик (откуда ТипЦен?).
И это вроде заработало (проверяю).

US1C 11.10.2018 17:14

(19) Да, конечно Поставщик. Просто у меня другая конфа, там похожий регистр с другими измерениями. Код адаптировал, но видно упустил кое-что.

mr Gilmor 11.10.2018 20:38

20-US1C >Спасибо.


Текущее время: 13:18. Часовой пояс GMT +3.