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

Программирование - Практика программирования

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

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

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

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


 

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

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

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

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

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

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

 

22

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Armando 1388 05.06.14 21:50 Сейчас в теме
2. Константин С. 548 06.06.14 11:32 Сейчас в теме
(1) отчасти прав, но примеры никак не относятся к СКД.
3. Поручик 4189 06.06.14 21:47 Сейчас в теме
(0) Ваш код в управляемом приложении работать не будет. Кто-нибудь наткнётся, сделает по образцу, убедится в очередной раз "В интернете много решений, часть не работает" и всё заверте....
rpgshnik; user811769; dj_serega; VachKirp; JohnyDeath; orfos; +6 Ответить
4. Yashazz 2323 08.06.14 16:22 Сейчас в теме
Ну или Хрусталёву почитайте, или просто код типовой конфы посмотрите.
5. andogskiy 11.06.14 15:43 Сейчас в теме
(4) Yashazz, не подскажете, где в типовых конфигурациях можно посмотреть? Интересует механизм для управляемого приложения.
6. alem 34 25.06.14 17:14 Сейчас в теме
Для управляемого приложения нужно видимо по предыдущим коментам ходить - это только для обычного, сам изучаю упр приложение.
К сожалению не осталось ссылки, но где то в предыдущей мой статье в коментах писали про встроенные механизмы ( как в 10.3 жмёшь свойства на форме и там где то настраиваешь - попробую поискаить статью снова
7. Tpakmop 11 29.07.14 06:41 Сейчас в теме
На клиенте сделал так:
	ФормаОтчета = ПолучитьФорму("Отчет.ПеремещенияНоменклатуры.Форма");
	КомпоновщикНастроек = ФормаОтчета.Отчет.КомпоновщикНастроек;
	Настройки = КомпоновщикНастроек.Настройки.Отбор;
	
	Для каждого ТекОтбор Из Настройки.Элементы Цикл
		
		Если Строка(ТекОтбор.ЛевоеЗначение) = "Номенклатура" Тогда
			Элемент = ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ТекОтбор.ИдентификаторПользовательскойНастройки);
			Если Элемент <> Неопределено Тогда
				Элемент.Использование = ЗначениеЗаполнено(спНом);
				Элемент.ВидСравнения = ?(ТипЗнч(спНом) = Тип("СписокЗначений"), ВидСравненияКомпоновкиДанных.ВСписке, ВидСравненияКомпоновкиДанных.Равно);
				Элемент.ПравоеЗначение = спНом;
			КонецЕсли;
		КонецЕсли;
		
		Если Строка(ТекОтбор.ЛевоеЗначение) = "Склад" Тогда
			Элемент = ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ТекОтбор.ИдентификаторПользовательскойНастройки);
			Если Элемент <> Неопределено Тогда
				Элемент.Использование = ЗначениеЗаполнено(спСклад);
				Элемент.ВидСравнения = ?(ТипЗнч(спСклад) = Тип("СписокЗначений"), ВидСравненияКомпоновкиДанных.ВСписке, ВидСравненияКомпоновкиДанных.Равно);
				Элемент.ПравоеЗначение = спСклад;
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла; 
Показать
mark_oilbass; limonas; +2 Ответить
8. juricher 5 22.05.16 16:19 Сейчас в теме
Работает в УТ но только в толстом клиенте. Приходится выбирать режим запуска. Некошерно как-то
9. starik-2005 1557 22.05.16 19:13 Сейчас в теме
(8) juricher, в управляемом отбор передаете в параметрах открываемой формы - и все. Читайте синтаксис-помощник - умные существа писали.
10. igor_gk 46 01.02.17 10:33 Сейчас в теме
Это называется: "Пока другие умничали и давали очень умные советы пришел мужик, взял молча молоток и вбил гвоздь".
Просто и практично.
Спасибо.
11. k.dm.v@mail.ru 16.02.17 13:07 Сейчас в теме
Как работает в упр. формах

&НаКлиенте
Процедура ВывестиВОтчете(Команда)
	
	Номенклатура = Объект.Ссылка;
	//структура отбора
	Отбор = Новый Структура("Номенклатура", Номенклатура);
	Отбор.Вставить("НачалоПериода", Дата(2016, 01, 01, 00, 00, 00));
	Отбор.Вставить("КонецПериода", ТекущаяДата());
	ПараметрыФормы = Новый Структура("СформироватьПриОткрытии, Отбор", Истина, Отбор);
	ФормаОтчета = ПолучитьФорму("Отчет.ВедомостьПоТоварамНаСкладах.ФормаОбъекта", ПараметрыФормы);
	//затираем пользовательские настройки
	НовыеПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
	ФормаОтчета.Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеПользовательскиеНастройки);
	ОткрытьФорму(ФормаОтчета);

КонецПроцедуры
Показать
Sakh1CPRO; lenna_1985; mark_oilbass; dj_serega; okami; Aero; GrafuH4uk; The Ded; victory; burni4; +10 Ответить
16. Sakh1CPRO 16.01.19 06:53 Сейчас в теме
(11) Круто сделал по вашему образцу все работает как надо
12. smirnova_a 05.09.17 18:15 Сейчас в теме
13. Shurik1C 27.11.17 18:28 Сейчас в теме
Добрый вечер!
Подскажите, а как передать параметр в отчет если в СКД в типовом отчете он идёт как "АналитикаНоменклатуры.Номенклатура", типа отбор через "."
Пробовал создавать и структуру в структуре и через точку - не помогает, или ругается или пишет что не видит поле :(
14. klod2000 17.05.18 12:10 Сейчас в теме
Автор, спасибо! Очень помогло!
15. user1022969 06.09.18 23:59 Сейчас в теме
Все конечно жутко умные, но только в простых формах вам автоматически дядя Пушкин отчет не запустит. Поэтому нормальное решение. Правда, без расшифровок почему то формирует. Приходится ещё раз нажимать "Сформировать"
Оставьте свое сообщение