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

20.04.22

Разработка - БСП (Библиотека стандартных подсистем)

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Пример отчета на СКД с использованием форм отчета из БСП с программным первоначальным заполнением параметра СКД списком значений
.erf 9,91Kb
21 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Платформа на момент разработки: 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.х.х.х это также возможно, главное - чтобы в корне конфигурации были описаны формы отчета, настроек и варианта (опционально) и были соответствующие общие модули.

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

ФормаОтчета ФормаНастроекОтчета ФормаВариантаОтчета БСП СКД Параметр СписокЗначений Программное заполнение параметра Ошибка преобразования данных XDTO

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    225991    1228    415    

1071

СКД Программист Система компоновки данных Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    6725    ovetgana    108    

74

БСП (Библиотека стандартных подсистем) Роли и права Программист 1С v8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Наткнулся на костыль по работе с ролями. Хочу поделиться, как не попасть на это странное поведение БСП.

07.05.2025    7810    dsdred    32    

89

СКД Программист 1С v8.3 Система компоновки данных Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    13840    ovetgana    50    

92

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

1800 руб.

21.11.2024    10066    41    24    

47

БСП (Библиотека стандартных подсистем) Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    15589    John_d    15    

103

Инструментарий разработчика СКД Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

05.02.2024    12046    78    obmailok    21    

86
Отзывы
10. SergDobrodelov 807 25.05.24 15:02 Сейчас в теме
Можно проще:
Процедура ПередЗаполнениемПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт

    Настройки = КомпоновщикНастроек.Настройки;
    ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;

    ПараметрКД = ОтчетыКлиентСервер.НайтиПараметр(
        Настройки,
        ПользовательскиеНастройки, 
        "СтатьиЗатрат");

    Если ПараметрКД <> Неопределено И ЗначениеЗаполнено(ПараметрКД.Значение) = Ложь Тогда
        ПараметрКД.Значение = ИходныйСписокСтатей();
    КонецЕсли;    
	
КонецПроцедуры
Показать
13. rabanik 2 12.02.25 14:15 Сейчас в теме
Евгений, Спасибо, Огромное!)))
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Cmapnep 20 21.04.22 12:19 Сейчас в теме
А почему выбрали именно событие ПередЗаполнениемПанелиБыстрыхНастроек?
Я использую ПередЗагрузкойВариантаНаСервере и там модифицирую КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы
Возможно ваш способ лучше, но хотелось бы понять чем)
2. eugene-p 57 21.04.22 16:55 Сейчас в теме
Потому что событие ПередЗагрузкойВариантаНаСервере вызывается при интерактивном выборе варианта отчета. При открытии формы оно не срабатывает. ПередЗаполнениемПанелиБыстрыхНастроек - срабатывает именно перед открытием формы, и пользователь видит уже заполненные как надо параметры. Каждый способ хорош для своих целей)
3. anflame 03.06.22 00:08 Сейчас в теме
Огромное спасибо! То, что искала!!!
4. eugene-p 57 03.06.22 05:44 Сейчас в теме
А вам - спасибо за обратную связь) Успехов!
5. SagittariusA 20.12.22 20:01 Сейчас в теме
А случаем не более корректно использовать "ПриОпределенииПараметровВыбора()"?

// Вызывается в форме отчета перед выводом настройки.
//            
//               // Параметры:
//               //   Форма - ФормаКлиентскогоПриложения, Неопределено - форма отчета.
//               //   СвойстваНастройки - Структура - описание настройки отчета, которая будет выведена в форме отчета.
//               //       * ОписаниеТипов - ОписаниеТипов - тип настройки.
//               //       * ЗначенияДляВыбора - СписокЗначений - объекты, которые будут предложены пользователю в списке
//               //         выбора. Дополняет список объектов, уже выбранных пользователем ранее.
//               //       * ЗапросЗначенийВыбора - Запрос - возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора.
//               //           Первой колонкой (с 0м индексом) должен выбираться объект,
//               //           который следует добавить в ЗначенияДляВыбора.Значение.
//               //           Для отключения автозаполнения
//               //           в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку.
//               //       * ОграничиватьВыборУказаннымиЗначениями - Булево - когда Истина, то выбор пользователя будет
//               //           ограничен значениями, указанными в ЗначенияДляВыбора (его конечным состоянием).
//               //
//               // См. также:
//               //   ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора().
//               //
//               Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт
//               	// Обработка события.
//               КонецПроцедуры
Показать
6. eugene-p 57 21.12.22 08:30 Сейчас в теме
Если честно, то уже не помню. Возможно, пробовал, но не взлетело. Если у вас есть возможность проверить - поделитесь пожалуйста потом результатами
7. Риник 15 17.01.23 15:04 Сейчас в теме
(6) проверил, работает:
Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт 

	Если СвойстваНастройки.ДоступнаяНастройкаКД.Заголовок = "Этап" Тогда 
		
		СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина;
		
		СвойстваНастройки.ЗначенияДляВыбора.Добавить("лолои");
		СвойстваНастройки.ЗначенияДляВыбора.Добавить("лолоивыямавч");
		
	КонецЕсли;
	
КонецПроцедуры
Показать
8. eugene-p 57 17.01.23 18:45 Сейчас в теме
ок, спасибо, попробую при случае.
9. AlekSo 15 27.11.23 09:15 Сейчас в теме
Один маленький нюанс.
Параметр у меня - это массив.
Всё прекрасно заполняется, но на форме окошко остается пустым. Захожу внутрь по кнопке [...] там мой массив заполнен.
В моём случае это не мешает. Но может подскажите как исправить?
(использовал вариант с ПередЗаполнениемПанелиБыстрыхНастроек)
10. SergDobrodelov 807 25.05.24 15:02 Сейчас в теме
Можно проще:
Процедура ПередЗаполнениемПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт

    Настройки = КомпоновщикНастроек.Настройки;
    ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;

    ПараметрКД = ОтчетыКлиентСервер.НайтиПараметр(
        Настройки,
        ПользовательскиеНастройки, 
        "СтатьиЗатрат");

    Если ПараметрКД <> Неопределено И ЗначениеЗаполнено(ПараметрКД.Значение) = Ложь Тогда
        ПараметрКД.Значение = ИходныйСписокСтатей();
    КонецЕсли;    
	
КонецПроцедуры
Показать
11. eugene-p 57 25.05.24 18:27 Сейчас в теме
Спасибо за вариант. Выглядит проще и лаконичнее. Единственное, в моем варианте не используются никакие функции общих модулей, которые могут быть подвержены внезапным переделкам/переименованиям)
SergDobrodelov; +1 Ответить
12. user2095024 03.07.24 15:34 Сейчас в теме
Здравствуйте! Подскажите почему внешний отчет не реагирует на параметр периода при выгрузке данных по документу. Хотела выгрузить платежные поручения исходящие с расшифровками за определенный период, выгружаются все платежки. В параметрах указываю определенный период, не реагирует.
13. rabanik 2 12.02.25 14:15 Сейчас в теме
Евгений, Спасибо, Огромное!)))
14. eugene-p 57 12.02.25 18:11 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация