powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Отчет с отбором и без
7 сообщений из 7, страница 1 из 1
Отчет с отбором и без
    #37167988
Yeahkaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Мое задание состоит в том, чтоб сформировать отчет с отбором по контрагентам и без.... Имеется код:

Процедура КнопкаСформироватьНажатие(Кнопка)

Запрос=Новый запрос;
Запрос.Текст=

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

Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачПериода));
Запрос.УстановитьПараметр("КонПериода", ПараметрКонПериода);
Если ЗначениеЗаполнено(Контрагенты) Тогда
Запрос.УстановитьПараметр("Контрагенты",Контрагенты);
КонецЕсли;
Результат=Запрос.Выполнить();

Макет=ОтчетОбъект.ПолучитьМакет("Макет");
ТабДок=элементыФормы.ПолеТабличногоДокумента1;

ОблЗаг=Макет.ПолучитьОбласть("Заголовок");
ОблШап=Макет.ПолучитьОбласть("Шапка");
ОблКон=Макет.ПолучитьОбласть("Контрагент");
ОблДок=Макет.ПолучитьОбласть("Документ");

ТабДок.Очистить();

ТабДок.Вывести(ОблЗаг);
ТабДок.Вывести(ОблШап);
ТабДок.НачатьАвтогруппировкуСтрок();






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

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




КонецЦикла;
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();


В рез-те выполнения есть следующие ошибки:
1. если не выбрать из списка контрагент, то ошибка звучит так:"Не задано значение параметра "Контрагенты" ГДЕ ПродажиОбороты.Контрагенты=<<?>>&Контрагенты"
2.если в списке выбрать какой-либо контрагент, то отображается только заголовок и шапка макета


помогите пожалуйста разобраться в чем проблема!
...
Рейтинг: 0 / 0
Отчет с отбором и без
    #37168221
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблемы никакой нет - как запрос написан, так и работает.
Есть условие "ГДЕ .... = ....." - оно и работает.
В реальности же контрагент может быть элементом, группой, списком элементов, списком групп, или вообще не быть заданным( для всех..).
В каждом из этих случаев текст запроса должен быть разным.

А чтобы не заморачиваться с такими нюансами - начиная с платформы 8.0 есть ПостроительОтчета (который умеет подготавливать текст запроса в зависимости от содержания параметров) или Система Компоновки Данных (начиная с платформы 8.1).
Если вам для практических целей надо - рекомендую последний вариант. Не панацея, но облегчает создание отчетов сильно.

Или хотя бы посмотрите, как реальные отчеты сделаны в типовой конфигурации - в той же Торговле 10 практически все на Построителе, и 9/10 - подсовыванием своего текста запроса единственному экземпляру такого Построителя - остальное он делает сам из текста запроса.
Посмотреть на тексты таких запросов, и особенно - на блоки в скобках {}
Именно такие блоки Построитель умеет разворачивать при необходимости, либо выкидывать при ненадобности.
...
Рейтинг: 0 / 0
Отчет с отбором и без
    #37168244
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yeahkaterina,

а если по простому, и "Контрагенты" у вас вероятно группа (которую с элементом в запросе сравнивать бесполезно - пустой результат будет), то достаточно как-то так разделить текст запроса:


| РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиОбороты
|";
если значениеЗаполнено(Контрагенты) тогда
Запрос.Текст=Запрос.Текст+" ГДЕ ПродажиОбороты.контрагенты В ИЕРАРХИИ (&Контрагенты)
|";
конецЕсли;
Запрос.Текст=Запрос.Текст+"| ИТОГИ СУММА(ПрибыльОборот),



и далее.....
...
Рейтинг: 0 / 0
Отчет с отбором и без
    #37168690
Yeahkaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! разобралась!
...
Рейтинг: 0 / 0
Отчет с отбором и без
    #37173745
Александр Пузаков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yeahkaterina,

В следующий раз спользуйте встроенную функцию СтрЗаменить(). Анализируйте тип значения параметра, и изменяйте вот этот фрагмент:
Код: plaintext
Контрагент = &Контрагент
На, соответственно
Код: plaintext
Контрагент В (&Контрагент)
или
Код: plaintext
Контрагент В ИЕРАРХИИ (&Контрагент)
...
Рейтинг: 0 / 0
Отчет с отбором и без
    #37174068
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в лучших домах парижу и филадельфии принято разливать чай через ситечко пользовать построитель отчета/запроса
...
Рейтинг: 0 / 0
Отчет с отбором и без
    #37174895
ReBooT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yeahkaterina,

В идеале отбор бы в условия регистра перенести....
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Отчет с отбором и без
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]