KoderLine
KoderLine
Обслуговування i продаж
програмного забезпечення

Статті експертів

Корисна інформація

Система компоновки даних «1С:Підприємство»: програмна розшифровка

0
241
06.04.2018 Алена Крюкова

Содержание:

1. Пример расшифровки отчета «1С:Підприємство»

2. Расшифровка отчета СКД другим отчетом

3. Дополнительная расшифровка отчета

4. Расшифровка отчетов «1С:Підприємство» для типовых конфигураций


Рассмотрим задачу изменения расшифровки по умолчанию в «1С:Підприємство» отчетах, реализованных с помощью системы компоновки данных (далее СКД). Один из вариантов решения этой задачи – переопределение алгоритма расшифровки в модуле формы отчета СКД.


[Очень часто для отчетов, выполненных с помощью системы компоновки данных, требуется изменить расшифровку по умолчанию. Один из вариантов решения этой задачи – переопределение алгоритма расшифровки в модуле формы отчета.]


1. Расшифровка отчета «1С:Підприємство»: Открытие значения группировки отчета


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

Следующий код выполняет открытие формы документа, являющегося значением группировки отчета:


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

                Если КлючТекущегоВарианта = "Вариант1" Тогда //Проверяем текущий вариант

                               Документ = ПолучитьДокумент(Расшифровка); //получаем ссылку на документ

                               Если Документ = Неопределено Тогда

                                               Возврат;

                               КонецЕсли;

                                СтандартнаяОбработка = Ложь;

ПоказатьЗначение(, Документ);//открываем форму документа

                КонецЕсли;

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


&НаСервере

Функция ПолучитьДокумент(Расшифровка)


Получим значения группировок для поля, которое пытаются «расшифровать»:


Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); //данные расшифровки – (реквизит формы отчета) строка с адресом хранения данных расшифровки

Группировки = Данные.Элементы.Получить(Расшифровка).ПолучитьРодителей();

Если Группировки.Количество() > 0 Тогда

ИдентификаторГруппировки = Группировки[0].Идентификатор;

                ПоляГруппировки = Данные.Элементы.Получить(ИдентификаторГруппировки).ПолучитьПоля();

                Для Каждого ПолеГруппировка Из ПоляГруппировки Цикл //находим нужную группировку

                               Если ПолеГруппировка.Поле = "Документ" Тогда

                                               Возврат ПолеГруппировка.Значение;              

                               КонецЕсли;

                КонецЦикла;

КонецЕсли;

КонецФункции     


2. Расшифровка отчета СКД другим отчетом


В следующем примере продемонстрируем, как производится в «1С:Підприємство» расшифровка отчета другим отчетом:


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

                Если КлючТекущегоВарианта = "Вариант1" Тогда //Проверяем текущий вариант

                               СтандартнаяОбработка = Ложь;

ПараметрыФормы = Новый Структура;

                               ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

                               ПараметрыФормы.Вставить("КлючВарианта", "ОтчетРасшифровка");

                               ПараметрыФормы.Вставить("КлючНазначенияИспользования", "Расшифровка");

                               ФормаРасшифровки = ПолучитьФорму("Отчет. Расшифровка.Форма ", ПараметрыФормы, , Истина);

                               КомпоновщикНастроекРасшифровки = ФормаРасшифровки.Отчет.КомпоновщикНастроек;

                               ЗаполнитьНастройкиРасшифровки(КомпоновщикНастроекРасшифровки, Расшифровка);

ФормаРасшифровки.Открыть();

                                ФормаРасшифровки.ВариантМодифицирован = Ложь; //если в процедуре ЗаполнитьНастройкиРасшифровки //меняется настройка типового варианта отчета, то при закрытии отчет расшифровка может выдавать вопрос о сохранении варианта. //Что бы этого не происходило, сбросим флаг модифицированности варианта отчета.

                КонецЕсли;

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

&НаКлиенте

Функция ЗаполнитьНастройкиРасшифровки(КомпоновщикНастроекРасшифровки, Расшифровка)

                ПараметрыКомпоновки = КомпоновщикНастроекРасшифровки.Настройки.ПараметрыДанных;


Заполним параметры отчета-расшифровки параметрами текущего отчета

            

    ПараметрОтчета = ПараметрПользовательскихНастроек(КомпоновщикНастроек, "Параметр1");

                ПараметрОтчетаРасшифровки = ПараметрПользовательскихНастроек(КомпоновщикНастроекРасшифровки, "Параметр1");

                ПараметрОтчетаРасшифровки.Значение = ПараметрОтчета.Значение;


Получение параметров отчета-расшифровки из группировок текущего отчета

             

  

ПараметрОтчетаРасшифровки = ПараметрПользовательскихНастроек(КомпоновщикНастроекРасшифровки, "Параметр2");

                ПараметрОтчетаРасшифровки.Значение =ПолучитьДокумент(Расшифровка);                      

КонецФункции // ЗаполнитьПользовательскиеНастройки()

&НаКлиенте

Функция ПараметрПользовательскихНастроек(КомпоновщикНастроек, ИмяПараметра)

                ПараметрыКомпоновки = КомпоновщикНастроек.Настройки.ПараметрыДанных;

                ПараметрКомпоновки = ПараметрыКомпоновки.Элементы.Найти(ИмяПараметра);

                ИдентификаторНастройки = ПараметрКомпоновки.ИдентификаторПользовательскойНастройки;

                Коллекция = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;

                ПараметрПользовательскихНастроек = Коллекция.Найти(ИдентификаторНастройки);

               

                Возврат ПараметрПользовательскихНастроек;

КонецФункции

 


3. Дополнительная расшифровка отчета


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


Пример:


&НаКлиенте

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

                СтандартнаяОбработка = Ложь;

//список стандартных действий доступных в контекстном меню

ДоступныеДействия = СписокДоступныхДействий(Расшифровка);

                //в качестве дополнительного действия сделаем доступной расшифровку другим отчетом

                ДополнительныеДействия = Новый СписокЗначений;

                ДополнительныеДействия.Добавить("ОтчетРасшифровка", "Отчет-расшифровка");

               

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

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


Определим процедуру, которая будет обрабатывать выбор пользователя


    
            ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаРасшифровкиЗавершение", ЭтаФорма, Расшифровка);

Выведем на экран контекстное меню дополнительной расшифровки


ОбработкаРасшифровки.ПоказатьВыборДействия(ОписаниеОповещения, Расшифровка, ДоступныеДействия, ДополнительныеДействия);

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


Функция, формирующая список доступных действий для текущей ячейки отчета:


&НаСервере

Функция СписокДоступныхДействий(Расшифровка)

                ДоступныеДействия = Новый Массив;

                ДействияРашифровки = ДействиеОбработкиРасшифровкиКомпоновкиДанных;

                Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);

                Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля();

                Для Каждого ПолеРасшифровки Из Поля Цикл

                               Если ПолеРасшифровки.Поле = "Документ" Тогда


Если это попытка расшифровки поля Документ, добавим возможность открыть форму документа                                           

  

  ДоступныеДействия.Добавить(ДействияРашифровки.ОткрытьЗначение);

                                               Прервать;

                КонецЕсли;

                КонецЦикла;

                ДоступныеДействия.Добавить(ДействияРашифровки.Оформить);

                ДоступныеДействия.Добавить(ДействияРашифровки.Отфильтровать);

                ДоступныеДействия.Добавить(ДействияРашифровки.Упорядочить);

                Возврат ДоступныеДействия;

КонецФункции


Функция, выполняющая обработку действия, выбранного пользователем:


&НаКлиенте

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

                ДействияРашифровки = ДействиеОбработкиРасшифровкиКомпоновкиДанных;

                Если ВыбранноеДействие = ДействияРашифровки.ОткрытьЗначение Тогда // Действие открытие значения

                               ПоказатьЗначение(, ПараметрВыбранногоДействия);

                              

                ИначеЕслиВыбранноеДействие = "ОтчетРасшифровка" Тогда

                               Расшифровка = ДополнительныеПараметры;

                               Документ = ПолучитьДокумент (Расшифровка);

                               Если Документ = Неопределено Тогда

                                               Возврат;

                               КонецЕсли;

                              

                               ПараметрыФормы = Новый Структура;

                               ПараметрыФормы.Вставить("Отбор", Новый Структура("Документ", Документ));

                               ПараметрыФормы.Вставить("КлючВарианта", "ОтчетРасшифрока");

                               ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

                               ПараметрыФормы.Вставить("КлючНазначенияИспользования", "Расшифровка");

                               ФормаРасшифровки = ПолучитьФорму("Отчет.Расшифровка.Форма", ПараметрыФормы, , Истина);

                               ЗаполнитьНастройкиРасшифровки(ФормаРасшифровки.Отчет.КомпоновщикНастроек);

                               ФормаРасшифровки.Открыть();

               

                Иначе //стандартные действия           

                               ПараметрыФормы = Новый Структура;

                               ПараметрыФормы.Вставить("КлючВарианта", "ТекущийВариантОтчета");

                               ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

                               Расшифровка = ДополнительныеПараметры;

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

                               ПараметрыФормы.Вставить("Расшифровка", ОписаниеОбработкиРасшифровки);

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

                               ФормаРасшифровки.Открыть();

                КонецЕсли;   

КонецПроцедуры // ОбработкаДействияРасшифровки()


4. Расшифровка отчетов «1С:Підприємство» для типовых конфигураций 


В отчетах, предназначенных для работы в типовых конфигурациях, удобно использовать общую форму отчетов. Чтобы переопределить расшифровку таких отчетов не обязательно менять модуль формы, достаточно прописать процедуры обработки расшифровки в общем модуле ОтчетыКлиентПереопределяемый:


// Обработчик расшифровки табличного документа формы отчета.

Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт

                //Начало изменений

                Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ТекущийОтчет" Тогда

                               //сюда помещаем код обработки расшифровки описанный выше

                КонецЕсли;

                //КонецИзменений

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



Разработчик ООО «Кодерлайн»

Алена Крюкова.


Добавить комментарий
Message Text*
Spam bot protection (CAPTCHA)
Load image