Содержание:
1. Пример расшифровки отчета 1С
2. Расшифровка отчета СКД другим отчетом
3. Дополнительная расшифровка отчета
4. Расшифровка отчетов 1С для типовых конфигураций
Рассмотрим задачу изменения расшифровки по умолчанию в 1С отчетах, реализованных с помощью системы компоновки данных (далее СКД). Один из вариантов решения этой задачи – переопределение алгоритма расшифровки в модуле формы отчета СКД.
[Очень часто для отчетов, выполненных с помощью системы компоновки данных, требуется изменить расшифровку по умолчанию. Один из вариантов решения этой задачи – переопределение алгоритма расшифровки в модуле формы отчета.]
1. Расшифровка отчета 1С: Открытие значения группировки отчета
Процедура обработчик события Обработка Расшифровки поля табличного документа выполняется при двойном щелчке мышью по полю отчета.
Следующий код выполняет открытие формы документа, являющегося значением группировки отчета:
&На Клиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если КлючТекущегоВарианта = "Вариант1" Тогда //Проверяем текущий вариант
Документ = ПолучитьДокумент(Расшифровка); //получаем ссылку на документ
Если Документ = Неопределено Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, Документ);//открываем форму документа
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьДокумент(Расшифровка)
Получим значения группировок для поля, которое пытаются «расшифровать»:
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); //данные расшифровки – (реквизит формы отчета) строка с адресом хранения данных расшифровки
Группировки = Данные.Элементы.Получить(Расшифровка).ПолучитьРодителей();
Если Группировки.Количество() > 0 Тогда
ИдентификаторГруппировки = Группировки[0].Идентификатор;
ПоляГруппировки = Данные.Элементы.Получить(ИдентификаторГруппировки).ПолучитьПоля();
Для Каждого ПолеГруппировка Из ПоляГруппировки Цикл //находим нужную группировку
Если ПолеГруппировка.Поле = "Документ" Тогда
Возврат ПолеГруппировка.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецФункции
2. Расшифровка отчета СКД другим отчетом
В следующем примере продемонстрируем, как производится в 1С расшифровка отчета другим отчетом:
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если КлючТекущегоВарианта = "Вариант1" Тогда //Проверяем текущий вариант
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыФормы.Вставить("КлючВарианта", "ОтчетРасшифровка");
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "Расшифровка");
ФормаРасшифровки = ПолучитьФорму("Отчет. Расшифровка.Форма ", ПараметрыФормы, , Истина);
КомпоновщикНастроекРасшифровки = ФормаРасшифровки.Отчет.КомпоновщикНастроек;
ЗаполнитьНастройкиРасшифровки(КомпоновщикНастроекРасшифровки, Расшифровка);
ФормаРасшифровки.Открыть();
ФормаРасшифровки.ВариантМодифицирован = Ложь; //если в процедуре ЗаполнитьНастройкиРасшифровки //меняется настройка типового варианта отчета, то при закрытии отчет расшифровка может выдавать вопрос о сохранении варианта. //Что бы этого не происходило, сбросим флаг модифицированности варианта отчета.
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ЗаполнитьНастройкиРасшифровки(КомпоновщикНастроекРасшифровки, Расшифровка)
ПараметрыКомпоновки = КомпоновщикНастроекРасшифровки.Настройки.ПараметрыДанных;
Заполним параметры отчета-расшифровки параметрами текущего отчета
ПараметрОтчета = ПараметрПользовательскихНастроек(КомпоновщикНастроек, "Параметр1");
ПараметрОтчетаРасшифровки = ПараметрПользовательскихНастроек(КомпоновщикНастроекРасшифровки, "Параметр1");
ПараметрОтчетаРасшифровки.Значение = ПараметрОтчета.Значение;
Получение параметров отчета-расшифровки из группировок текущего отчета
ПараметрОтчетаРасшифровки = ПараметрПользовательскихНастроек(КомпоновщикНастроекРасшифровки, "Параметр2");
ПараметрОтчетаРасшифровки.Значение =ПолучитьДокумент(Расшифровка);
КонецФункции // ЗаполнитьПользовательскиеНастройки()
&НаКлиенте
Функция ПараметрПользовательскихНастроек(КомпоновщикНастроек, ИмяПараметра)
ПараметрыКомпоновки = КомпоновщикНастроек.Настройки.ПараметрыДанных;
ПараметрКомпоновки = ПараметрыКомпоновки.Элементы.Найти(ИмяПараметра);
ИдентификаторНастройки = ПараметрКомпоновки.ИдентификаторПользовательскойНастройки;
Коллекция = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
ПараметрПользовательскихНастроек = Коллекция.Найти(ИдентификаторНастройки);
Возврат ПараметрПользовательскихНастроек;
КонецФункции
3. Дополнительная расшифровка отчета
Для переопределения дополнительной расшифровки (контекстное меню поля отчета) используется обработчик ОбработкаДополнительнойРасшифровки табличного поля документа.
Пример:
&НаКлиенте
Процедура РезультатОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//список стандартных действий доступных в контекстном меню
ДоступныеДействия = СписокДоступныхДействий(Расшифровка);
//в качестве дополнительного действия сделаем доступной расшифровку другим отчетом
ДополнительныеДействия = Новый СписокЗначений;
ДополнительныеДействия.Добавить("ОтчетРасшифровка", "Отчет-расшифровка");
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет);
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИсточникНастроек);
Определим процедуру, которая будет обрабатывать выбор пользователя
Выведем на экран контекстное меню дополнительной расшифровки
ОбработкаРасшифровки.ПоказатьВыборДействия(ОписаниеОповещения, Расшифровка, ДоступныеДействия, ДополнительныеДействия);
КонецПроцедуры
Функция, формирующая список доступных действий для текущей ячейки отчета:
&НаСервере
Функция СписокДоступныхДействий(Расшифровка)
ДоступныеДействия = Новый Массив;
ДействияРашифровки = ДействиеОбработкиРасшифровкиКомпоновкиДанных;
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля();
Для Каждого ПолеРасшифровки Из Поля Цикл
Если ПолеРасшифровки.Поле = "Документ" Тогда
Если это попытка расшифровки поля Документ, добавим возможность открыть форму документа
ДоступныеДействия.Добавить(ДействияРашифровки.ОткрытьЗначение);
Прервать;
КонецЕсли;
КонецЦикла;
ДоступныеДействия.Добавить(ДействияРашифровки.Оформить);
ДоступныеДействия.Добавить(ДействияРашифровки.Отфильтровать);
ДоступныеДействия.Добавить(ДействияРашифровки.Упорядочить);
Возврат ДоступныеДействия;
КонецФункции
Функция, выполняющая обработку действия, выбранного пользователем:
&НаКлиенте
Процедура ОбработкаРасшифровкиЗавершение(ВыбранноеДействие, ПараметрВыбранногоДействия, ДополнительныеПараметры) Экспорт
ДействияРашифровки = ДействиеОбработкиРасшифровкиКомпоновкиДанных;
Если ВыбранноеДействие = ДействияРашифровки.ОткрытьЗначение Тогда // Действие открытие значения
ПоказатьЗначение(, ПараметрВыбранногоДействия);
ИначеЕслиВыбранноеДействие = "ОтчетРасшифровка" Тогда
Расшифровка = ДополнительныеПараметры;
Документ = ПолучитьДокумент (Расшифровка);
Если Документ = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Документ", Документ));
ПараметрыФормы.Вставить("КлючВарианта", "ОтчетРасшифрока");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "Расшифровка");
ФормаРасшифровки = ПолучитьФорму("Отчет.Расшифровка.Форма", ПараметрыФормы, , Истина);
ЗаполнитьНастройкиРасшифровки(ФормаРасшифровки.Отчет.КомпоновщикНастроек);
ФормаРасшифровки.Открыть();
Иначе //стандартные действия
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("КлючВарианта", "ТекущийВариантОтчета");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
Расшифровка = ДополнительныеПараметры;
ОписаниеОбработкиРасшифровки = Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Расшифровка, ПараметрВыбранногоДействия);
ПараметрыФормы.Вставить("Расшифровка", ОписаниеОбработкиРасшифровки);
ФормаРасшифровки = ПолучитьФорму("Отчет.ТекущийОтчет.Форма", ПараметрыФормы,, Истина);
ФормаРасшифровки.Открыть();
КонецЕсли;
КонецПроцедуры // ОбработкаДействияРасшифровки()
4. Расшифровка отчетов 1С для типовых конфигураций
В отчетах, предназначенных для работы в типовых конфигурациях, удобно использовать общую форму отчетов. Чтобы переопределить расшифровку таких отчетов не обязательно менять модуль формы, достаточно прописать процедуры обработки расшифровки в общем модуле ОтчетыКлиентПереопределяемый:
// Обработчик расшифровки табличного документа формы отчета.
Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт
//Начало изменений
Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ТекущийОтчет" Тогда
//сюда помещаем код обработки расшифровки описанный выше
КонецЕсли;
//КонецИзменений
КонецПроцедуры
Разработчик ООО «Кодерлайн»
Алена Крюкова.