Работа с расшифровкой отчета на СКД

07.03.18

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

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

Скачать исходный код

Наименование Файл Версия Размер
Пример отчета
.erf 9,78Kb
37
.erf 9,78Kb 37 Скачать

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

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

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


&НаКлиенте
Процедура Сформировать(Команда)
	// инициировать формирование отчета
	СформироватьНаСервере();
	// при программном выводе отчета СКД
	// табличный документ "Результат" будет засерен
	// для исправления этой ситуации скорретируем состояние отчета
	Элементы.Результат.ОтображениеСостояния.Видимость = ложь; 
	Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;	
КонецПроцедуры

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

&НаСервере
Функция ПолучитьМакетОбъекта(ИмяМакета)
	ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
	Возврат ОтчетОбъект.ПолучитьМакет(ИмяМакета);
КонецФункции // ПолучитьМакетОбработки()

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

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

&НаКлиенте
Процедура ОбработатьРасшифровку(ВыбранноеДействие,ВыбранноеЗначение,Параметр3) Экспорт

	// поле выбора действия, обрабаытваем нужные нам манипуляции
	// в нашем случае можно этого не делать, так как у нас доступно только действие "ОткрытьЗначение"
	Если ВыбранноеДействие <> ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда
		Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
			// в режиме запрета модальности используем "ПоказатьЗначение"
			ПоказатьЗначение(,ВыбранноеЗначение);
		КонецЕсли;
	КонецЕсли;

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

 

Вот и все. Можно пробовать.

PS: Данный пример показан для тех случаев, когда стандартных механизмов СКД недостаточно, или необходимо немного изменить алгоритм формирования СКД и расшифровки к ней. Автоматически генерируемая форма отчета построенная на СКД, выполняет весь данный функционал сама.

СКД Расшифровка СКД Программная расшифровка Расшифровка отчет ОбработкаРасшифровкиКомпоновкиДанных произвольный отчет СКД произвольный

См. также

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

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

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

10000 руб.

02.09.2020    124960    683    389    

732

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

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

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

3 стартмани

05.02.2024    4376    31    obmailok    19    

69

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

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

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

1 стартмани

31.01.2024    2149    2    Yashazz    0    

31

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    8380    20    John_d    25    

123

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

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

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

05.12.2023    4931    PROSTO-1C    13    

63

Модель СКД

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

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

1 стартмани

15.11.2023    6013    15    kalyaka    5    

87

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

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

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

18.09.2023    7358    accounting_cons    7    

29

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

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

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

01.09.2023    4771    KVIKS    15    

80
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 28.02.18 00:46
Сообщение было скрыто модератором.
...
2. HAMMER_59 245 28.02.18 07:06 Сейчас в теме
ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиОтчета,Новый УникальныйИдентификатор)

Т.е. при каждом формировании отчета, данные расшифровки будут помещаться в отдельное хранилище, и будут храниться до конца сеанса.
Обычно, в таких случаях идентификатор формы передают.
herfis; +1
3. Isonic 235 28.02.18 07:48 Сейчас в теме
(2) можно и идентификатор формы. Так, думаю, будет правильнее
+
4. awk 741 28.02.18 12:20 Сейчас в теме
Почему не в фоне формирование отчета? Почему не предопределенная процедура в модуле объекта?
+
5. Isonic 235 28.02.18 12:58 Сейчас в теме
(4)поясните подробнее
+
6. awk 741 28.02.18 16:13 Сейчас в теме
Э... То что вы привели в процедурах Сформировать(Команда), СформироватьНаСервере очень плохой стиль...

Есть процедура модуля отчета ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) - лучше работать через нее...
starik-2005; CSiER; herfis; +3
7. Isonic 235 28.02.18 16:20 Сейчас в теме
(6)не соглашусь.
когда "отчет" не будет является основным реквизитом, будет ли доступно ваше событие?
+
8. herfis 498 28.02.18 16:25 Сейчас в теме
(7) Пример должен быть цельным. Ваш пример - именно отчет. Компоновка не в отчете будет иметь свои особенности, как и расшифровка. Так что замечание по делу. Это же в помощь новичкам? А ваша статья может ввести новичков в заблуждение.
И было бы неплохо довести пример до программного обращения к данным расшифровки в ее программной обработке, так как это тоже неочевидный момент для новичков.
+
9. Isonic 235 28.02.18 16:25 Сейчас в теме
(6)прошу прощения, вы имели в виду модуль объекта отчета. тогда да.
+
10. herfis 498 28.02.18 16:40 Сейчас в теме
Настройки = МакетСКД.НастройкиПоУмолчанию

Вот это тоже фигня. Мало того, что игнорируются пользовательские настройки (которых в реальном отчете просто не может не быть), так еще и предполагается что вариант отчета только один.
Короче, пока что минус статье. Очень уж сырая.
user712426; CSiER; +2 1
12. Isonic 235 04.03.18 17:58 Сейчас в теме
(10)
(11)
Я неимоверно рад, что у нас есть такие умные люди как Вы!
Mails79; Merkalov; +2
13. Yashazz 4723 04.03.18 22:43 Сейчас в теме
(12) Автор, поучитесь общаться в интернетах. В частности, мой Вам добрый совет: научиться понимать разницу между обсуждением произведения и автора. Мы критикуем публикацию, а вы странным образом пытаетесь перейти на личности.
Sejix; +1
14. Isonic 235 05.03.18 08:59 Сейчас в теме
(13) вы пишете "кривизны и спорных моментов много". Так покажите где, иначе смысл вашей критики? Есть спорные моменты, давайте обсудим

Здесь не кинопоиск (или подобное), здесь люди учатся и делятся опытом. Вы указали на ошибку, я запомнил, изучил, и больше ее не повторяю. Разве это плохо?
+
15. herfis 498 05.03.18 10:18 Сейчас в теме
(12)
Я неимоверно рад, что у нас есть такие умные люди как Вы!

Моя критика была недостаточно конструктивной? Если что-то непонятно - уточняйте, не стесняйтесь.
Ваша критика моей критики уж точно неконструктивна.
Пока же я вижу, что вы не потрудились исправить в статье даже те недоработки, которые поняли и с которыми согласились.
Sejix; +1
11. Yashazz 4723 04.03.18 01:40 Сейчас в теме
С одной стороны, попытка рассказать своими словами, что хорошо; ибо обычно внаглую передирают Хрусталёву. С другой, да, кривизны и спорных моментов много.
+
Оставьте свое сообщение