Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:04

Вывод на экран выборки последнего уровня

Автор mevrew, 25 апр 2023, 13:03

0 Пользователей и 1 гость просматривают эту тему.

mevrew

Добрый день. Я новичок, помогите, пожалуйста. Необходимо написать код программной обработки и вывода на экран выборки последнего уровня - выборки детальных записей. Вот сам код:



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

Kvark5d

mevrew, 1. Перечитайте теорию и примеры про запросы. То что у Вас совсем не верно.
2. Не понятно, что именно нужно сделать. Опишите подробнее.
3. ИнициализироватьТаблицуИлиДерево(РезультатЗапроса, Таблица) - что это за процедура?

mevrew

Спасибо за обратную связь.
Получается, необходимо, чтобы не выводились данные по номенклатуре(Обходятся только "итог по группировке", "детальная запись" не обходятся).
Нужно добавить ещё один вложенный цикл который выведет данные от "детальная запись". У нас три уровня. Получается, от итоговой записи третьего уровня нужно опять получить выборку и новом вложенном цикле её обойти.


mevrew


Kvark5d

mevrew, примерно так
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПродажиОбороты.Период КАК Период,
| ПродажиОбороты.Контрагент КАК Контрагент,
| ПродажиОбороты.Менеджер КАК Менеджер,
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПродажиОбороты.Сумма КАК Сумма
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , Месяц, ) КАК ПродажиОбороты
|ИТОГИ
| СУММА(Сумма)
|ПО
| Период,
| Контрагент,
| Менеджер";

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

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

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

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

LexaK

mevrew, самое просто: Из запроса уберите Итоги
       |ИТОГИ
        |    СУММА(Сумма)
        |ПО
        |    Период,
        |    Контрагент,
        |    Менеджер";

и сразу выводите результат, там как раз и будут детальные записи без итогов!
(сортировку добавьте)
если помогло нажмите: Спасибо!

mevrew

Здравствуйте! Спасибо всем огромное!  :zebzdr:  Удалось разобраться. Вышел нужный итог


LexaK

mevrew, выше было написано что для простого запроса нужно использовать простой (одноуровневый) цикл
вот пример
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Сообщить("По заданным условиям, нет данных.");
Возврат;
КонецЕсли;
    лкВыборка = РезультатЗапроса.Выбрать();
Пока лкВыборка.Следующий() Цикл
Сообщить("Контрагент: " + лкВыборка.Контрагент);
Сообщить("Сумма: " + лкВыборка.СуммаОборот);
КонецЦикла;

если помогло нажмите: Спасибо!

mevrew

LexaK, подскажите, пожалуйста, если не убирать итоги запроса (иначе нет иерархии в результате запроса) а вернуть исходный запрос с 3-мя вложенными циклами и добавить 4-ый?

LexaK

Цитата: mevrew от 26 апр 2023, 15:26LexaK, подскажите, пожалуйста, если не убирать итоги запроса (иначе нет иерархии в результате запроса) а вернуть исходный запрос с 3-мя вложенными циклами и добавить 4-ый?
а кто вам мешает? добавляйте!
(только надо четко представлять что и для чего вы делаете)
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск