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

07.03.18

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Пример отчета
.erf 9,78Kb
42
42 Скачать (1 SM) Купить за 1 850 руб.

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

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

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


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

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

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

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

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

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

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

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

 

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

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

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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159696    876    399    

862

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

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

15.05.2024    8731    implecs_team    6    

47

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

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

3 стартмани

05.02.2024    7012    56    obmailok    21    

79

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

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

1 стартмани

31.01.2024    3156    5    Yashazz    1    

34

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

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

2 стартмани

11.12.2023    10834    23    John_d    25    

124

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

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

05.12.2023    8056    PROSTO-1C    15    

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

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

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

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

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

Моя критика была недостаточно конструктивной? Если что-то непонятно - уточняйте, не стесняйтесь.
Ваша критика моей критики уж точно неконструктивна.
Пока же я вижу, что вы не потрудились исправить в статье даже те недоработки, которые поняли и с которыми согласились.
11. Yashazz 4791 04.03.18 01:40 Сейчас в теме
С одной стороны, попытка рассказать своими словами, что хорошо; ибо обычно внаглую передирают Хрусталёву. С другой, да, кривизны и спорных моментов много.
16. aviconsult 50 07.06.24 11:21 Сейчас в теме
Плюс автору за понятный и рабочий вариант работы с расшифровкой
У меня, чтоб эта строка сработала правильно

ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));

пришлось передать не Отчет в ИсточникДоступныхНастроекКомпоновкиДанных, а саму схему, точнее ее адрес во временном хранилище.
Оставьте свое сообщение