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

Отбор в Отчете

Автор ls600, 01 окт 2014, 15:09

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

ls600

Доброго времени суток. 
Изменяю отчет столкнулся с такой задачей. Простой отчет который берет данные из регистра накопления.
Нужно сделать отбор по Реквизиту у которого тип Строка.  В самом отчете добавил Реквизит "НомерЗаявки" .
Если на форме отчета поле пустое то отчет формирует весь список заявок, а если ввели номер заявки то сформировался отчет по конкретной заявке.

P.S Обычное приложение

Процедура КнопкаСформироватьНажатие(Кнопка)
Макет  = ПолучитьМакет("Макет");
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.ФиксацияСверху = ТабДок.Область("R5C1:R6C23").Низ;
ТабДок.ТолькоПросмотр   = Истина;
ТабДок.АвтоМасштаб = Истина;


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

                       | И ВЫБОР
               | КОГДА &НомерЗаявки          <===== Вот сюда что дописать?????
               | ТОГДА АнализДвиженияЗаявок.Участок = &НомерЗаявки
               | ИНАЧЕ ИСТИНА
               | КОНЕЦ
               |ИТОГИ ПО
               | Номер";    
   
   
запрос.УстановитьПараметр("ДатаНач" ,НачалоДня(ДатаНач));
запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
запрос.УстановитьПараметр("КемПоданаЗаявка",КемПоданаЗаявка);
запрос.УстановитьПараметр("Участок",Участок);
запрос.УстановитьПараметр("НомерЗаявки",НомерЗаявки);

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

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

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

ОбластьЗаголовок.Параметры.Текст = СоставитьЗаголовок();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапка);

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

ТабДок.Показать();
ТабДок.ЗакончитьАвтогруппировкуСтрок();

КонецПроцедуры


cska-fanat-kz

можно вместо

|ГДЕ
                   |    АнализДвиженияЗаявок.Регистратор.Дата МЕЖДУ &ДатаНач И &ДатаКон
                   |    И ВЫБОР
                   |            КОГДА &КемПоданаЗаявка <> ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)
                   |                ТОГДА АнализДвиженияЗаявок.КемПоданаЗаявка = &КемПоданаЗаявка
                   |            ИНАЧЕ ИСТИНА
                   |        КОНЕЦ
                   |    И ВЫБОР
                   |            КОГДА &Участок <> ЗНАЧЕНИЕ(Справочник.Участок.ПустаяСсылка)
                   |                ТОГДА АнализДвиженияЗаявок.Участок = &Участок
                   |            ИНАЧЕ ИСТИНА
                   |        КОНЕЦ

                       |    И ВЫБОР
                   |            КОГДА &НомерЗаявки          <===== Вот сюда что дописать?????
                   |                ТОГДА АнализДвиженияЗаявок.Участок = &НомерЗаявки
                   |            ИНАЧЕ ИСТИНА
                   |        КОНЕЦ

написать так

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

cska-fanat-kz

Мысли вслух...

Запрос к таблице движений регистра? Он (регистр) точно вообще нужен?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

ls600

если отбор не делать отчет формирует.
как только одно из полей заполняю то вылетает ошибка

{Отчет.АнализДвиженияЗаявок.Форма.ФормаОтчета.Форма(94)}: Ошибка при вызове метода контекста (Выполнить)
      Результат = запрос.Выполнить();           
по причине:
{(32, 5)}: Синтаксическая ошибка "АнализДвиженияЗаявок.Участок"
<<?>>АнализДвиженияЗаявок.Участок = &НомерЗаявки

Добавлено: 02 окт 2014, 07:29


добавил "И", только отбор по заявкам не идет:( по КемПодано и Участку отбор без проблем
        |    АнализДвиженияЗаявок.Регистратор.Дата МЕЖДУ &ДатаНач И &ДатаКон
   |    "+?(ЗначениеЗаполнено(КемПоданаЗаявка),"И АнализДвиженияЗаявок.КемПоданаЗаявка = &КемПоданаЗаявка","")+"
   |    "+?(ЗначениеЗаполнено(Участок)," И АнализДвиженияЗаявок.Участок = &Участок","")+"
   |    "+?(ПустаяСтрока(НомерЗаявки),""," И АнализДвиженияЗаявок.Участок = &НомерЗаявки")+"

cska-fanat-kz

да, забыл про "И" )

может быть тут:
И АнализДвиженияЗаявок.Участок = &НомерЗаявки"

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

ls600

+?(ПустаяСтрока(НомерЗаявки),""," И АнализДвиженияЗаявок.НомерЗаявки = &НомерЗаявки")

вот так работает.)))
Участок это измерение в регистре!!!
С меня пиво:D

Теги:

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

Рейтинг@Mail.ru

Поиск