gifts2017

Как программно открыть типовые отчеты (Карточку счета, Анализ счета, ОСВ по счету) с отбором, не изменяя сам отчет, в конфигурации БП 3.0

Опубликовал Андрей Кондратенко (Kondratenko.as) в раздел Программирование - Практика программирования

Была необходимость из обработки открывать типовые отчеты (ОСВ по счету, Анализ счета, Карточка счета) с отборами по субконто. В БП 2.0 все это делалось довольно просто, а вот в 3.0 пришлось поломать голову. Поскольку не нашел подобной статьи на Инфостарте, то решил поделиться опытом.

Механизм формирования отчетов в БП 3 переработали полностью по сравнению с БП 2, сделав его более «хитро-мудрым». Он стал гибок и удобен, но немного «замудрен».

При открытии форм в них можно передавать параметры, и каждый раз, когда открывается форма типового отчета, она проверяется на соответствие параметрам открытия, и если в них указать интересующие нас отборы, то отчет откроется сформированным согласно этим отборам.

Не буду сильно углублять в теорию, каждый и сам может посмотреть, как все формируется, просто выложу пример части кода, который позволит открыть отчет.

Пример для «Карточки счета».

 

//Имя вызываемого отчета карточка,анализ, ОСВ по счету . Я делал только для этих трех.
	ИмяОтчета = "КарточкаСчета";
	
	//Заполняем реквизиты отчета и обязательные поля (могут отличаться в зависимости от отчета) 
	ПользовательскиеНастройкиКомпоновкиДанных = Новый ПользовательскиеНастройкиКомпоновкиДанных;
	ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("Счет"          , Счет);
	ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("НачалоПериода" , Объект.ДатаНачало);
	ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("КонецПериода"  , Объект.ДатаКонец);
	ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("Организация"   , Объект.Организация);
	
	//Заполняем дополнительные отборы (в примере только для субконто1 и субконто2)
	НовыйОтбор                                        = ПользовательскиеНастройкиКомпоновкиДанных.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
	НовыйОтбор.ИдентификаторПользовательскойНастройки = "Отбор";	
	ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"Субконто1", Контрагент);
	ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"Субконто2", Договор);
	
	//Обязателньо указываем ключ (Равным параметру "ИДРасшифровки",я указывал Имя отчета ) НастройкиРасшифровки
	НастройкиРасшифровки = Новый Структура;
	НастройкиРасшифровки.Вставить(ИмяОтчета, ПользовательскиеНастройкиКомпоновкиДанных);
	
	УсловияОтбора = Новый Структура();
	УсловияОтбора.Вставить("НастройкиРасшифровки", НастройкиРасшифровки);
	
	//Дублируем настройки (у меня в файловой без этого не открывалось)
	ОбщиеНастройки = Новый Структура();
	ОбщиеНастройки.Вставить("Объект"              , УсловияОтбора);
	ОбщиеНастройки.Вставить("НастройкиРасшифровки", НастройкиРасшифровки);
	
	//Помещаем во временное хранилище (Уид можно случайный)
	АлресХранилища = ПоместитьВоВременноеХранилище(ОбщиеНастройки, Новый УникальныйИдентификатор);
	
	//Обращаем внимания на заполнемые настройки, если вы укажете отбор = истина то затрется все выше указанные отборы ( поскольку показатели и группировки я не менял, то оставил их типоыми) 
	ЗаполнятьТиповыеНастройки = Новый Структура;
	ЗаполнятьТиповыеНастройки.Вставить("Отбор"          , Ложь);
	ЗаполнятьТиповыеНастройки.Вставить("Группирова"     , Истина);
	ЗаполнятьТиповыеНастройки.Вставить("ВыводимыеДанные", Истина);
	ЗаполнятьТиповыеНастройки.Вставить("Показатели"     , Истина);
	
	//Сами параметры для предачи на форму ("ИДРасшифровки" - в данном случаи ключ от структуры НастройкиРасшифровки , если "СформироватьПриОткрытии" будет равно Ложь то отчет откроется с ранее сохраненными настройками) 	
	ПараметрыОтчета = Новый Структура;
	ПараметрыОтчета.Вставить("ВидРасшифровки"         , 1);
	ПараметрыОтчета.Вставить("АдресНастроек"          , АлресХранилища);
	ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
	ПараметрыОтчета.Вставить("ИДРасшифровки"          , ИмяОтчета);
	ПараметрыОтчета.Вставить("РежимРасшифровки"       , Истина);
	ПараметрыОтчета.Вставить("ЗаполняемыеНастройки"   , ЗаполнятьТиповыеНастройки);
	
	//Ну и открываем саму форму
	ОткрытьФорму("Отчет." + ИмяОтчета + ".Форма.ФормаОтчета", ПараметрыОтчета,ЭтаФорма);


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

 

P.S. Если что-то непонятно, то не стесняемся,  оставляем комментарии, по возможности буду отвечать.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Екатерина Тутубалина (kalaratra) 13.04.15 13:18
Круто! Спасибо! Пыталась разобраться сама, но не получилось((((
2. Александр Леонов (Леонов Александр) 14.04.15 17:20
А если через ВидРасшифровки = 2 ? ;)
3. Дмитрий Трушко (ЗС1) 15.04.15 08:56
Спасибо за публикацию!
А как можно потом еще сохранить результат полученного отчета в файл?
4. Андрей Кондратенко (Kondratenko.as) 15.04.15 13:03
(2) Леонов Александр,
Тогда не нужно будет помещать во временное хранилище ,он возьмет настройки из пользовательских которые будут указаны в параметрах передаваемых форме.
5. Андрей Кондратенко (Kondratenko.as) 15.04.15 13:14
(3) ЗС1, Сохранить что? Табличный документ ? Он формируется на сервере фоновым заданием и помешается во временное хранилище , а потом забирается оттуда отчетом. Адрес хранилища это УникальныйИдентификатор формы , получите его и потом проверяйте когда в хранилище что-то появится по этому адресу , то получите его и можете сохранить.
6. Ildar Gabdrakhmanov (spezc) 19.04.15 12:00
попробовал у себя вот этот код:

&НаСервере
Функция ПолучитьСсылкуПоКоду(Код) Экспорт

	Возврат Справочники.Склады.НайтиПоКоду(Код);

КонецФункции // ПолучитьСсылкуПоКоду()
 
&НаКлиенте
Процедура ОткрытьОтчет(Команда)
	
	ИмяОтчета = "ВедомостьТоварыНаСкладах";
	
    //Заполняем реквизиты отчета и обязательные поля (могут отличаться в зависимости от отчета) 
	ПользовательскиеНастройкиКомпоновкиДанных = Новый ПользовательскиеНастройкиКомпоновкиДанных;
	//ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("Склад"          , ПолучитьСсылкуПоКоду("00000118 "));
	
	// ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("НачалоПериода" , Объект.ДатаНачало);
	//ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("КонецПериода"  , Объект.ДатаКонец);
	//ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("Организация"   , Объект.Организация);
    
    //Заполняем дополнительные отборы (в примере только для субконто1 и субконто2)
    НовыйОтбор                                        = ПользовательскиеНастройкиКомпоновкиДанных.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
    НовыйОтбор.ИдентификаторПользовательскойНастройки = "Отбор";    
    ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"Склад", ПолучитьСсылкуПоКоду("00000118 "));
    //ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"Субконто2", Договор);
    
    //Обязателньо указываем ключ (Равным параметру "ИДРасшифровки",я указывал Имя отчета ) НастройкиРасшифровки
    НастройкиРасшифровки = Новый Структура;
    НастройкиРасшифровки.Вставить(ИмяОтчета, ПользовательскиеНастройкиКомпоновкиДанных);
    
    УсловияОтбора = Новый Структура();
    УсловияОтбора.Вставить("НастройкиРасшифровки", НастройкиРасшифровки);
    
    //Дублируем настройки (у меня в файловой без этого не открывалось)
    ОбщиеНастройки = Новый Структура();
    ОбщиеНастройки.Вставить("Объект"              , УсловияОтбора);
    ОбщиеНастройки.Вставить("НастройкиРасшифровки", НастройкиРасшифровки);
    
    //Помещаем во временное хранилище (Уид можно случайный)
    АлресХранилища = ПоместитьВоВременноеХранилище(ОбщиеНастройки, Новый УникальныйИдентификатор);
    
    //Обращаем внимания на заполнемые настройки, если вы укажете отбор = истина то затрется все выше указанные отборы ( поскольку показатели и группировки я не менял, то оставил их типоыми) 
    ЗаполнятьТиповыеНастройки = Новый Структура;
    ЗаполнятьТиповыеНастройки.Вставить("Отбор"          , Ложь);
    ЗаполнятьТиповыеНастройки.Вставить("Группирова"     , Истина);
    ЗаполнятьТиповыеНастройки.Вставить("ВыводимыеДанные", Истина);
    ЗаполнятьТиповыеНастройки.Вставить("Показатели"     , Истина);
    
    //Сами параметры для предачи на форму ("ИДРасшифровки" - в данном случаи ключ от структуры НастройкиРасшифровки , если "СформироватьПриОткрытии" будет равно Ложь то отчет откроется с ранее сохраненными настройками)     
    ПараметрыОтчета = Новый Структура;
    ПараметрыОтчета.Вставить("ВидРасшифровки"         , 1);
    ПараметрыОтчета.Вставить("АдресНастроек"          , АлресХранилища);
    ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
    ПараметрыОтчета.Вставить("ИДРасшифровки"          , ИмяОтчета);
    ПараметрыОтчета.Вставить("РежимРасшифровки"       , Истина);
    ПараметрыОтчета.Вставить("ЗаполняемыеНастройки"   , ЗаполнятьТиповыеНастройки);
    
    //Ну и открываем саму форму
    ОткрытьФорму("Отчет." + ИмяОтчета + ".Форма.ФормаОтчетаУправляемая", ПараметрыОтчета,ЭтаФорма);
	
КонецПроцедуры


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



Однако отчет открылся без отбора по складу... Или я суть статьи не понял?
7. Андрей Кондратенко (Kondratenko.as) 20.04.15 05:42
(6) spezc, ВедомостьТоварыНаСкладах - Такого отчета нет в БП 3 , данная статься только для конфигурации БП 3.0
8. Никита Уколов (Nikeuk) 20.04.15 16:59
Еще бы пример для ОСВ с группировками.....
9. Александр Маношкин (Manoshkin) 24.06.15 07:04
Спасибо! Здорово помогло! А есть пример как группировки вставить?
10. Андрей Почукаев (RodinMax) 26.06.15 06:55
а куда вышеописанный код вставлять?
- в подписку на событие?
- или внеш обработку какую делать из которой будут вызываться типовые отчеты конфигурации
Можете немного подробнее пояснить если не трудно. Спасибо
11. Андрей Кондратенко (Kondratenko.as) 26.06.15 08:07
(9) Manoshkin, примера нет. Так как не было такой необходимости.
12. Андрей Кондратенко (Kondratenko.as) 26.06.15 08:10
(10) RodinMax, Куда угодно)Откуда вы хотите вызывать типовой отчет по описанным настройкам. У меня он используется во многих местах. В том числе и во внешних обработках.
13. link li (link_l) 09.07.15 15:26
а есть пример для БП 2.0 (упп 1.3)?
14. владимир демченко (jour) 14.07.15 12:13
Отличная статья, выручил!
15. Андрей Кондратенко (Kondratenko.as) 14.07.15 14:54
(13) link_l, Для БП 2.0 и (УПП 1.3) примера нет
16. Роман Зиборов (RomanRomans) 14.08.15 14:19
Спасибо, Добрый человек
17. Юрий Муллабакиев (mulla1979) 14.08.15 15:04
Автору плюс! Практика важнее всего!
18. Рустам Гарипов (13kawaii13) 13.11.15 14:46
19. Владимир Орлов (vladmin) 02.03.16 17:31
Может уже кто-нибудь сделал для УПП 1.3 или БП2? В начале статьи же ясно было написано что переработал код для БП2
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа