helpf.pro
Регистрация

v8.2 УП: Обработка расшифровки СКД

KorolyovSS
03.04.2015 16:20Прочитано: 8357

1С8.2 УП тонкий клиент

Добрый вечер. Может кто с таким сталкивался. Есть необходимость обработать данные расшифровки и запускать свой отчет вместо генерируемого. В литературе по СКД встречается описание этого действия, но примеры сильно упрощенные. Максимум все сводится в определении поля (в которое ткнули правой кнопкой мыши и нажали расшифровать) и либо вызове формы объекта, либо запуске другого отчета с отбором по значению этого поля. Мне нужно в отчете с иерархией расшифровать значение ресурса (количества)  и при выборе определенного поля из списка (скажем документ) запустить свой отчет. Чтобы он правильно сформировался нужно сформировать вариант настроек с подготовленными параметрами и отборами. Вопрос как раз в этом и заключается. Идентифицировать выбранное поле (которое выбирается в диалоговом окне из перечня доступных) мне понятно как, определить значения параметров и элементов отбора текущих настроек отчета, тоже вроде понятно как. Не понятно как идентифицировать значение поля группировки (строки) и (или) значения поля столбца (если это таблица, а не список), чтобы полностью отобрать необходимые в моем случае документы. 

Если кто-нибудь сталкивался с такой проблемой, киньте пару примерчиков. На прикрепленном рисунке указано какие поля определить я не могу. Заранее благодарен

Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
04.04.2015 19:32Ответ № 1

А что тебе доступно в ДанныеРасшифровки?

KorolyovSS
04.04.2015 21:22Ответ № 2

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

Код 1C v 8.2 УП
 .14.519 УП тонкий клиент

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


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

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

Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
// Действие "Открыть"
ОткрытьЗначение(ПараметрВыполненногоДействия);
Возврат;
ИначеЕсли ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать И 
 ПараметрВыполненногоДействия.Структура[0].ПоляГруппировки.Элементы[0].Поле = 
 Новый ПолеКомпоновкиДанных("Документ") Тогда
// Действие "Расшифровать по Документу" - то что мы ищем
ПараметрыОтчета = ПолучитьПараметрыРасшифровки(Расшифровка);
Если ПараметрыОтчета <> Неопределено Тогда
// Настройки и отборы схем совместимы
ОткрытьФорму("Отчет.ДокументыЗаявителей.Форма.ФормаОтчета", ПараметрыОтчета,, Истина);
Возврат;
КонецЕсли;
КонецЕсли;
// Все остальное
Описание = Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(
ДанныеРасшифровки, 
Расшифровка, 
ПараметрВыполненногоДействия);

ПараметрыОтчета = Новый Структура("СформироватьПриОткрытии, Расшифровка", Истина, Описание);
ОткрытьФорму("Отчет.ТематикаОбращений.Форма.ФормаОтчета", ПараметрыОтчета,, Истина);
КонецПроцедуры


&НаСервере
Функция ПолучитьПараметрыРасшифровки(Знач Расшифровка)
Схема = Отчеты.ДокументыЗаявителей.ПолучитьМакет("Макет");
НастройкиВарианта = Схема.НастройкиПоУмолчанию;
ПредставлениеВарианта = "Расшифровка по документам";

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

ПараметрПериод = НастройкиРасшифровки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
Если ПараметрПериод <> Неопределено Тогда
ПараметрПериод.Использование = Истина;
ПараметрПериод.Значение = Новый СтандартныйПериод(ВариантСтандартногоПериода.СНачалаЭтогоГода);
Иначе
Возврат Неопределено;
КонецЕсли;

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

Возврат Новый Структура("СформироватьПриОткрытии, Вариант, ПредставлениеВарианта", 
Истина, НастройкиВарианта, ПредставлениеВарианта);
КонецФункции
KorolyovSS
04.04.2015 22:19Ответ № 3

Нахомутал конечно с периодом.

переделал по другому

Код 1C v 8.2 УП
 &НаСервере
Функция ПолучитьПараметрыРасшифровки(Знач Расшифровка)
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет);
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИсточникНастроек); 
НастройкиРасшифровки = ОбработкаРасшифровки.Расшифровать(Расшифровка, Новый ПолеКомпоновкиДанных("Документ"));

ПериодРасшифровки = НастройкиРасшифровки.ПараметрыДанных.НайтиЗначениеПараметра(
Новый ПараметрКомпоновкиДанных("Период"));

Схема = Отчеты.ДокументыЗаявителей.ПолучитьМакет("Макет");
НастройкиВарианта = Схема.НастройкиПоУмолчанию;
ПредставлениеВарианта = "Расшифровка по документам";

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

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

Возврат Новый Структура("СформироватьПриОткрытии, Вариант, ПредставлениеВарианта", 
Истина, НастройкиВарианта, ПредставлениеВарианта);
КонецФункции
E_Migachev
08.04.2015 01:34Ответ № 4

Сложно так сказать, а вообще давно расшифровки не делал )

KorolyovSS
08.04.2015 13:57Ответ № 5

Ну, работает и пусть работает

Подсказка: Для быстрого поиска ответов - используйте 'Поиск'
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.