Разрабатываем отчет на СКД, содержащий данные из расширения

17.10.22

Разработка - СКД

Ввиду развития механизма расширений в 1С часто приходится сталкиваться с задачей, когда требуется разработать отчет, который должен строиться как по данным конфигурации, так и по данным расширения. И здесь присутствует нюанс, о котором я и хотел бы поведать в этой статье. Расскажу также о способе решения, который я использую.

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

  1. Заимствовать все, необходимые объекты из основной конфигурации в расширение и в расширении же уже разрабатывать нужный отчет. 

  Минус данного подхода в том, что чем больше объектов мы позаимствуем из конфигурации, тем сложнее будет потом анализировать изменения в расширении при обновлении на новый релиз. Есть ещё один момент, который делает такой способ непригодным - необходимость использовать данные из двух и более различных расширений. Поэтому данный способ разработки в данной статье я рассматривать не буду.

  2. Сформировать макет СКД в режиме 1С предприятия посредством консоли отчета, а потом встроить его во внешний отчет. 

 Для формирования макета СКД я использую управляемую консоль отчетов от уважаемого Evg-Lylyk. Чтобы сделать макет СКД, приходится запускать 1С предприятие в режиме толстого клиента. Ну и далее всё по школе - пишу запрос, помещаю его в макет, настраиваю ресурсы, группировки и поля. В консоли отчета, в отличие от конфигуратора, доступны объекты всех расширений.

   Далее я сохраняю макет СКД в файл:

и загружаю сохраненный файл в макет СКД внешнего отчета.

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

   На этом работа по разработке отчета закончена в большинстве случаев, но есть один нюанс:

 В некоторых случаях после проделанных действий, при попытке запустить внешний отчет можно получить следующую ошибку:

   

 "Повторяющееся поле итога".

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

  

  макет

Чтобы выйти из положения, я применяю следующий приём:

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

Функция ПолучитьСхемуКомпоновкиИзФайла()  
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
	МакетСКД = ПолучитьМакет("СКД");
	МакетСКД.Записать(ИмяВременногоФайла);
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(ИмяВременногоФайла);
	СхемаКомпоновкиДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("СхемаКомпоновкиДанных"));	
	Возврат СхемаКомпоновкиДанных;
КонецФункции	

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

	СтандартнаяОбработка = Ложь;
	ПользовательскиеНастройкиМодифицированы = Ложь;
	
	НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); 
	
	СхемаКомпоновкиДанныхОтчета = ПолучитьСхемуКомпоновкиИзФайла();//ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанныхОтчета, НастройкиОтчета, ДанныеРасшифровки);

	КомпоновкаДанныхСервер.УстановитьЗаголовкиМакетаКомпоновки(СтруктураЗаголовковПолей(), МакетКомпоновки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	
	//РасчетСебестоимостиПрикладныеАлгоритмы.АктуализироватьПартииДляОтчетов(ДокументРезультат, КомпоновщикНастроек);
	
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	КомпоновкаДанныхСервер.СкрытьВспомогательныеПараметрыОтчета(СхемаКомпоновкиДанныхОтчета, КомпоновщикНастроек, ДокументРезультат, ВспомогательныеПараметрыОтчета());
	
	// Сообщим форме отчета о том, что настройки модифицированы.
	Если ПользовательскиеНастройкиМодифицированы Тогда
		КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ПользовательскиеНастройкиМодифицированы", Истина);
	КонецЕсли;

КонецПроцедуры

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

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

     Разработка на 1С:Предприятие 8.3 (8.3.20.1838), 1С:ERP Управление предприятием 2 (2.5.8.221)

Внешний отчет расширение СКД разработка повторяющееся поле итога

См. также

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    125077    683    389    

732

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    4382    31    obmailok    19    

69

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2155    2    Yashazz    0    

31

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8390    20    John_d    25    

124

Использование менеджера временных таблиц в СКД

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

Рассмотрим еще не получивший широкого распространения способ работы с внешними данным в СКД. В процессе обсуждения работы с СКД выяснилось, что многие не знакомы со способом помещения туда временной таблицы, полученной предварительно. Статья будет полезна разработчикам, знакомым с программным созданием СКД.

05.12.2023    4938    PROSTO-1C    13    

63

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    6021    15    kalyaka    5    

87

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

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

18.09.2023    7386    accounting_cons    7    

29

Разрыв страницы в СКД. Легко!

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

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

01.09.2023    4774    KVIKS    15    

80
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pstrig 20.10.22 08:30 Сейчас в теме
2. vic777tor 20.10.22 09:31 Сейчас в теме
Не плохо бы удалять временный файл перед строкой Возврат СхемаКомпоновкиДанных.
А лучше в таких случаях использовать поток в памяти.
3. al_zzz 309 20.10.22 10:12 Сейчас в теме
(2) Сначала так и сделал. Но если пытаюсь удалить, то возникает ошибка.
С потоком в памяти да, лучше.
4. Dot78 39 24.10.22 07:59 Сейчас в теме
В копилочку. Сохранять в макет и доставать программно не додумалась. Недавно сталкивалась с задачей, отчет задействующий объекты трех расширений, соответственно полноценно работать с конструктором можно только в режиме предприятия, собрала и сохранила в виде варианта универсального отчета,, пыталась сохранить схему компановки в файл и загрузить в отчет в одном из расширений, он запускался без ошибок, но почему-то пустой. Так и не смогла разобраться, почему. Встроила в расширение команду вызова варианта отчета по ключу
5. glek 119 28.02.23 12:27 Сейчас в теме
Поступаю проще: в тексте запроса набора данных пишу "Рыбу" (что-то типа Выбрать 0 Как Количество и так далее), а уже при компоновке данных переопределяю текст запроса. И не надо ничего запускать в толстом и тому подобное.
user712426; user1107052; +2 Ответить
6. al_zzz 309 28.02.23 16:17 Сейчас в теме
(5) Я правильно понял, вы имеете ввиду, что консолью не пользуетесь?
А текст запроса пишите просто в текстовом редакторе вручную, без конструктора(он же не будет видеть объекты из расширения)?
В чём тогда ваш способ проще, чем запустить консоль в толстом клиенте?
7. glek 119 28.02.23 16:24 Сейчас в теме
(6) Пользуюсь консолью запросов в режиме предприятия. Он работает в любом клиенте. И не надо ничего дополнительно настраивать в компоновке. Просто подменяю запрос.
8. glek 119 28.02.23 16:30 Сейчас в теме
(6) Кроме того, есть консоль СКД в тонком клиенте. Всё равно не пользуюсь.
9. KVIKS 399 15.03.23 16:27 Сейчас в теме
(5) Фишка этого метода в том, что можно весть отчет написать в конфигураторе в качестве запроса можно описать пустые поля и полностью настроить итоги группировки и прочее. А при запуске подменять у него текст запроса (сам запрос конечно сделать в консоли в режиме предприятия). Это избавит вас хранить отдельный макет скд в двоичных.
10. gmtv 12 08.06.23 14:33 Сейчас в теме
Тут больше вопрос к 1С, почему старина конфигуратор до сих пор не научился работать с несколькими расширениями и мы вынуждены прибегать вот к этому.
Pushno; Feelthis; sys1c; user712426; mikl79; romankoav; user1107052; +7 Ответить
11. user625969_Skreg2016 08.12.23 15:19 Сейчас в теме
Столкнулся с такой же проблемой (объекты в расширении).
Получилось запихнуть новую схему через выгрузку в файлы:
Выгрузил отчет в файлы:
подменил файл ...\Templates\ОсновнаяСхемаКомпоновкиДанных\Ext\Template.xml на файл схемы полученной из консоли.
загрузил отчет из файлов
Сохранил.
triton34; Igor_Ryaboff; +2 Ответить
12. user1956479 19.02.24 08:26 Сейчас в теме
(11)
Выгрузил отчет в файлы

КАК Вы это сделали?
13. triton34 12.04.24 13:07 Сейчас в теме
Спасибо вам большое, помогли.
Оставьте свое сообщение