gifts2017

Заполнение отбора СКД программно и запуск отчета на СКД программно

Опубликовал alem alem (alem) в раздел Программирование - Практика программирования

Нужно было из справочника "Номенклатура" запустить отчет на СКД с отбором по элементу справочника. В интернете много решений, часть не работает (нужно бродить по веткам форума и читать как в итоге все заработало), часть слишком заумные (для спец. задач). Нужно было быстрое решение... Сделал сам. Если есть что то проще - пишите.

Итак, есть в конфигурации отчет на СКД (у меня это ОтчетПоЦенамИНаценкам)

В нужном месте добавляем кнопку вызова отчета, где пишем:


тОтчет = Отчеты.ОтчетПоЦенамИНаценкам.Создать();

НастройкиКД = тОтчет.КомпоновщикНастроек.ПолучитьНастройки();

ПолеНоменклатура = тОтчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("Номенклатура"); //поле отбора присутствует в СКД
ПолеНоменклатураСкидка = тОтчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("НоменклатураСкидка"); //поле отбора присутствует в СКД

НовыйОтбор = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйОтбор.ЛевоеЗначение = ПолеНоменклатура.Поле;
НовыйОтбор.ПравоеЗначение = ЭлементыФормы.Список.ТекущаяСтрока;
НовыйОтбор.Использование = Истина;

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

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

 

См. также

Подписаться Добавить вознаграждение
Комментарии
2. Константин Соболевский (Константин С.) 06.06.14 11:32
(1) отчасти прав, но примеры никак не относятся к СКД.
3. Сергей Ожерельев (Поручик) 06.06.14 21:47
(0) Ваш код в управляемом приложении работать не будет. Кто-нибудь наткнётся, сделает по образцу, убедится в очередной раз "В интернете много решений, часть не работает" и всё заверте....
4. Яков Коган (Yashazz) 08.06.14 16:22
Ну или Хрусталёву почитайте, или просто код типовой конфы посмотрите.
5. Сергей Смирнов (andogskiy) 11.06.14 15:43
(4) Yashazz, не подскажете, где в типовых конфигурациях можно посмотреть? Интересует механизм для управляемого приложения.
6. alem alem (alem) 25.06.14 17:14
Для управляемого приложения нужно видимо по предыдущим коментам ходить - это только для обычного, сам изучаю упр приложение.
К сожалению не осталось ссылки, но где то в предыдущей мой статье в коментах писали про встроенные механизмы ( как в 10.3 жмёшь свойства на форме и там где то настраиваешь - попробую поискаить статью снова
7. Il'ya Mankov (Tpakmop) 29.07.14 06:41
На клиенте сделал так:
	ФормаОтчета = ПолучитьФорму("Отчет.ПеремещенияНоменклатуры.Форма");
	КомпоновщикНастроек = ФормаОтчета.Отчет.КомпоновщикНастроек;
	Настройки = КомпоновщикНастроек.Настройки.Отбор;
	
	Для каждого ТекОтбор Из Настройки.Элементы Цикл
		
		Если Строка(ТекОтбор.ЛевоеЗначение) = "Номенклатура" Тогда
			Элемент = ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ТекОтбор.ИдентификаторПользовательскойНастройки);
			Если Элемент <> Неопределено Тогда
				Элемент.Использование = ЗначениеЗаполнено(спНом);
				Элемент.ВидСравнения = ?(ТипЗнч(спНом) = Тип("СписокЗначений"), ВидСравненияКомпоновкиДанных.ВСписке, ВидСравненияКомпоновкиДанных.Равно);
				Элемент.ПравоеЗначение = спНом;
			КонецЕсли;
		КонецЕсли;
		
		Если Строка(ТекОтбор.ЛевоеЗначение) = "Склад" Тогда
			Элемент = ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ТекОтбор.ИдентификаторПользовательскойНастройки);
			Если Элемент <> Неопределено Тогда
				Элемент.Использование = ЗначениеЗаполнено(спСклад);
				Элемент.ВидСравнения = ?(ТипЗнч(спСклад) = Тип("СписокЗначений"), ВидСравненияКомпоновкиДанных.ВСписке, ВидСравненияКомпоновкиДанных.Равно);
				Элемент.ПравоеЗначение = спСклад;
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла; 
...Показать Скрыть
8. Юрий Чертоляс (juricher) 22.05.16 16:19
Работает в УТ но только в толстом клиенте. Приходится выбирать режим запуска. Некошерно как-то
9. Sergey Andreev (starik-2005) 22.05.16 19:13
(8) juricher, в управляемом отбор передаете в параметрах открываемой формы - и все. Читайте синтаксис-помощник - умные существа писали.