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

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

Автор Yeahkaterina, 16 мар 2011, 14:06

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

Yeahkaterina

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

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

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


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


помогите пожалуйста разобраться в чем проблема!

cska-fanat-kz

Во-первых, условие по Контрагенту надо задавать в параметрах виртуальной таблицы оборотов.

РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , Контрагенты = &Контрагенты) КАК ПродажиОбороты

Во-вторых, это условие надо "вырезать" и подставлять подстрокой

|  РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, ,
| "+УсловиеКонтрагента+") КАК ПродажиОбороты


а потом вот здесь

Если ЗначениеЗаполнено(Контрагенты) Тогда
   Запрос.УстановитьПараметр("Контрагенты",Контрагенты);
КонецЕсли;


добавляем

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

Yeahkaterina

Извините, но я не поняла куда именно нужно вставлять эти строки:
|  РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, ,
| "+УсловиеКонтрагента+") КАК ПродажиОбороты

если можно немного подробнее, т.к. я делаю это первый раз :dfbsdfbsdf:

Yeahkaterina

Если заменить код

            | ИЗ
    |  РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиОбороты
    |  ГДЕ ПродажиОбороты.контрагенты=&Контрагенты
на
           | ИЗ
           |  РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, ,
           | "+УсловиеКонтрагента+") КАК ПродажиОбороты

и доплнить код

          Если ЗначениеЗаполнено(Контрагенты) Тогда
    Запрос.УстановитьПараметр("Контрагенты",Контрагенты);
КонецЕсли;


Вот Так:


       УсловиеКонтрагента = "";
      Если ЗначениеЗаполнено(Контрагенты) Тогда
      Запрос.УстановитьПараметр("Контрагенты",Контрагенты);
     УсловиеКонтрагента = "Контрагенты = &Контрагенты";
    КонецЕсли;

то
     ошибка такова:

"Переменная не определена (УсловиеКонтрагента)
    | "+<<?>>УсловиеКонтрагента+") КАК ПродажиОбороты (Проверка: Толстый клиент (обычное приложение))"

cska-fanat-kz

Ну УсловиеКонтрагента = ""; вставьте где нибудь в начале процедуры чтобы эта переменка инициализировалась.

Ваша строка такая

|  РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиОбороты

и условие ГДЕ надо убрать.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

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

Рейтинг@Mail.ru

Поиск