[РЕШЕНО] подбор из списка в отчете

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ls600, 5 ноя 2014.

  1. TopicStarter Overlay
    ls600
    Offline

    ls600 Опытный в 1С

    Регистрация:
    14 май 2012
    Сообщения:
    132
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток. Подскажите как реализовать в отчете подбор из списка?.
    В отчете уже реализовано отбор т.е если указан участок то выводит данные по конкретному участку, иначе по всем участкам.
    На рис 1 как форма выглядит до изменения.

    Код:
    Процедура КнопкаСформироватьНажатие(Кнопка)
       Макет = ПолучитьМакет("Макет");
       ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
       ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
       ТабДок.ФиксацияСверху = ТабДок.Область("R5C1:R5C20").Низ;
       ТабДок.ТолькоПросмотр = Истина;
      
       запрос = Новый запрос;
       запрос.Текст = "ВЫБРАТЬ
                      |   Совещание.Регистратор.Номер КАК Номер,
                      |   Совещание.КостЦентр,
                      |   Совещание.Линия,
                      |   Совещание.Участок.Код КАК Код,
                      |   Совещание.Участок,
                      |   Совещание.ФЛСОборудования,
                      |   Совещание.НомерОборудованияКЦ,
                      |   Совещание.Регистратор.Дата КАК ДатаДок,
                      |   Совещание.Заявитель,
                      |   Совещание.ОписаниеЗапроса,
                      |   Совещание.ДляКого,
                      |   Совещание.ЗаявленнаяДатаЗавершения,
                      |   Совещание.ИмяРуководителя,
                      |   Совещание.Утверждено,
                      |   Совещание.ПричинаОтказа,
                      |   Совещание.Исполнитель,
                      |   Совещание.ДатаЗавершения,
                      |   Совещание.СтатусВыполнения,
                      |   Совещание.ОжидаемаяДатаЗавершения КАК ОжидаемаяДатаЗавершения,
                      |   Совещание.Примечание,
                      |   Совещание.Регистратор КАК Ссылка
                      |ИЗ
                      |   РегистрНакопления.Совещание КАК Совещание
                      |ГДЕ
                      |   Совещание.Регистратор.Дата МЕЖДУ &ДатаНач И &ДатаКон"+?(ЗначениеЗаполнено(СтатусВыполнения), " И Совещание.СтатусВыполнения = &СтатусВыполнения","")+"
                   |   "+?(ЗначениеЗаполнено(Линия) ,          " И Совещание.Линия = &Линия","")+"
                   |   "+?(ЗначениеЗаполнено(ДатаНачЗавершения) ИЛИ ЗначениеЗаполнено(ДатаКонЗавершения)," И Совещание.ОжидаемаяДатаЗавершения МЕЖДУ &ДатаНачЗавершения И &ДатаКонЗавершения ","")+"
                   |   "+?(ЗначениеЗаполнено(Заявитель) ,       " И Совещание.Заявитель = &Заявитель","")+"
                   |   "+?(ЗначениеЗаполнено(Исполнитель) ,    " И Совещание.Исполнитель = &Исполнитель","")+"
                      |   "+?(ЗначениеЗаполнено(Участок) ,       " И Совещание.Участок = &Участок","")+"
                   |   "+?(ЗначениеЗаполнено(Утверждено) ,       " И Совещание.Утверждено = &Утверждено","")+"
                   |ИТОГИ ПО
                   |   Номер";
                  
       запрос.УстановитьПараметр("ДатаНач" ,НачалоДня(ДатаНач));
       запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
       запрос.УстановитьПараметр("СтатусВыполнения",СтатусВыполнения);
       запрос.УстановитьПараметр("ДатаНачЗавершения",ДатаНачЗавершения);
       запрос.УстановитьПараметр("ДатаКонЗавершения",ДатаКонЗавершения);
       запрос.УстановитьПараметр("Заявитель",Заявитель);
       запрос.УстановитьПараметр("Исполнитель",Исполнитель);
       запрос.УстановитьПараметр("Участок",Участок);
       запрос.УстановитьПараметр("Утверждено",Утверждено);
       запрос.УстановитьПараметр("Линия",Линия);
      
       ОбластьЗаголовок  = Макет.ПолучитьОбласть("Заголовок");
       ОбластьШапка     = Макет.ПолучитьОбласть("ШапкаТаблицы");
       Обл              = Макет.ПолучитьОбласть("Обл");
       ОбластьНомер     = Макет.ПолучитьОбласть("Номер");
       ОбластьДетали      = Макет.ПолучитьОбласть("Детали");
      
       Результат = запрос.Выполнить();
      
       ТабДок.Очистить();
       ТабДок.НачатьАвтогруппировкуСтрок();
      
       ОбластьЗаголовок.Параметры.Текст = СоставитьЗаголовок();
       ТабДок.Вывести(ОбластьЗаголовок);
       ТабДок.Вывести(ОбластьШапка);
       ТабДок.Вывести(Обл);
      
       ВыборкаНомера = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
       Пока ВыборкаНомера.Следующий() Цикл
          ОбластьНомер.Параметры.Заполнить(ВыборкаНомера);
          ТабДок.Вывести(ОбластьНомер, ВыборкаНомера.Уровень());
          ВыборкаДетали = ВыборкаНомера.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
          Пока ВыборкаДетали.Следующий() Цикл
             ОбластьДетали.Параметры.Заполнить(ВыборкаДетали);
             Если ВыборкаДетали.СтатусВыполнения = 100 Тогда
                ОбластьДетали.Область(1,8,1,2).ЦветФона = WebЦвета.СероСиний;
             Иначе
                ОбластьДетали.Область(1,8,1,2).ЦветФона = WebЦвета.Белый;
             КонецЕсли;
             ТабДок.Вывести(ОбластьДетали, ВыборкаДетали.Уровень());
          КонецЦикла;
       КонецЦикла;
      
       ТабДок.Показать();
       ТабДок.ЗакончитьАвтогруппировкуСтрок();
         
    КонецПроцедуры
    На форуме инфорстарта нашел похожую тему http://forum.infostart.ru/forum26/topic98695/

    вот что у меня из этого получилось. Рис 2

    Код:
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
       СписокВыбора  = Новый СписокЗначений;
       СписокВыбора.Добавить(ВидСравнения.Равно);
       СписокВыбора.Добавить(ВидСравнения.ВСписке);
      
       ЭлементыФормы.ПолеВидаСравненияУчасток.СписокВыбора = СписокВыбора;
       ЭлементыФормы.ПолеВидаСравненияУчасток.Значение = ВидСравнения.Равно;
       ЭлементыФормы.Участок.ТипЗначения = Новый  ОписаниеТипов("СправочникСсылка.Участок");
      
    КонецПроцедуры
    
    
    Процедура ПолеВидаСравненияУчастокПриИзменении(Элемент)
       ПриИзмененииПоляВидаСравнения(ЭтаФорма,Элемент,"Участок");
    КонецПроцедуры
    
    
    Процедура ПриИзмененииПоляВидаСравнения(Форма,Элемент,Поле)Экспорт
       Если Элемент.Значение = ВидСравнения.ВСписке
          ИЛИ Элемент.Значение = ВидСравнения.НеВСписке
          Тогда
          Значение = Неопределено;
          Если Форма.ЭлементыФормы[Поле].ТипЗначения <> Новый ОписаниеТипов("СписокЗначений")Тогда
             Значение = Форма.ЭлементыФормы[Поле].Значение;
             Форма.ЭлементыФормы[Поле].ТипЗначения = Новый ОписаниеТипов("СписокЗначений");
             Форма.ЭлементыФормы[Поле].ТипЗначенияСписка = Новый ОписаниеТипов("СправочникСсылка."+Поле);
          КонецЕсли;
         
          Если ЗначениеЗаполнено(Значение) Тогда
             Форма.ЭлементыФормы[Поле].Значение.Добавить(Значение);
          КонецЕсли;
         
       ИначеЕсли Элемент.Значение = ВидСравнения.Равно
          Тогда
          Значение = Неопределено;
          Если Форма.ЭлементыФормы[Поле].ТипЗначения = Новый ОписаниеТипов("СписокЗначений")Тогда
             Если Форма.ЭлементыФормы[Поле].Значение.Количество()>0 Тогда
                Значение = Форма.ЭлементыФормы[Поле].Значение[0].Значение;
             КонецЕсли;   
             Форма.ЭлементыФормы[Поле].ТипЗначения = Новый ОписаниеТипов("СправочникСсылка."+Поле);
          КонецЕсли;
         
          Если ЗначениеЗаполнено(Значение) Тогда
             Форма.ЭлементыФормы[Поле].Значение = Значение;
          КонецЕсли;
         
       КонецЕсли;
    КонецПроцедуры
    
    
    Функция ПолучитьУсловиеЗапроса(Форма, Поле) Экспорт
       ФрагментУсловия = "";
       Если Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.Равно Тогда
          ФрагментУсловия = "=";
       ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВСписке Тогда
          ФрагментУсловия = "В";
       КонецЕсли;
      
       Возврат ФрагментУсловия;
    КонецФункции
    В итоге нужно добавить условие в перед формированием запроса.... и тут я в тупик зашел как и что сделать. я так понял нужно функцию задействовать в параметрах запроса.

    Вложения:

    • 1.JPG
      1.JPG
      Размер файла:
      41 КБ
      Просмотров:
      4
    • 2.JPG
      2.JPG
      Размер файла:
      68,2 КБ
      Просмотров:
      4
  2. TopicStarter Overlay
    ls600
    Offline

    ls600 Опытный в 1С

    Регистрация:
    14 май 2012
    Сообщения:
    132
    Симпатии:
    0
    Баллы:
    26
    Тема Закрыта!!!

Поделиться этой страницей