Создание отбора

1. Гость 14.11.13 10:31
Подскажите пожалуйста как программно создать множественный и единичный отбор в отчете.
Отчет сделал без скд и построителя. Макетом и выводил области.
Создал в отчете реквизит тип выбрал отбор. Потом создал табличное поле в данных выбрал реквизит отбор .
В запросе получал сотрудников,подразделение,контрагент .
По теме из базы знаний
Найденные решения
3. kanalya 109 14.11.13 10:58 Сейчас в теме
Создать поле выбора для выбора вида сравнения


Создать поле ввода, тип значения которого менять при изменении вида сравнения


Перед открытием формы заполнить поля выбора вида сравнения
СписокВыбора  = Новый СписокЗначений;
	СписокВыбора.Добавить(ВидСравнения.Равно);
	СписокВыбора.Добавить(ВидСравнения.НеРавно);
	СписокВыбора.Добавить(ВидСравнения.ВСписке);
	СписокВыбора.Добавить(ВидСравнения.НеВСписке);
	СписокВыбора.Добавить(ВидСравнения.ВИерархии);
	СписокВыбора.Добавить(ВидСравнения.НеВИерархии);
	СписокВыбора.Добавить(ВидСравнения.ВСпискеПоИерархии);
	СписокВыбора.Добавить(ВидСравнения.НеВСпискеПоИерархии);

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

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


Добавить обработчик ПриИзменении для полей выбора
Процедура ПолеВидаСравненияНоменклатураПриИзменении(Элемент)
	ПриИзмененииПоляВидаСравнения(ЭтаФорма, Элемент, "Номенклатура");
КонецПроцедуры

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

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

		Если ЗначениеЗаполнено(Значение) Тогда
			Форма.ЭлементыФормы[Поле].Значение.Добавить(Значение);
		КонецЕсли;

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

Показать


Перед формированием отчета добавить условие в запрос в соответствии с заданными настройками
...
Если ЭлементыФормы.ОтборПоНоменклатуре.Значение И ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) тогда
	УсловиеНоменклатуры = "	Номенклатура "+ПолучитьУсловиеЗапроса(ЭтаФорма, "Номенклатура")+" (&Номенклатура)";
	Запрос.УстановитьПараметр("Номенклатура", ЭлементыФормы.Номенклатура.Значение);
КонецЕсли;
....

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

	Возврат ФрагментУсловия;
КонецФункции
Показать


В общем случае как-то так.. В СКД проще :)
shalupov61; John_Galt; user1112956; _7445_; BomjBandit; GV.; for_questions; dobreishii; Мах; an1c; ilnurmi; Inkeeper; yyx; dfgdsfgsdfg2011; +14 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. deniseek77 86 14.11.13 11:13 Сейчас в теме
(1) Антон, Вот как можно сделать, хоть тут и используется построитель, но отчет далее можно делать и не на нем:

http://novichok1c.ru/programmnoe-sozdanie-otborov-v-otchyote
Shurik1C; +1 Ответить
7. Гость 14.11.13 11:33
(6) deniseek77, Спасибо
2. Гость 14.11.13 10:32
Обычные формы
3. kanalya 109 14.11.13 10:58 Сейчас в теме
Создать поле выбора для выбора вида сравнения


Создать поле ввода, тип значения которого менять при изменении вида сравнения


Перед открытием формы заполнить поля выбора вида сравнения
СписокВыбора  = Новый СписокЗначений;
	СписокВыбора.Добавить(ВидСравнения.Равно);
	СписокВыбора.Добавить(ВидСравнения.НеРавно);
	СписокВыбора.Добавить(ВидСравнения.ВСписке);
	СписокВыбора.Добавить(ВидСравнения.НеВСписке);
	СписокВыбора.Добавить(ВидСравнения.ВИерархии);
	СписокВыбора.Добавить(ВидСравнения.НеВИерархии);
	СписокВыбора.Добавить(ВидСравнения.ВСпискеПоИерархии);
	СписокВыбора.Добавить(ВидСравнения.НеВСпискеПоИерархии);

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

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


Добавить обработчик ПриИзменении для полей выбора
Процедура ПолеВидаСравненияНоменклатураПриИзменении(Элемент)
	ПриИзмененииПоляВидаСравнения(ЭтаФорма, Элемент, "Номенклатура");
КонецПроцедуры

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

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

		Если ЗначениеЗаполнено(Значение) Тогда
			Форма.ЭлементыФормы[Поле].Значение.Добавить(Значение);
		КонецЕсли;

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

Показать


Перед формированием отчета добавить условие в запрос в соответствии с заданными настройками
...
Если ЭлементыФормы.ОтборПоНоменклатуре.Значение И ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) тогда
	УсловиеНоменклатуры = "	Номенклатура "+ПолучитьУсловиеЗапроса(ЭтаФорма, "Номенклатура")+" (&Номенклатура)";
	Запрос.УстановитьПараметр("Номенклатура", ЭлементыФормы.Номенклатура.Значение);
КонецЕсли;
....

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

	Возврат ФрагментУсловия;
КонецФункции
Показать


В общем случае как-то так.. В СКД проще :)
shalupov61; John_Galt; user1112956; _7445_; BomjBandit; GV.; for_questions; dobreishii; Мах; an1c; ilnurmi; Inkeeper; yyx; dfgdsfgsdfg2011; +14 Ответить
5. Гость 14.11.13 11:07
(3) kanalya,Спасибо сейчас попробую так сделать
4. Julia777 9 14.11.13 10:59 Сейчас в теме
А поподробнее?что надо выбрать и по каким условиям?
8. Гость 14.11.13 15:36
получилось создать отбор ,только привезать его к запросу не получаеться, я так понял что нужно в запросе где условия,вставлять новые условия учитывая отборы

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

а это код для отбора
Отбор = ВнешнийОтчетОбъект.ОтборОбщий;
ДоступныеПоляОтбора = Отбор.ПолучитьДоступныеПоля();
Поле = ДоступныеПоляОтбора.Добавить("Контрагент", "Контрагент",
Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
Поле.Отбор = Истина;
Поле = ДоступныеПоляОтбора.Добавить("Филиал", "Филиал",
Новый ОписаниеТипов("СправочникСсылка.Филиалы"));
Поле.Отбор = Истина;
Поле = ДоступныеПоляОтбора.Добавить("Сотрудник", "Сотрудник",
Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Поле.Отбор = Истина;
9. Гость 15.11.13 14:44
подскажите пожадуйста как удалить из отбора некоторые виды сравнения?
10. mylogin 107 15.11.13 14:55 Сейчас в теме
СтандартнаяОбработка = Ложь;

СписокВыбора = Новый СписокЗначений;

СписокВыбора.Добавить(ВидСравнения.Равно, "Равно");
СписокВыбора.Добавить(ВидСравнения.НеРавно, "Не равно");
СписокВыбора.Добавить(ВидСравнения.ВСписке, "В списке");
СписокВыбора.Добавить(ВидСравнения.НеВСписке, "Не в списке");

ВыбЭлемент = ЭтаФорма.ВыбратьИзСписка(СписокВыбора);

ЭтаФорма.ПолеВидСравнения = ВыбЭлемент.Значение;
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот