|
Обход по группировкам запроса | ☑ | ||
---|---|---|---|---|
0
ONE1
26.12.22
✎
11:58
|
https://ibb.co/znVJJWh - получаю такие данные из запроса.
Потом перебираю в группировках. Но почему-то ВыборкаДетальныеЗаписи только один заказ выводит :_с Помогите пожалуйста 🙏 РезультатЗапроса = Запрос.Выполнить(); ВыборкаОрганизация = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаОрганизация.Следующий() Цикл ВыборкаДатаОтгрузки = ВыборкаОрганизация.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДатаОтгрузки.Следующий() Цикл ВыборкаАдресДоставки = ВыборкаДатаОтгрузки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаАдресДоставки.Следующий() Цикл ВыборкаГруппаФинансовогоУчета = ВыборкаАдресДоставки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаГруппаФинансовогоУчета.Следующий() Цикл ВыборкаСпособДоставки = ВыборкаГруппаФинансовогоУчета.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСпособДоставки.Следующий() Цикл ВыборкаПартнер = ВыборкаСпособДоставки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПартнер.Следующий() Цикл ВыборкаВнутреннийПартнер = ВыборкаПартнер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаВнутреннийПартнер.Следующий() Цикл ВыборкаВнутреннийКонтрагент = ВыборкаВнутреннийПартнер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаВнутреннийКонтрагент.Следующий() Цикл ВыборкаДопСвойство = ВыборкаВнутреннийКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДопСвойство.Следующий() Цикл ВыборкаВнутренняяОперация = ВыборкаДопСвойство.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаВнутренняяОперация.Следующий() Цикл ВыборкаДетальныеЗаписи = ВыборкаВнутренняяОперация.Выбрать(); ТаблицаЗаказов = Новый ТаблицаЗначений; ТаблицаЗаказов.Колонки.Добавить("Заказ"); Группировки = ТаблицаГруппировок.Добавить(); Группировки.СтрокаГруппировки = "" + ВыборкаВнутренняяОперация.Организация + " / " + ВыборкаВнутренняяОперация.Партнер + " / " + Формат(ВыборкаВнутренняяОперация.ДатаОтгрузки, "ДФ=dd.MM.yyyy") + " / " + ВыборкаВнутренняяОперация.АдресДоставки + " / " + ВыборкаВнутренняяОперация.ГруппаФинансовогоУчета + " / " + ВыборкаВнутренняяОперация.СпособДоставки + " / " + ВыборкаВнутренняяОперация.ВнутренняяОперация + " / " + ВыборкаВнутренняяОперация.ВнутреннийПартнер + " / " + ВыборкаВнутренняяОперация.НеОбъединятьЗаказ; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СтрокаЗаказ = ТаблицаЗаказов.Добавить(); СтрокаЗаказ.Заказ = ВыборкаДетальныеЗаписи.Заказ; КонецЦикла; Группировки.ТаблицаЗаказов = ТаблицаЗаказов; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; |
|||
1
Ryzeman
26.12.22
✎
12:01
|
Господи... ТС, что этот код по-твоему в принципе должен делать?...
|
|||
2
ONE1
26.12.22
✎
12:05
|
(1) он группирует заказы, и потом если все данные заказов совпадают, то создается объединенная реализация из нескольких заказов :)
|
|||
3
Ryzeman
26.12.22
✎
12:16
|
Ну, я рискну предположить, что ты забыл указать параметры в методах Выбрать(), но даже если укажешь, это не будет работать как ты хочешь. Здесь вообще не нужно 100500 вложенных циклов.
https://its.1c.ru/db/pubqlang/content/65/hdoc Выведи итоги по нужным полям и сгруппируй один раз. |
|||
4
Kassern
26.12.22
✎
12:20
|
(0) Я конечно много чего повидал, но такое впервые))
|
|||
5
ONE1
26.12.22
✎
12:24
|
Это не мое :(( Меня просто попросили в это добавить колонку "НеОбъединятьЗаказ", а оно так выглядит страшно и не понятно и не работает добавив гусеничку еще одну
|
|||
6
Kassern
26.12.22
✎
12:26
|
(5) Скрин с группировкой итогов покажите
|
|||
7
Гипервизор
26.12.22
✎
12:27
|
(0) Больше циклов Богу циклов! )
|
|||
8
ONE1
26.12.22
✎
12:34
|
Сам запрос такой: ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеСведения.Свойство КАК Свойство, | ДополнительныеСведения.Значение КАК Значение, | ДополнительныеСведения.Объект КАК Объект |ПОМЕСТИТЬ ВТДопСвойстваЗаказа |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Объект В (&Заказы); |///////////////////// |ВЫБРАТЬ | втЗаказы.Заказ КАК Заказ |ПОМЕСТИТЬ втЗаказ |ИЗ | &Заказы КАК втЗаказы |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗаказКлиента.Ссылка КАК Заказ, | ЗаказКлиента.Организация КАК Организация, | ЗаказКлиента.Партнер КАК Партнер, | ЗаказКлиента.ДатаОтгрузки КАК ДатаОтгрузки, | ЗаказКлиента.АдресДоставки КАК АдресДоставки, | ЗаказКлиента.ГруппаФинансовогоУчета КАК ГруппаФинансовогоУчета, | ЗаказКлиента.СпособДоставки КАК СпособДоставки, | ЗаказКлиента.яядВнутренняяОперация КАК ВнутренняяОперация, | ЗаказКлиента.яядВнутреннийКонтрагент КАК ВнутреннийКонтрагент, | ЗаказКлиента.яядВнутреннийПартнер КАК ВнутреннийПартнер, | ЕСТЬNULL(ВТДопСвойстваЗаказа.Значение , Ложь) КАК НеОбъединятьЗаказ |ИЗ | втЗаказ КАК втЗаказ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ЗаказКлиента | ПО втЗаказ.Заказ = ЗаказКлиента.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.яядДокументыРеализации КАК ЗаказКлиентаяядДокументыРеализации | ПО втЗаказ.Заказ = ЗаказКлиентаяядДокументыРеализации.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ ВТДопСвойстваЗаказа КАК ВТДопСвойстваЗаказа | ПО втЗаказ.Заказ = ВТДопСвойстваЗаказа.Объект |ГДЕ | ЗаказКлиентаяядДокументыРеализации.ДокументРеализации ЕСТЬ NULL |ИТОГИ ПО | Организация, | ДатаОтгрузки, | АдресДоставки, | ГруппаФинансовогоУчета, | СпособДоставки, | Партнер, | ВнутреннийПартнер, | ВнутреннийКонтрагент, | ВнутренняяОперация, | НеОбъединятьЗаказ |
|||
9
Fedor-1971
26.12.22
✎
12:54
|
(0) ТаблицаЗаказов каждый раз создаётся в цикле
(8) в таком запросе нужен ещё один цикл выборки НеОбъединятьЗаказ перед Детальными записями |
|||
10
ass1c
26.12.22
✎
13:31
|
(0) Начни не с этого
РезультатЗапроса = Запрос.Выполнить(); ВыборкаОрганизация = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаОрганизация.Следующий() Цикл А с этого ВыборкаОрганизация = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Организация"); Пока ВыборкаОрганизация.Следующий() Цикл //и иди вниз до самой последней группировки "НеОбъединятьЗаказ" //что бы не запутаться добавляй второй параметр выборки - название группировки (а то приходится смотреть порядок в запросе) //и уже в последней группировки с помощью выбрать получишь все свои данные |
|||
11
Kassern
26.12.22
✎
13:36
|
(10) Я бы вообще эту лесенку убрал. Смысл обходить группировки в которых ничего не обрабатывается? Тогда уж лучше сразу сгруппировать данные и обойти один цикл без группировок.
|
|||
12
ass1c
26.12.22
✎
13:53
|
(11) + Да само собой всегда есть способ сделать лучше, правильнее и т.д. Но на мисте часто себе дороже объяснять как и что можно сделать более правильно
|
|||
13
Said_We
26.12.22
✎
14:53
|
(8) Опять прикалываться начали....
Убирай все итоги: "|ИТОГИ ПО...". ВыборкаЗапроса = Запрос.Выполнить().Выбрать(); // простая прямая выборка - у тебя нет агрегатных функций для итогов, значит итоги не нужны. Пока ВыборкаЗапроса.Следующий() Цикл .... КонецЦикла; Не понял я зачем в таблицу значений засовывать заказы и потом эту таблицу в поле "ТаблицаЗаказов". Но если так сильно надо, то это максимум одна группировка. Какая не скажу так как логику задачи не озвучили. А когда озвучите, то скорее всего, окажется что весь запрос не нужен будет и всё уже реализовано, только надо какую-нибудь галочку включить или отчетом готовым воспользоваться. Обычно так. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |