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

07.03.18

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

 

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

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

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

См. также

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

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

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

10000 руб.

02.09.2020    129484    700    390    

749

Как посмотреть итоговый запрос в отчете СКД

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

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

15.05.2024    2389    implecs_team    4    

30

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

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

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

3 стартмани

05.02.2024    4771    36    obmailok    19    

73

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

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

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

1 стартмани

31.01.2024    2279    2    Yashazz    0    

31

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    8754    20    John_d    25    

124

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

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

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

05.12.2023    5338    PROSTO-1C    13    

65

Модель СКД

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

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

1 стартмани

15.11.2023    6298    15    kalyaka    5    

89

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

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

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

18.09.2023    8110    accounting_cons    7    

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

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

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

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

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

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