1с скд расшифровка другим вариантом отчета
Рассмотрим задачу изменения расшифровки по умолчанию в 1С отчетах, реализованных с помощью системы компоновки данных (далее СКД). Один из вариантов решения этой задачи – переопределение алгоритма расшифровки в модуле формы отчета СКД.
[Очень часто для отчетов, выполненных с помощью системы компоновки данных, требуется изменить расшифровку по умолчанию. Один из вариантов решения этой задачи – переопределение алгоритма расшифровки в модуле формы отчета.]
1. Расшифровка отчета 1С: Открытие значения группировки отчета
Процедура обработчик события Обработка Расшифровки поля табличного документа выполняется при двойном щелчке мышью по полю отчета.
Следующий код выполняет открытие формы документа, являющегося значением группировки отчета:
&На Клиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если КлючТекущегоВарианта = "Вариант1" Тогда //Проверяем текущий вариант
Документ = ПолучитьДокумент(Расшифровка); //получаем ссылку на документ
Если Документ = Неопределено Тогда
ПоказатьЗначение(, Документ);//открываем форму документа
Получим значения группировок для поля, которое пытаются «расшифровать»:
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); //данные расшифровки – (реквизит формы отчета) строка с адресом хранения данных расшифровки
Если Группировки.Количество() > 0 Тогда
Для Каждого ПолеГруппировка Из ПоляГруппировки Цикл //находим нужную группировку
Если ПолеГруппировка.Поле = "Документ" Тогда
2. Расшифровка отчета СКД другим отчетом
В следующем примере продемонстрируем, как производится в 1С расшифровка отчета другим отчетом:
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если КлючТекущегоВарианта = "Вариант1" Тогда //Проверяем текущий вариант
ПараметрыФормы = Новый Структура;
ФормаРасшифровки = ПолучитьФорму("Отчет. Расшифровка.Форма ", ПараметрыФормы, , Истина);
ФормаРасшифровки.ВариантМодифицирован = Ложь; //если в процедуре ЗаполнитьНастройкиРасшифровки //меняется настройка типового варианта отчета, то при закрытии отчет расшифровка может выдавать вопрос о сохранении варианта. //Что бы этого не происходило, сбросим флаг модифицированности варианта отчета.
Функция ЗаполнитьНастройкиРасшифровки(КомпоновщикНастроекРасшифровки, Расшифровка)
Заполним параметры отчета-расшифровки параметрами текущего отчета
ПараметрОтчета = ПараметрПользовательскихНастроек(КомпоновщикНастроек, "Параметр1");
ПараметрОтчетаРасшифровки = ПараметрПользовательскихНастроек(КомпоновщикНастроекРасшифровки, "Параметр1");
Получение параметров отчета-расшифровки из группировок текущего отчета
ПараметрОтчетаРасшифровки = ПараметрПользовательскихНастроек(КомпоновщикНастроекРасшифровки, "Параметр2");
Функция ПараметрПользовательскихНастроек(КомпоновщикНастроек, ИмяПараметра)
3. Дополнительная расшифровка отчета
Для переопределения дополнительной расшифровки (контекстное меню поля отчета) используется обработчик ОбработкаДополнительнойРасшифровки табличного поля документа.
Пример:
Процедура РезультатОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
//список стандартных действий доступных в контекстном меню
//в качестве дополнительного действия сделаем доступной расшифровку другим отчетом
ДополнительныеДействия = Новый СписокЗначений;
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет);
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИсточникНастроек);
Определим процедуру, которая будет обрабатывать выбор пользователя
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаРасшифровкиЗавершение", ЭтаФорма, Расшифровка);
Выведем на экран контекстное меню дополнительной расшифровки
ОбработкаРасшифровки.ПоказатьВыборДействия(ОписаниеОповещения, Расшифровка, ДоступныеДействия, ДополнительныеДействия);
Функция, формирующая список доступных действий для текущей ячейки отчета:
ДоступныеДействия = Новый Массив;
Для Каждого ПолеРасшифровки Из Поля Цикл
Если ПолеРасшифровки.Поле = "Документ" Тогда
Если это попытка расшифровки поля Документ, добавим возможность открыть форму документа
Функция, выполняющая обработку действия, выбранного пользователем:
Процедура ОбработкаРасшифровкиЗавершение(ВыбранноеДействие, ПараметрВыбранногоДействия, ДополнительныеПараметры) Экспорт
Если ВыбранноеДействие = ДействияРашифровки.ОткрытьЗначение Тогда // Действие открытие значения
ИначеЕслиВыбранноеДействие = "ОтчетРасшифровка" Тогда
Документ = ПолучитьДокумент (Расшифровка);
Если Документ = Неопределено Тогда
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Документ", Документ));
ФормаРасшифровки = ПолучитьФорму("Отчет.Расшифровка.Форма", ПараметрыФормы, , Истина);
Иначе //стандартные действия
ПараметрыФормы = Новый Структура;
ОписаниеОбработкиРасшифровки = Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Расшифровка, ПараметрВыбранногоДействия);
ФормаРасшифровки = ПолучитьФорму("Отчет.ТекущийОтчет.Форма", ПараметрыФормы,, Истина);
4. Расшифровка отчетов 1С для типовых конфигураций
В отчетах, предназначенных для работы в типовых конфигурациях, удобно использовать общую форму отчетов. Чтобы переопределить расшифровку таких отчетов не обязательно менять модуль формы, достаточно прописать процедуры обработки расшифровки в общем модуле ОтчетыКлиентПереопределяемый:
// Обработчик расшифровки табличного документа формы отчета.
Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт
Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ТекущийОтчет" Тогда
//сюда помещаем код обработки расшифровки описанный выше
Разработчик ООО «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
Когда требуется расшифровка одного отчета СКД при помощи другого отчета СКД с возможностью выбора дополнительных настроек, можно использовать представленный вариант. Под "нестандартной расшифровкой" имеется ввиду расшифровка данных одного вида отчета - другим видом, отличным от первого (с предварительной установкой нужных параметров и отборов в отчете-расшифровке).
Реализация основана на статье Нестандартная расшифровка СКД или расшифровка одного отчета СКД при помощи другого отчета СКД, но имеет существенное дополнение, а именно позволяет производить как стандартное действие расшифровки отчета, так и нестандартное (расшифровку через другой отчет). Причем управление параметрами и отборами в текущей реализации вынесено в отдельные процедуры и функции, что повысило наглядность кода.
За основу отчета для расшифровки взят [УТ11] Дебиторка fifo по долгам контрагентов (СКД, управляемый интерфейс), к которому добавлена актуальная возможность расшифровки через стандартный отчет УТ11 "РасчетыСПартнерами".
Сама методика работает в любой конфигурации на управляемых формах, но пример привожу для УТ11. Отчет интересен не только как реализация методики гибкой расшифровки, но и как удобное подспорье, для пользователя непосредственно при использовании.
Анимированная gif картинка показывает то, что увидит пользователь при попытке расшифровки по элементу "Партнер", предварительно построенного начального отчета:
Т.е. при двойном клике по ячейке, в которой содержится информация о Партнере, открывается дополнительное уточняющее меню, в котором можно выбрать действие по умолчанию "Открыть. ", либо получить уточняющий отчет "Показать расчеты с отбором. ", причем по разным интервалам времени.
Прежде всего, чтобы иметь возможность запрограммировать расшифровку нам понадобится форма расшифровываемого отчета, например ФормаОтчета, её необходимо добавить (элементы формы система добавит сама).
Для элемента формы «Результат» в событии «ОбработкаРасшифровки» нужно добавить процедуру, например: «РезультатОбработкаРасшифровки»
В модуле этой формы (ФормаОтчета) нужно наполнить процедуру РезультатОбработкаРасшифровки содержимым:
& НаКлиенте
Процедура РезультатОбработкаРасшифровки ( Элемент , Расшифровка , СтандартнаяОбработка )
ЭтоГруппа = Ложь;
//Заполняем массив отрабатывемых типов
МассивРасшифровываемых = Новый Массив ();
МассивРасшифровываемых . Добавить ( "Партнер" );
МассивРасшифровываемых . Добавить ( "Контрагент" );
МассивРасшифровываемых . Добавить ( "Организация" );
//Получаем значение, по которому произвели двойной щелчек
РасшифровываемоеЗначение = ПолучитьРасшифровкуНаСервере ( Расшифровка , МассивРасшифровываемых , ЭтоГруппа ); //Партнер, Контрагент или Организация.
Если РасшифровываемоеЗначение = Неопределено Тогда Возврат; КонецЕсли;
СтандартнаяОбработка = Ложь;
//Создание и заполнени объекта ОбработкаРасшифровкиКомпоновкиДанных (подробности в Хелпе)
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных ( ДанныеРасшифровки , Новый ИсточникДоступныхНастроекКомпоновкиДанных ( Отчет ));
ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных . Нет ;
ПараметрВыполненногоДействия = Неопределено;
ДоступныеДействия = Новый Массив ;
ДоступныеДействия . Добавить ( ДействиеОбработкиРасшифровкиКомпоновкиДанных . ОткрытьЗначение );
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить);
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Сгруппировать);
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
ДополнительныеПунктыМеню = Новый СписокЗначений ;
ОбщаяСтрока = "Показать расчеты с отбором " + """" + Строка ( ТипЗнч ( РасшифровываемоеЗначение )) + " color: red;">+ РасшифровываемоеЗначение + """" ;
ДополнительныеПунктыМеню . Добавить ( 1 , ОбщаяСтрока + " за месяц" );
ДополнительныеПунктыМеню . Добавить ( 3 , ОбщаяСтрока + " за 3 месяца" );
ДополнительныеПунктыМеню . Добавить ( 6 , ОбщаяСтрока + " за пол года" );
ДополнительныеПунктыМеню . Добавить ( 12 , ОбщаяСтрока + " за год" );
//Выдаем меню расшифровки, считываем реакцию пользователя
ОбработкаРасшифровки . ВыбратьДействие ( Расшифровка , ВыполненноеДействие , ПараметрВыполненногоДействия , ДоступныеДействия , ДополнительныеПунктыМеню );
Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных . Нет Тогда
ИначеЕсли ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных . ОткрытьЗначение Тогда
//Имитация стандартного действия
ОткрытьЗначение ( ПараметрВыполненногоДействия );
ИначеЕсли ТипЗнч ( ВыполненноеДействие ) = Тип ( "Число" ) Тогда // Тут требуется наша расшифровка
ФормаР = ПолучитьФорму ( "Отчет.РасчетыСПартнерами.Форма" , , , РасшифровываемоеЗначение ); //Форма Расшифровки.
КомпоновщикНастроек = ЭтаФорма . Отчет . КомпоновщикНастроек ;
КомпоновщикНастроекР = ФормаР . Отчет . КомпоновщикНастроек ;
//Заполняем настройки отчета расшифровки
УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу ( КомпоновщикНастроек , КомпоновщикНастроекР , "Партнер" );
УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу ( КомпоновщикНастроек , КомпоновщикНастроекР , "Контрагент" );
УстановитьЗначениеОтбораКомпоновщикаНастроек ( КомпоновщикНастроекР , Строка ( ТипЗнч ( РасшифровываемоеЗначение )), РасшифровываемоеЗначение , ?( ЭтоГруппа , ВидСравненияКомпоновкиДанных . ВИерархии , ВидСравненияКомпоновкиДанных . Равно ));
ДатаКонца = ПолучитьЗначениеПераметраКомпоновщикаНастроек ( ЭтаФорма . Отчет . КомпоновщикНастроек , "ДатаКонца" );
ПериодОтчета = Новый СтандартныйПериод ( ДобавитьМесяц ( ДатаКонца , - ВыполненноеДействие ), ДатаКонца );
УстановитьЗначениеПераметраКомпоновщикаНастроек ( КомпоновщикНастроекР , "Период" , ПериодОтчета );
//Формируем и выводим отчета-расшифровку
СтруктураВозврата = ОбработатьРасшифровкуНаСервере ( ФормаР . Отчет , "ОтчетОбъект.РасчетыСПартнерами" , ФормаР . Результат , ФормаР . ДанныеРасшифровки , ФормаР . УникальныйИдентификатор );
ФормаР . Результат = СтруктураВозврата . Результат ;
ФормаР . ДанныеРасшифровки = СтруктураВозврата . ДанныеРасшифровки ;
ФормаР . Элементы . Результат . ОтображениеСостояния . Видимость = Ложь; //Избавление от надписи. Отчет не сформирован
ФормаР . Элементы . Результат . ОтображениеСостояния . ДополнительныйРежимОтображения = ДополнительныйРежимОтображения . НеИспользовать ;
ФормаР . Открыть ();
Серверная процедура ПолучитьРасшифровкуНаСервере, вызываемая из РезультатОбработкаРасшифровки - получает значение расшифровки (конкретную ссылку на элемент справочника, список типов которых переданы в параметрах), а также возвращает признак группы ЭтоГруппа:
&НаСервере
Функция ПолучитьРасшифровкуНаСервере ( Расшифровка , МассивИменРасшифровки , ЭтоГруппа = Ложь)
Данные = ПолучитьИзВременногоХранилища ( ДанныеРасшифровки );
Поля = Данные . Элементы . Получить ( Расшифровка ). ПолучитьПоля ();
Для Каждого ИмяРасшифровки Из МассивИменРасшифровки Цикл
ПолеНоменклатура = Поля . Найти ( ИмяРасшифровки );
Если Не ПолеНоменклатура = Неопределено Тогда Прервать; КонецЕсли;
КонецЦикла;
Если ПолеНоменклатура = Неопределено Тогда
Возврат Неопределено;
Иначе
ЭтоГруппа = ПолеНоменклатура . Значение . ЭтоГруппа ;
Возврат ПолеНоменклатура . Значение ;
КонецЕсли;
КонецФункции
Клиентская процедура УстановитьЗначениеОтбораКомпоновщикаНастроек вызываемая из РезультатОбработкаРасшифровки (и из УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу) - устанавливает параметры отбора Компоновщика настроек отчета расшифровки, сначала пытается произвести установку пользовательских настроек отбора:
ИДЭлмОтбора = "" ;
Для Каждого Элемент Из КомпоновщикНастроекР . Настройки . Отбор . Элементы Цикл
Если Элемент . ЛевоеЗначение = ПолеЭлементаОтбора Тогда ИДЭлмОтбора = Элемент . ИдентификаторПользовательскойНастройки ; Прервать; КонецЕсли;
КонецЦикла;
КоллекцияР = КомпоновщикНастроекР . ПользовательскиеНастройки . Элементы ; //Пользовательские настройки
Если ИДЭлмОтбора = "" Тогда //Не нашли среди стандартных настроек
Для Каждого Элемент Из КоллекцияР Цикл //Ищем отбор, и добавляем в него.
Если ТипЗнч ( Элемент ) = Тип ( "ОтборКомпоновкиДанных" ) Тогда
ПолеОтбора = Новый ПолеКомпоновкиДанных ( ИмяОтбора );
ОтборНайден = Ложь;
Для Каждого ЭлементОтбора Из Элемент . Элементы Цикл
Если ЭлементОтбора . ЛевоеЗначение = ПолеОтбора Тогда ОтборНайден = Истина; Прервать; КонецЕсли;
КонецЦикла;
Если Не ОтборНайден Тогда
ЭлементОтбора = Элемент . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ));
Элемент . Элементы [ 0 ]. ЛевоеЗначение = ПолеОтбора ;
ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( ИмяОтбора );
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
ЭлементОтбора = КоллекцияР . Найти ( ИДЭлмОтбора );
КонецЕсли;
ЭлементОтбора . ПравоеЗначение = Значение ;
ЭлементОтбора . Использование = Использование ;
ЭлементОтбора . ВидСравнения = ВидСравнения ;
КонецПроцедуры
Клиентская процедура УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу вызываемая из РезультатОбработкаРасшифровки - устанавливает параметры отбора Компоновщика настроек отчета расшифровки извлекая их из текущего (расшифровываемого) отчета:
&НаКлиенте
Процедура УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу ( КомпоновщикНастроек , КомпоновщикНастроекР , ИмяОтбора )
Коллекция = КомпоновщикНастроек . ПользовательскиеНастройки . Элементы ; //Коллекция элементов пользовательчких настроек в текущем отчете
Отбор = КомпоновщикНастроек . Настройки . Отбор ;
ПолеЭлементаОтбора = Отбор . ДоступныеПоляОтбора . Элементы . Найти ( ИмяОтбора ). Поле ;
ИДЭлмОтбора = "" ;
Для Каждого Элемент Из Отбор . Элементы Цикл
Если Элемент . ЛевоеЗначение = ПолеЭлементаОтбора Тогда ИДЭлмОтбора = Элемент . ИдентификаторПользовательскойНастройки ; Прервать; КонецЕсли;
КонецЦикла;
ЭлементОтбора = Коллекция . Найти ( ИДЭлмОтбора );
УстановитьЗначениеОтбораКомпоновщикаНастроек ( КомпоновщикНастроекР , ИмяОтбора , ЭлементОтбора . ПравоеЗначение , ЭлементОтбора . ВидСравнения , ЭлементОтбора . Использование );
КонецПроцедуры
Клиентская функция ПолучитьЗначениеПераметраКомпоновщикаНастроек и процедура УстановитьЗначениеПераметраКомпоновщикаНастроек вызываемые из РезультатОбработкаРасшифровки - устанавливают и получают значения параметров из компоновшика настроек СКД:
Серверная процедура ОбработатьРасшифровкуНаСервере, вызываемая из РезультатОбработкаРасшифровки - собственно создает (компонует) отчет для дальнейшего отображения на экране
&НаСервере
Функция ОбработатьРасшифровкуНаСервере (Знач ОтчетХ , ИмяТипаОтчета ,Знач РезультатХ , Знач ДанныеРасшифровкиХ , Знач ИДФормы )
ОтчетОбъект = ДанныеФормыВЗначение ( ОтчетХ , Тип ( ИмяТипаОтчета )); //Для компоновки результата
РезультатХ . Очистить ();
ОтчетОбъект . СкомпоноватьРезультат ( РезультатХ , ДанныеРасшифровкиХ ); //Собственно формирование отчета
АдресДанныеРасшифровки = ПоместитьВоВременноеХранилище ( ДанныеРасшифровкиХ , ИДФормы ); //Запоминаем расшифровку (с ИД формы)
Возврат Новый Структура ( "Результат,ДанныеРасшифровки" , РезультатХ , АдресДанныеРасшифровки ); //Возвращаем результат и Адрес расщифровки
КонецФункции
Коротко поясню что делается в основной процедуре РезультатОбработкаРасшифровки :
Получаем Ссылку (одного из нужных типов), по которой пользователь произвел клик (вызов серверной функции "ПолучитьРасшифровкуНаСервере")
Формируем и наполняем содержимым объект ОбработкаРасшифровки
Выводим на экран меню расшифровки и считываем выбор пользователя
Когда требуется расшифровка одного отчета СКД при помощи другого отчета СКД с возможностью выбора дополнительных настроек, можно использовать представленный вариант. Под "нестандартной расшифровкой" имеется ввиду расшифровка данных одного вида отчета - другим видом, отличным от первого (с предварительной установкой нужных параметров и отборов в отчете-расшифровке).
Реализация основана на статье Нестандартная расшифровка СКД или расшифровка одного отчета СКД при помощи другого отчета СКД, но имеет существенное дополнение, а именно позволяет производить как стандартное действие расшифровки отчета, так и нестандартное (расшифровку через другой отчет). Причем управление параметрами и отборами в текущей реализации вынесено в отдельные процедуры и функции, что повысило наглядность кода.
За основу отчета для расшифровки взят [УТ11] Дебиторка fifo по долгам контрагентов (СКД, управляемый интерфейс), к которому добавлена актуальная возможность расшифровки через стандартный отчет УТ11 "РасчетыСПартнерами".
Сама методика работает в любой конфигурации на управляемых формах, но пример привожу для УТ11. Отчет интересен не только как реализация методики гибкой расшифровки, но и как удобное подспорье, для пользователя непосредственно при использовании.
Анимированная gif картинка показывает то, что увидит пользователь при попытке расшифровки по элементу "Партнер", предварительно построенного начального отчета:
Т.е. при двойном клике по ячейке, в которой содержится информация о Партнере, открывается дополнительное уточняющее меню, в котором можно выбрать действие по умолчанию "Открыть. ", либо получить уточняющий отчет "Показать расчеты с отбором. ", причем по разным интервалам времени.
Прежде всего, чтобы иметь возможность запрограммировать расшифровку нам понадобится форма расшифровываемого отчета, например ФормаОтчета, её необходимо добавить (элементы формы система добавит сама).
Для элемента формы «Результат» в событии «ОбработкаРасшифровки» нужно добавить процедуру, например: «РезультатОбработкаРасшифровки»
В модуле этой формы (ФормаОтчета) нужно наполнить процедуру РезультатОбработкаРасшифровки содержимым:
& НаКлиенте
Процедура РезультатОбработкаРасшифровки ( Элемент , Расшифровка , СтандартнаяОбработка )
ЭтоГруппа = Ложь;
//Заполняем массив отрабатывемых типов
МассивРасшифровываемых = Новый Массив ();
МассивРасшифровываемых . Добавить ( "Партнер" );
МассивРасшифровываемых . Добавить ( "Контрагент" );
МассивРасшифровываемых . Добавить ( "Организация" );
//Получаем значение, по которому произвели двойной щелчек
РасшифровываемоеЗначение = ПолучитьРасшифровкуНаСервере ( Расшифровка , МассивРасшифровываемых , ЭтоГруппа ); //Партнер, Контрагент или Организация.
Если РасшифровываемоеЗначение = Неопределено Тогда Возврат; КонецЕсли;
СтандартнаяОбработка = Ложь;
//Создание и заполнени объекта ОбработкаРасшифровкиКомпоновкиДанных (подробности в Хелпе)
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных ( ДанныеРасшифровки , Новый ИсточникДоступныхНастроекКомпоновкиДанных ( Отчет ));
ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных . Нет ;
ПараметрВыполненногоДействия = Неопределено;
ДоступныеДействия = Новый Массив ;
ДоступныеДействия . Добавить ( ДействиеОбработкиРасшифровкиКомпоновкиДанных . ОткрытьЗначение );
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить);
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Сгруппировать);
//ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
ДополнительныеПунктыМеню = Новый СписокЗначений ;
ОбщаяСтрока = "Показать расчеты с отбором " + """" + Строка ( ТипЗнч ( РасшифровываемоеЗначение )) + " color: red;">+ РасшифровываемоеЗначение + """" ;
ДополнительныеПунктыМеню . Добавить ( 1 , ОбщаяСтрока + " за месяц" );
ДополнительныеПунктыМеню . Добавить ( 3 , ОбщаяСтрока + " за 3 месяца" );
ДополнительныеПунктыМеню . Добавить ( 6 , ОбщаяСтрока + " за пол года" );
ДополнительныеПунктыМеню . Добавить ( 12 , ОбщаяСтрока + " за год" );
//Выдаем меню расшифровки, считываем реакцию пользователя
ОбработкаРасшифровки . ВыбратьДействие ( Расшифровка , ВыполненноеДействие , ПараметрВыполненногоДействия , ДоступныеДействия , ДополнительныеПунктыМеню );
Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных . Нет Тогда
ИначеЕсли ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных . ОткрытьЗначение Тогда
//Имитация стандартного действия
ОткрытьЗначение ( ПараметрВыполненногоДействия );
ИначеЕсли ТипЗнч ( ВыполненноеДействие ) = Тип ( "Число" ) Тогда // Тут требуется наша расшифровка
ФормаР = ПолучитьФорму ( "Отчет.РасчетыСПартнерами.Форма" , , , РасшифровываемоеЗначение ); //Форма Расшифровки.
КомпоновщикНастроек = ЭтаФорма . Отчет . КомпоновщикНастроек ;
КомпоновщикНастроекР = ФормаР . Отчет . КомпоновщикНастроек ;
//Заполняем настройки отчета расшифровки
УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу ( КомпоновщикНастроек , КомпоновщикНастроекР , "Партнер" );
УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу ( КомпоновщикНастроек , КомпоновщикНастроекР , "Контрагент" );
УстановитьЗначениеОтбораКомпоновщикаНастроек ( КомпоновщикНастроекР , Строка ( ТипЗнч ( РасшифровываемоеЗначение )), РасшифровываемоеЗначение , ?( ЭтоГруппа , ВидСравненияКомпоновкиДанных . ВИерархии , ВидСравненияКомпоновкиДанных . Равно ));
ДатаКонца = ПолучитьЗначениеПераметраКомпоновщикаНастроек ( ЭтаФорма . Отчет . КомпоновщикНастроек , "ДатаКонца" );
ПериодОтчета = Новый СтандартныйПериод ( ДобавитьМесяц ( ДатаКонца , - ВыполненноеДействие ), ДатаКонца );
УстановитьЗначениеПераметраКомпоновщикаНастроек ( КомпоновщикНастроекР , "Период" , ПериодОтчета );
//Формируем и выводим отчета-расшифровку
СтруктураВозврата = ОбработатьРасшифровкуНаСервере ( ФормаР . Отчет , "ОтчетОбъект.РасчетыСПартнерами" , ФормаР . Результат , ФормаР . ДанныеРасшифровки , ФормаР . УникальныйИдентификатор );
ФормаР . Результат = СтруктураВозврата . Результат ;
ФормаР . ДанныеРасшифровки = СтруктураВозврата . ДанныеРасшифровки ;
ФормаР . Элементы . Результат . ОтображениеСостояния . Видимость = Ложь; //Избавление от надписи. Отчет не сформирован
ФормаР . Элементы . Результат . ОтображениеСостояния . ДополнительныйРежимОтображения = ДополнительныйРежимОтображения . НеИспользовать ;
ФормаР . Открыть ();
Серверная процедура ПолучитьРасшифровкуНаСервере, вызываемая из РезультатОбработкаРасшифровки - получает значение расшифровки (конкретную ссылку на элемент справочника, список типов которых переданы в параметрах), а также возвращает признак группы ЭтоГруппа:
&НаСервере
Функция ПолучитьРасшифровкуНаСервере ( Расшифровка , МассивИменРасшифровки , ЭтоГруппа = Ложь)
Данные = ПолучитьИзВременногоХранилища ( ДанныеРасшифровки );
Поля = Данные . Элементы . Получить ( Расшифровка ). ПолучитьПоля ();
Для Каждого ИмяРасшифровки Из МассивИменРасшифровки Цикл
ПолеНоменклатура = Поля . Найти ( ИмяРасшифровки );
Если Не ПолеНоменклатура = Неопределено Тогда Прервать; КонецЕсли;
КонецЦикла;
Если ПолеНоменклатура = Неопределено Тогда
Возврат Неопределено;
Иначе
ЭтоГруппа = ПолеНоменклатура . Значение . ЭтоГруппа ;
Возврат ПолеНоменклатура . Значение ;
КонецЕсли;
КонецФункции
Клиентская процедура УстановитьЗначениеОтбораКомпоновщикаНастроек вызываемая из РезультатОбработкаРасшифровки (и из УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу) - устанавливает параметры отбора Компоновщика настроек отчета расшифровки, сначала пытается произвести установку пользовательских настроек отбора:
ИДЭлмОтбора = "" ;
Для Каждого Элемент Из КомпоновщикНастроекР . Настройки . Отбор . Элементы Цикл
Если Элемент . ЛевоеЗначение = ПолеЭлементаОтбора Тогда ИДЭлмОтбора = Элемент . ИдентификаторПользовательскойНастройки ; Прервать; КонецЕсли;
КонецЦикла;
КоллекцияР = КомпоновщикНастроекР . ПользовательскиеНастройки . Элементы ; //Пользовательские настройки
Если ИДЭлмОтбора = "" Тогда //Не нашли среди стандартных настроек
Для Каждого Элемент Из КоллекцияР Цикл //Ищем отбор, и добавляем в него.
Если ТипЗнч ( Элемент ) = Тип ( "ОтборКомпоновкиДанных" ) Тогда
ПолеОтбора = Новый ПолеКомпоновкиДанных ( ИмяОтбора );
ОтборНайден = Ложь;
Для Каждого ЭлементОтбора Из Элемент . Элементы Цикл
Если ЭлементОтбора . ЛевоеЗначение = ПолеОтбора Тогда ОтборНайден = Истина; Прервать; КонецЕсли;
КонецЦикла;
Если Не ОтборНайден Тогда
ЭлементОтбора = Элемент . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ));
Элемент . Элементы [ 0 ]. ЛевоеЗначение = ПолеОтбора ;
ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( ИмяОтбора );
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
ЭлементОтбора = КоллекцияР . Найти ( ИДЭлмОтбора );
КонецЕсли;
ЭлементОтбора . ПравоеЗначение = Значение ;
ЭлементОтбора . Использование = Использование ;
ЭлементОтбора . ВидСравнения = ВидСравнения ;
КонецПроцедуры
Клиентская процедура УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу вызываемая из РезультатОбработкаРасшифровки - устанавливает параметры отбора Компоновщика настроек отчета расшифровки извлекая их из текущего (расшифровываемого) отчета:
&НаКлиенте
Процедура УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу ( КомпоновщикНастроек , КомпоновщикНастроекР , ИмяОтбора )
Коллекция = КомпоновщикНастроек . ПользовательскиеНастройки . Элементы ; //Коллекция элементов пользовательчких настроек в текущем отчете
Отбор = КомпоновщикНастроек . Настройки . Отбор ;
ПолеЭлементаОтбора = Отбор . ДоступныеПоляОтбора . Элементы . Найти ( ИмяОтбора ). Поле ;
ИДЭлмОтбора = "" ;
Для Каждого Элемент Из Отбор . Элементы Цикл
Если Элемент . ЛевоеЗначение = ПолеЭлементаОтбора Тогда ИДЭлмОтбора = Элемент . ИдентификаторПользовательскойНастройки ; Прервать; КонецЕсли;
КонецЦикла;
ЭлементОтбора = Коллекция . Найти ( ИДЭлмОтбора );
УстановитьЗначениеОтбораКомпоновщикаНастроек ( КомпоновщикНастроекР , ИмяОтбора , ЭлементОтбора . ПравоеЗначение , ЭлементОтбора . ВидСравнения , ЭлементОтбора . Использование );
КонецПроцедуры
Клиентская функция ПолучитьЗначениеПераметраКомпоновщикаНастроек и процедура УстановитьЗначениеПераметраКомпоновщикаНастроек вызываемые из РезультатОбработкаРасшифровки - устанавливают и получают значения параметров из компоновшика настроек СКД:
Серверная процедура ОбработатьРасшифровкуНаСервере, вызываемая из РезультатОбработкаРасшифровки - собственно создает (компонует) отчет для дальнейшего отображения на экране
&НаСервере
Функция ОбработатьРасшифровкуНаСервере (Знач ОтчетХ , ИмяТипаОтчета ,Знач РезультатХ , Знач ДанныеРасшифровкиХ , Знач ИДФормы )
ОтчетОбъект = ДанныеФормыВЗначение ( ОтчетХ , Тип ( ИмяТипаОтчета )); //Для компоновки результата
РезультатХ . Очистить ();
ОтчетОбъект . СкомпоноватьРезультат ( РезультатХ , ДанныеРасшифровкиХ ); //Собственно формирование отчета
АдресДанныеРасшифровки = ПоместитьВоВременноеХранилище ( ДанныеРасшифровкиХ , ИДФормы ); //Запоминаем расшифровку (с ИД формы)
Возврат Новый Структура ( "Результат,ДанныеРасшифровки" , РезультатХ , АдресДанныеРасшифровки ); //Возвращаем результат и Адрес расщифровки
КонецФункции
Коротко поясню что делается в основной процедуре РезультатОбработкаРасшифровки :
Получаем Ссылку (одного из нужных типов), по которой пользователь произвел клик (вызов серверной функции "ПолучитьРасшифровкуНаСервере")
Формируем и наполняем содержимым объект ОбработкаРасшифровки
Выводим на экран меню расшифровки и считываем выбор пользователя
При разработке отчетов в 1С достаточно часто требуется такая функция как Расшифровка 1С СКД. Обычно под расшифровкой понимается формирование такого же отчета с установленными отборами с дополнительной (более подробной) группировкой.
В том числе такая возможность имеется и в отчетах, созданных с помощью 1С СКД. При этом функционал расшифровки является встроенным и позволяет выполнять пользователю различные действия, без приложения дополнительных усилий со стороны программиста. То есть при создании отчета на СКД программисту достаточно настроить только схему компоновки – без дополнительного кода в модуле отчета и без добавления форм отчета.
В пользовательском режиме расшифровку отчета можно вызвать двумя способами:
- Левой клавишей мыши (ЛКМ) или с клавиатуры клавишей Enter на области отчета. При этом для значений ссылочного типа выполняется действие по умолчанию – открытие значения, для полей ресурсов – расшифровка по выбранному полю, для значений группировкой не ссылочного типа – открывается меню выбора действия расшифровки
- Правой клавишей мыли (ПКМ) . При этом открывается меню выбора действия расшифровки
Какие действия доступны при выполнении расшифровки:
- Расшифровать – новый отчет с установленными отборами по измерениям и группировкой по выбранному полю
- Открыть – открыть форму значения ссылочного типа
- Отфильтровать – новый отчет с дополнительно установленным отбором
- Упорядочить – новый отчет с дополнительно установленной сортировкой
- Сгруппировать – новый отчет с дополнительной группировкой
- Оформить – новый отчет с дополнительно настроенным условным оформлением
Что еще можно сделать с расшифровкой без программирования? В расшифровку попадают значения полей из наборов данных. Иногда возникает необходимость в отчет вывести одно значение, но в качестве расшифровки должно выступать другое поле. Например, регистратор можно выводить как номер, но необходимо, чтобы при клике по нему открывался документ. Это можно сделать без дополнительного программирования – через установку выражения представления
При такой настройке в расшифровке везде будет использоваться ссылка на документ, но в отчете будет выводиться только его номер.
Дальше мы будем рассматривать все более сложные ситуации при разработке отчета на СКД. Например, вам может понадобиться добавить свою форму в отчет – добавить какие-то дополнительные команды, настроить более сложный интерфейс для пользователя.
При добавлении новой формы отчета система производит сама настройку формы для использования совместно с СКД. В том числе добавляется реквизит «ДанныеРасшифровки» с типом «Строка». И в свойствах формы производится связь атрибута «Данные расшифровки» с созданным реквизитом.
Если вы добавляете форму отчета самостоятельно – например, как произвольную или копируете форму из какого-то другого объекта, для правильной работы расшифровки вам необходимо добавить реквизит и настроить его связь, как описано выше.
При разработке отчета на СКД вам иногда может понадобиться выполнять программного выполнения. Например, всегда – при использовании внешних наборов данных. Например, в ситуации, когда в отчете есть больше чем одна схема компоновки.
В этом случае, для правильной работы расшифровки, необходимо в модуле объекта отчета в процедуре ПриКомпоновкеРезультата передавать параметр процедуры «ДанныеРасшифровки» в два места кода программного выполнения СКД:
Следующий этап в разработке отчета на СКД, где вы столкнетесь с расшифровкой это использование собственных макетов. Если в схеме не указаны макеты, то платформа генерирует макеты для полей самостоятельно и самостоятельно настраивает их для правильно работы расшифровки. Если вы добавили свой макет, то вы должны дополнительно настроить работу расшифровки в нем.
Рассмотрим настройку простого отчета по регистру оборотов «Продажи»
В схеме добавлено два макета группировки
Если сформировать отчет и навести курсор на группировку «Контрагент», то курсор меняется на «лупу с крестиком» — расшифровка доступна. Если навести курсор на группировки «Номенклатура» или «Детали», расшифровка недоступна.
Макет для группировки «Номенклатура» выглядит следующим образом
Для ячейки макета «Номенклатура» определим свойство «ПараметрРасшифровки»
Назвать параметр расшифровки нужно отлично от свойства «Параметр», тогда в параметрах макета добавится наш параметр расшифровки:
Зайдем здесь в редактирование поля «Выражение», определим основное действие. Например, «Расшифровать»:
Теперь это действие будет выполняться по умолчанию при клике ЛКМ, при клике ПКМ доступно меню всех действий расшифровки. Для остальных ячеек (Количество, Сумма) зададим такое же название параметра расшифровки. В этом случае расшифровка будет действовать одинаково для всех ячеек в группировке.
В окне редактирования параметра расшифровки мы можем также переопределить значения полей набора, которые будут использоваться для расшифровки. Например, для поля «Номенклатуры» можно указать выражение «Контрагент» и при открытии значения будет открываться карточка контрагента:
Мы разобрали уже немало вариантов применения расшифровки в СКД, но до сих пор не написали ни одной (ну или почти ни одной) строчки кода. В следующей главе рассмотрим ситуации, когда для обработки расшифровки необходимо написать программный код.
Когда может понадобиться произвольная обработка расшифровки? Например, если результат отчета вам нужно расшифровать этим же отчетом, но с другими настройками, с другим макетом, выполнить расшифровку другим отчетом, выполнить какую-то обработку и т.п.
Для реализации произвольной расшифровки служит событие «ОбработкаРасшифровки» у табличного документа и обработчик «ОбработкаДополнительнойРасшифровки». Первой событие вызывается по ЛКМ, второй при клике ПКМ.
Заголовок обоих обработчиков выглядит одинаково. Здесь и далее будем рассматривать работу расшифровки для управляемых форм:
Нас будут интересовать параметры: «Расшифровка» — в этом параметре указывается идентификатор расшифровки, в параметре «СтандартнаяОбработка» указываем «Истина», если нужно выполнить стандартный алгоритм расшифровки, «Ложь» если мы реализуем произвольную расшифровку.
Теперь немного подробнее про параметр «Расшифровка». Вспомним про реквизит формы «ДанныеРасшифровки» . В этом реквизите (напомню, что мы рассматриваем управляемый режим) хранится адрес временного хранилища, в котором хранится объект типа «ДанныеРасшифровкиКомпоновкиДанных». У этого объекта есть свойство «Элементы», в котором в виде списка (коллекции) хранятся все параметры расшифровки. И наш параметр «Расшифровка» является индексом в этой коллекции. То есть получить собственно сам параметр расшифровки мы можем получить следующим образом:
Здесь используется функция общего модуля «ПолучитьМассивПолейРасшифровки», которая кроме текущего значения параметра расшифровки получается значения родительский полей и значения установленных отборов:
В итоге мы получаем массив элементов с типом «ЭлементОтбораКомпоновкиДанных» или «ЗначениеПоляРасшифровкиКомпоновкиДанных», эти значения мы уже можем передать в другой отчет или в обработку.
Когда мы реализуем собственную расшифровку, часто возникает потребность оставить типовые действия расшифровки , к которым нужно лишь добавить свои действия.
В этом нам может помочь объекта с типом «ОбработкаРасшифровкиКомпоновкиДанных». В обработчике «ОбработкаРасшифровки» мы можем написать такой код:
Здесь с помощью реквизита «ДанныеРасшифровки» и источника доступных настроек, полученного из компоновщика настроек нашего отчета мы получаем объект указанного типа. Далее мы вызываем метод объекта «ПоказатьВыборДействия», в который передаем нужные нам типовые действия и список наших действие в виде дополнительных пунктов.
В обработке выбранного действия мы производится собственно действия по расшифровке:
В этом примере видно, что типовые действия такие как расшифровка, упорядочить можно выполнить с помощью объекта типа «ОписаниеОбработкиРасшифровкиКомпоновкиДанных», который мы передаем в новую форму нашего отчета. Можно выполнить расшифровку в текущей форме. Для этого используется метод «ПрименитьНастройки» объекта «ОбработкаРасшифровкиКомпоновкиДанных», который возвращает итоговые настройки. Далее мы загружаем эти настройки в компоновщик и выполняем отчет:
Можно эти настройки получать также с помощью таких методов объекта «ОбработкаРасшифровкиКомпоновкиДанных» как: Упорядочить, Расшифровать, Сгруппировать, Отфильтровать.
Рассмотрим задачу изменения расшифровки по умолчанию в 1С отчетах, реализованных с помощью системы компоновки данных (далее СКД). Один из вариантов решения этой задачи – переопределение алгоритма расшифровки в модуле формы отчета СКД.
[Очень часто для отчетов, выполненных с помощью системы компоновки данных, требуется изменить расшифровку по умолчанию. Один из вариантов решения этой задачи – переопределение алгоритма расшифровки в модуле формы отчета.]
1. Расшифровка отчета 1С: Открытие значения группировки отчета
Процедура обработчик события Обработка Расшифровки поля табличного документа выполняется при двойном щелчке мышью по полю отчета.
Следующий код выполняет открытие формы документа, являющегося значением группировки отчета:
&На Клиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если КлючТекущегоВарианта = "Вариант1" Тогда //Проверяем текущий вариант
Документ = ПолучитьДокумент(Расшифровка); //получаем ссылку на документ
Если Документ = Неопределено Тогда
ПоказатьЗначение(, Документ);//открываем форму документа
Получим значения группировок для поля, которое пытаются «расшифровать»:
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); //данные расшифровки – (реквизит формы отчета) строка с адресом хранения данных расшифровки
Если Группировки.Количество() > 0 Тогда
Для Каждого ПолеГруппировка Из ПоляГруппировки Цикл //находим нужную группировку
Если ПолеГруппировка.Поле = "Документ" Тогда
2. Расшифровка отчета СКД другим отчетом
В следующем примере продемонстрируем, как производится в 1С расшифровка отчета другим отчетом:
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если КлючТекущегоВарианта = "Вариант1" Тогда //Проверяем текущий вариант
ПараметрыФормы = Новый Структура;
ФормаРасшифровки = ПолучитьФорму("Отчет. Расшифровка.Форма ", ПараметрыФормы, , Истина);
ФормаРасшифровки.ВариантМодифицирован = Ложь; //если в процедуре ЗаполнитьНастройкиРасшифровки //меняется настройка типового варианта отчета, то при закрытии отчет расшифровка может выдавать вопрос о сохранении варианта. //Что бы этого не происходило, сбросим флаг модифицированности варианта отчета.
Функция ЗаполнитьНастройкиРасшифровки(КомпоновщикНастроекРасшифровки, Расшифровка)
Заполним параметры отчета-расшифровки параметрами текущего отчета
ПараметрОтчета = ПараметрПользовательскихНастроек(КомпоновщикНастроек, "Параметр1");
ПараметрОтчетаРасшифровки = ПараметрПользовательскихНастроек(КомпоновщикНастроекРасшифровки, "Параметр1");
Получение параметров отчета-расшифровки из группировок текущего отчета
ПараметрОтчетаРасшифровки = ПараметрПользовательскихНастроек(КомпоновщикНастроекРасшифровки, "Параметр2");
Функция ПараметрПользовательскихНастроек(КомпоновщикНастроек, ИмяПараметра)
3. Дополнительная расшифровка отчета
Для переопределения дополнительной расшифровки (контекстное меню поля отчета) используется обработчик ОбработкаДополнительнойРасшифровки табличного поля документа.
Пример:
Процедура РезультатОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
//список стандартных действий доступных в контекстном меню
//в качестве дополнительного действия сделаем доступной расшифровку другим отчетом
ДополнительныеДействия = Новый СписокЗначений;
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет);
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИсточникНастроек);
Определим процедуру, которая будет обрабатывать выбор пользователя
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаРасшифровкиЗавершение", ЭтаФорма, Расшифровка);
Выведем на экран контекстное меню дополнительной расшифровки
ОбработкаРасшифровки.ПоказатьВыборДействия(ОписаниеОповещения, Расшифровка, ДоступныеДействия, ДополнительныеДействия);
Функция, формирующая список доступных действий для текущей ячейки отчета:
ДоступныеДействия = Новый Массив;
Для Каждого ПолеРасшифровки Из Поля Цикл
Если ПолеРасшифровки.Поле = "Документ" Тогда
Если это попытка расшифровки поля Документ, добавим возможность открыть форму документа
Функция, выполняющая обработку действия, выбранного пользователем:
Процедура ОбработкаРасшифровкиЗавершение(ВыбранноеДействие, ПараметрВыбранногоДействия, ДополнительныеПараметры) Экспорт
Если ВыбранноеДействие = ДействияРашифровки.ОткрытьЗначение Тогда // Действие открытие значения
ИначеЕслиВыбранноеДействие = "ОтчетРасшифровка" Тогда
Документ = ПолучитьДокумент (Расшифровка);
Если Документ = Неопределено Тогда
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Документ", Документ));
ФормаРасшифровки = ПолучитьФорму("Отчет.Расшифровка.Форма", ПараметрыФормы, , Истина);
Иначе //стандартные действия
ПараметрыФормы = Новый Структура;
ОписаниеОбработкиРасшифровки = Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Расшифровка, ПараметрВыбранногоДействия);
ФормаРасшифровки = ПолучитьФорму("Отчет.ТекущийОтчет.Форма", ПараметрыФормы,, Истина);
4. Расшифровка отчетов 1С для типовых конфигураций
В отчетах, предназначенных для работы в типовых конфигурациях, удобно использовать общую форму отчетов. Чтобы переопределить расшифровку таких отчетов не обязательно менять модуль формы, достаточно прописать процедуры обработки расшифровки в общем модуле ОтчетыКлиентПереопределяемый:
// Обработчик расшифровки табличного документа формы отчета.
Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт
Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ТекущийОтчет" Тогда
//сюда помещаем код обработки расшифровки описанный выше
Разработчик ООО «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
Читайте также: