Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
16 Дек 2017, 00:49
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: подбор из списка в отчете  (Прочитано 2057 раз)

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

Оффлайн ls600

  • ****
  • Сообщений: 322
  • РЕПУТАЦИЯ: 20
  • КПД: 6%
  • Регистрация: 2012-05-14
  • Сайт: 
  • Профессия: Программист 1С
Доброго времени суток. Подскажите как реализовать в отчете подбор из списка?.
В отчете уже реализовано отбор т.е если указан участок то выводит данные по конкретному участку, иначе по всем участкам.
На рис 1 как форма выглядит до изменения.

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




На форуме инфорстарта нашел похожую тему [size=78%]http://forum.infostart.ru/forum26/topic98695/[/size]


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



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


Процедура ПолеВидаСравненияУчастокПриИзменении(Элемент)
   ПриИзмененииПоляВидаСравнения(ЭтаФорма,Элемент,"Участок");
КонецПроцедуры


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


Функция ПолучитьУсловиеЗапроса(Форма, Поле) Экспорт
   ФрагментУсловия = "";
   Если Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.Равно Тогда
      ФрагментУсловия = "=";
   ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВСписке Тогда
      ФрагментУсловия = "В";
   КонецЕсли;
   
   Возврат ФрагментУсловия;
КонецФункции


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










Оффлайн Yura063

  • *****
  • Сообщений: 1045
  • РЕПУТАЦИЯ: 136
  • КПД: 13%
  • Регистрация: 2010-11-15
  • Сайт: yuis.ru
  • Профессия: Программист 1С
Не увидел где вы вызываете функцию! И Сравнение "В" параметр в скобках!
а вы меняете равно на в не ставя скобки. Нет измененного запроса!
Помогли, отблагодари!

Оффлайн ls600

  • ****
  • Сообщений: 322
  • РЕПУТАЦИЯ: 20
  • КПД: 6%
  • Регистрация: 2012-05-14
  • Сайт: 
  • Профессия: Программист 1С
в том то и дело я затрудняюсь изменить запрос что б он работал.
 без функциии изменил получается так

//в запросе
| "+?(ЗначениеЗаполнено(ЭлементыФормы.Участок.Значение) ,"И Совещание.Участок = &Участок","")+"

....

запрос.УстановитьПараметр("Участок",ЭлементыФормы.Участок.Значение);
...

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

{Форма.ФормаОтчета.Форма(99)}: Ошибка при вызове метода контекста (Выполнить)
   Результат = запрос.Выполнить();
по причине:
{(31, 22)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
 неограниченной длины и поля несовместимых типов.
И Совещание.Участок <<?>>= &Участок


Оффлайн Yura063

  • *****
  • Сообщений: 1045
  • РЕПУТАЦИЯ: 136
  • КПД: 13%
  • Регистрация: 2010-11-15
  • Сайт: yuis.ru
  • Профессия: Программист 1С
Функция ПолучитьУсловиеЗапроса(Форма, Поле) Экспорт    ФрагментУсловия = "";    Если Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.Равно Тогда       ФрагментУсловия = "=";    ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВСписке Тогда       ФрагментУсловия = "В";    КонецЕсли;        Возврат ФрагментУсловия; КонецФункции

Скорее всего вам надо прописывать полностью строку условия для запроса, притом в условии у вас нет ФрагментаУсловия "НЕ В".
Помогли, отблагодари!

Оффлайн ls600

  • ****
  • Сообщений: 322
  • РЕПУТАЦИЯ: 20
  • КПД: 6%
  • Регистрация: 2012-05-14
  • Сайт: 
  • Профессия: Программист 1С
в функции будет тогда вот так
Функция ПолучитьУсловиеЗапроса(Форма, Поле) Экспорт
ФрагментУсловия = "";
Если Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.Равно Тогда
ФрагментУсловия = "=";
  ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеРавно Тогда
        ФрагментУсловия = "<>";
    ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВСписке Тогда
        ФрагментУсловия = "В";
    ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеВСписке Тогда
        ФрагментУсловия = "НЕ В";
КонецЕсли;

Возврат ФрагментУсловия;
КонецФункции
если не затруднит как в запросе будет выглядит условие??? :dfbsdfbsdf:

Оффлайн Yura063

  • *****
  • Сообщений: 1045
  • РЕПУТАЦИЯ: 136
  • КПД: 13%
  • Регистрация: 2010-11-15
  • Сайт: yuis.ru
  • Профессия: Программист 1С
Запрос менять придется иначе не как!!!
| "+?(ЗначениеЗаполнено(ЭлементыФормы.Участок.Значение) ,"И Совещание.Участок = &Участок","")+"

Надо что-то типа:
| "+?(ЗначениеЗаполнено(ЭлементыФормы.Участок.Значение) ,СтрокаУсловия,"")+"
А в функции:
Функция ПолучитьУсловиеЗапроса(Форма, Поле) Экспорт
   СтрокаУсловия = "";
   Если Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.Равно Тогда
      СтрокаУсловия = "И Совещание.Участок = &Участок";
   ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВСписке Тогда
      СтрокаУсловия = "И Совещание.Участок В (&Участок);
   КонецЕсли;
   
   Возврат СтрокаУсловия;
КонецФункции
Помогли, отблагодари!

Оффлайн ls600

  • ****
  • Сообщений: 322
  • РЕПУТАЦИЯ: 20
  • КПД: 6%
  • Регистрация: 2012-05-14
  • Сайт: 
  • Профессия: Программист 1С
| "+?(ЗначениеЗаполнено(ЭлементыФормы.Участок.Значение) ,СтрокаУсловия,"")+"

вот так работает
|+?(ЗначениеЗаполнено(ЭлементыФормы.Участок.Значение) ,ПолучитьУсловиеЗапроса(ЭтаФорма,"Участок"),"")+"

Yura063 благодарю!!!!! Все Работает.!!!
:zebzdr:


Теги:
 

"Зебра" во внешнем отчете"

Автор AK11Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 364
Последний ответ 23 Дек 2016, 22:01
от AK11
как в отчете "Главная книга" отображать для счетов столбцы не только "С кредита", но и "На дебет"

Автор ktu78Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 1130
Последний ответ 13 Мар 2016, 00:55
от дфтын
Не заполняются колонки "Цена" и "Сумма" в отчете "Остатки товаров принятых на комиссию". УТ11

Автор VladimirMelnychenkoРаздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 473
Последний ответ 18 Янв 2017, 11:42
от VladimirMelnychenko
Изменение цвета при подборе сотрудника в форме списка справочника "Сотрудники организации" для документа "Зарплата к выплате организаций" ЗУП 2.5

Автор ksander-farsРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 270
Последний ответ 12 Окт 2017, 14:02
от wise
"Задваивание" данных в отчете

Автор mashencev_antonРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 13
Просмотров: 7354
Последний ответ 15 Окт 2015, 11:21
от Mari_beginner

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
154 Сообщений
ilyay ilyay
66 Сообщений
alex0402
53 Сообщений
AIFrame
46 Сообщений
oleg-x
44 Сообщений
andron81_81
44 Сообщений
MuI_I_Ika MuI_I_Ika
32 Сообщений
BuhRust
32 Сообщений
Golickoff Golickoff
31 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 180
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal