Каталог решений - Отчет на СКД с использованием форм из БСП. Варианты передачи списка значений в параметр СКД

Отчет на СКД с использованием форм из БСП. Варианты передачи списка значений в параметр СКД

Отчет на СКД с использованием форм из БСП. Варианты передачи списка значений в параметр СКД

В наличии

Показаны способы передачи списка значений в значение по умолчанию параметра СКД типового отчета из БСП, с возможностью последующей модификации пользователем.

Категория:

Описание

Платформа на момент разработки: 1С:Предприятие 8.3 (8.3.19.1467)

Конфигурация: Управление холдингом, редакция 3.1 (3.1.16.5)

Версия БСП: 3.1.5.306

Понадобилось написать отчет на СКД.

Было решено использовать формы отчета, предоставляемые БСП ("ФормаОтчета", "ФормаНастроекОтчета", "ФормаВариантаОтчета"). Это удобно и для разработчика, и для пользователя — в большинстве случаев достаточно создать основную схему компоновки данных, задать параметры и отборы — и удобный отчет с развитым функционалом готов. Он позволит пользователю задавать всевозможные отборы, сохранять и редактировать свои варианты отчета, просматривать, распечатывать и отправлять результат на почту. При этом, помимо того, что не нужно создавать свои формы отчета — зачастую можно вообще обойтись без написания какого-либо программного кода, за исключением текста запроса в наборе данных схемы компоновки отчета. Удобно со всех сторон.

Формы отчета, предоставляемые БСП, указаны в палитре свойств для корня конфигурации:

 

 

Для того, чтобы задействовать их в своем отчете, в свойствах отчета просто не нужно указывать никаких форм — тогда платформа применит формы от БСП, указанные в корне конфигурации:

 

 

Но, как это часто бывает — есть и нюансы).

На практике достаточно часто встречается ситуация: в запросе СКД один из параметров — список значений. В моем случае это список с элементами типа "СправочникСсылка.СтатьиЗатрат", причем статьи затрат — не предопределенные, а созданные пользователями в режиме 1С:Предприятие. А это значит, что непосредственно задать их в редакторе схемы компоновки не получится:

 

 

Таким образом,

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

 

Есть два способа решения задачи.

Первый способ (сохраняя и загружая настройки в xml)

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

Вариант А.

Пробуем решить "в лоб", сохраняя и загружая настройки в xml из БСП форм. Забегая вперед — получим ошибку "Ошибка преобразования данных XDTO", но её можно обойти.

Краткую видеоинструкция на эту тему видел по адресу https://youtu.be/HnIErIECLeM

Сохраняем настройки в xml из отчета в режиме 1С:Предприятие, предварительно заполнив параметр "Статьи затрат" нужным списком статей:

 

 

При загрузке настроек xml  в Конфигураторе получаем ошибку преобразования типов:

 

 

В моем случае платформа почему-то ругалась на документ ПоступлениеДопРасходов, хотя нигде в запросе и настройках он не упомянут:

 

 

Скорее всего, это связано с внутренней реализацией механизма выгрузки настроек СКД в БСП, в результате которой генерится невалидный xml (или процедура загрузки настроек схемы из файла в платформе требует доработки?..).

Решается проблема достаточно просто — редактированием xml файла.

Если в редакторе XML (я пользуюсь старым добрым XML Notepad 2007, который можно бесплатно скачать с сайта Microsoft), то надо удалить ветку с тэгом additionalProperties:

 

 

Если в Блокноте, то надо найти открывающий тэг <additionalProperties> и удалить все до закрывающего тэга </additionalProperties> включительно:

 

 

После сохранения отредактированный файл настроек без проблем загрузился в Конфигуратор:

 

 

Вариант Б.

Если не хотите заморачиваться с редактированием xml-файла настроек.

Сначала в Конфигураторе надо создать свои форму отчета и форму настройки отчета, используя автоматически создаваемые формы при нажатии на значок лупы:

 

 

Для чистоты эксперимента создадим все три формы (ФормаОтчета, ФормаНастроекОтчета, ФормаНастроекВарианта), хотя форму настроек варианта можно и не создавать — настройки сохранялись корректно и из БСП формы, я проверял.

Сохраняем, в результате отчет будет пока использовать собственные формы.

Далее в режиме 1С:Предприятие, нужно открыть отчет, зайти в "Еще\Изменить вариант…":

 

 

В открывшемся окне на закладке "Параметры" заполнить параметр "Статьи затрат" списком нужных статей, сохранить настройки схемы в xml и загрузить их в Конфигураторе:

 

 

Ну и наконец в Конфигураторе загружаем настройки из xml:

 

 

Мы видим, что параметр "Статьи затрат" заполнился списком значений (где каждая статья затрат представлена в виде ГУИДа).

Теперь удаляем привязку к созданным формам в палитре свойств отчета, чтобы отчет стал использовать формы БСП, и сохраняем:

 

 

В результате в режиме 1С:Предприятие наш отчет откроется с уже заполненным списком статей затрат, который можно редактировать, и будет доступен весь функционал формы "ФормаОтчета" из БСП.

 

 

Второй способ.

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

Используем механизм БСП — создадим процедуру в модуле объекта нашего отчета:

// Остальные настройки см. в описании функции в общем модуле ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию()
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    
    Настройки.События.ПередЗаполнениемПанелиБыстрыхНастроек = Истина;
    
КонецПроцедуры

И опишем саму процедуру-обработчик, в которой заполним нужный нам параметр списком значений:

Процедура ПередЗаполнениемПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт

	ЗначениеПараметраНастроекКомпоновкиДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СтатьиЗатрат"));
	Если ЗначениеПараметраНастроекКомпоновкиДанных <> Неопределено Тогда
		Идентификатор = ЗначениеПараметраНастроекКомпоновкиДанных.ИдентификаторПользовательскойНастройки;
		ЗначениеПараметраПользовательскихНастроекКомпоновкиДанных = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Идентификатор);
		Если ЗначениеПараметраПользовательскихНастроекКомпоновкиДанных <> Неопределено Тогда
			Если 
				(ТипЗнч(ЗначениеПараметраПользовательскихНастроекКомпоновкиДанных.Значение) = Тип("СписокЗначений") и ЗначениеПараметраПользовательскихНастроекКомпоновкиДанных.Значение.Количество() = 0) 
				Или Не ЗначениеЗаполнено(ЗначениеПараметраПользовательскихНастроекКомпоновкиДанных.Значение) 
			Тогда
				СтатьиЗатратСписок = ИходныйСписокСтатей();
				КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СтатьиЗатрат", СтатьиЗатратСписок);
				ЗначениеПараметраПользовательскихНастроекКомпоновкиДанных.Значение = СтатьиЗатратСписок;
			КонецЕсли;
		КонецЕсли;	
	КонецЕсли;
	
КонецПроцедуры

 В этой процедуре мы ищем параметр данных "СтатьиЗатрат", заданный в СКД на закладке "Параметры", берем из него 

ИдентификаторПользовательскойНастройки

по которому находим 

ЗначениеПараметраПользовательскихНастроекКомпоновкиДанных

и присваиваем значение (список значений) обязательно и параметру данных, и соответствующему ему пользовательскому параметру.

Функция ИсходныйСписокСтатей() возвращает список значений, заполненный нужными статьями затрат. Я реализовал ее через ЗначениеВСтрокуВнутр (в приложенном примере). В общем случае можно просто создавать список значений и каждый элемент списка искать например по коду, ГУИД, или каким-либо другим способом.

В целом, этот подход начального заполнения параметра списком значений можно использовать при разработке отчетов на СКД в любых конфигурациях, использующих указанную версию БСП. Предполагаю, что и на других версиях БСП 3.х.х.х это также возможно, главное — чтобы в корне конфигурации были описаны формы отчета, настроек и варианта (опционально) и были соответствующие общие модули.

Полный пример внешнего отчета по этому способу — прикладываю.

Надеюсь, статья будет полезна, и кому-то не придется тратить время на изобретение велосипеда)

Буду рад комментариям.

has been added to your cart:
Оформление заказа