helpf.pro
Регистрация

отчет с отбором и без

Yeahkaterina
16.03.2011 15:44Прочитано: 1939
Здравствуйте. Мое задание состоит в том, чтоб сформировать отчет с отбором по контрагентам и без.... Имеется код:

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

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

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

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

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

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

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

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






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

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




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


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


помогите пожалуйста разобраться в чем проблема!
Yandex
Возможно, вас также заинтересует
Реклама на портале
Mokey
18.03.2011 10:32Ответ № 1
(0) Yeahkaterina,
1. Задаются ли параметры НачПериода и КонПериода (и зачем вот эта строчка, если не используется нигде ПараметрКонПериода = ?(ЗначениеЗаполнено(КонПериода), КонецДня(КонПериода), КонецДня(ТекущаяДата()));)
2. В таком варианте кода запроса параметр Контрагенты должен быть обязательно выбран. В таких случаях в условии
Если ЗначениеЗаполнено(Контрагенты) Тогда
Запрос.УстановитьПараметр("Контрагенты",Контрагенты);
КонецЕсли;
вставляют в текст запроса само условие и устанавливают параметр запроса.

Код 1C v 8.х
 
Запрос=Новый запрос;
Запрос.Текст=

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

Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачПериода));
Запрос.УстановитьПараметр("КонПериода", ПараметрКонПериода);
Если ЗначениеЗаполнено(Контрагенты) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "//СтрокаУсловия", "ГДЕ ПродажиОбороты.контрагенты=&Контрагенты");
Запрос.УстановитьПараметр("Контрагенты",Контрагенты);
КонецЕсли;
Результат=Запрос.Выполнить();
DJ_Serega
19.03.2013 00:48Ответ № 2
Увидел что бот смотрит в эту тему ) Решил обновить добавить свое представление *12
Если что понимаю что теме уже лет и лет *12

(1) Mokey, Как вариант можно и так:

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

ПараметрКонПериода = ?(ЗначениеЗаполнено(КонПериода), КонецДня(КонПериода), КонецДня(ТекущаяДата()));

Запрос.УстановитьПараметр("НачПериода", НачалоДня(НачПериода));
Запрос.УстановитьПараметр("КонПериода", ПараметрКонПериода);

////////// ++++
Если ЗначениеЗаполнено(Контрагенты) Тогда
Запрос.УстановитьПараметр("Контрагенты",Контрагенты);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПродажиОбороты.контрагенты=&Контрагенты", "Истина");
КонецЕсли;
////////// ----

Результат = Запрос.Выполнить();
Подсказка: Для быстрого перемещения к последнему ответу или к вопросу используйте или .
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.