1С скд макет расшифровка

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

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


Рис.1 Изменение курсора мыши при наведении на выбранную ячейку отчета

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


Рис.2 Список возможных действий при нажатии на ячейку с данными

По умолчанию открывается стандартная расшифровка, которая является общей для большинства отчетов конфигурации. Например, если щелкнуть на номенклатуру и в открывшемся окне навести курсор на «Открыть», то можно открыть необходимый элемент справочника номенклатуры, серии или характеристики.


Рис.3 Открытие справочников из отчета на СКД

Также можно отфильтровать, упорядочить, сгруппировать данные или оформить их.


Рис.4 Дополнительные механизмы работы с данными в отчете, фильтрация

Наряду со стандартными действиями есть возможность добавить собственные, а можно и полностью переоопределить стандартную расшифровку.

Расшифровка другим отчетом

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

Для начала создадим через Конфигуратор отчет, в котором с помощью конструктора построим основную схему компоновки данных.


Рис.5 Создание схемы компоновки данных из конфигуратора с помощью конструктора макета

Схема будет храниться в макете. Создаем выборку данных, настраиваем наборы данных и задаем другие настройки, необходимые для корректной работы отчета.


Рис.6 Создание отчета на СКД и настройка получения данных

После добавления макета нужно добавить основную форму отчета.

Читайте также:  Ассоциации к цифрам от 1 до 10


Рис.7 Добавление основной формы отчета

Для реквизита формы «Результат» необходимо заполнить действие «Обработка Расшифровки».


Рис. 8 Добавление обработки расшифровки для результата

В модуле формы мы и будем прописывать открытие нашего меню расшифровки.


Рис.9 Модуль формы отчета для задания дополнительных действий с отчетом и его расшифровки

Для начала в модуле формы отчета в процедуре РезультатОбработкаРасшифровки описываем получение полей, для которых будет выводиться расшифровка:

В коде запрещаем открытие стандартной расшифровки:

Выводим в расшифровку собственные действия:


Рис.10 Добавление своих пунктов в отчет на СКД и расшифровка их, открытие дополнительного меню

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


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

Для расшифровки на сервере используем следующую функцию:

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

Маленький IT блог с характером 1С.

Страницы

Поиск по блогу

воскресенье, 10 апреля 2016 г.

СКД. Добавление собственного пункта расшифровки.

Потребовалось как-то создать отчет, который выводит информацию об оплате товара: не оплачен (сумма оплаты = 0), частично оплачен (сумма оплаты табличного документа ОбработкаРасшифровки На заметку для отчетов, работающих под управляемыми формами! Переопределять действия по расшифровке отчета, вызываемой при нажатии правой кнопки мыши, нужно в обработчике события ОбработкаДополнительнойРасшифровки. А в обработчике события ОбработкаРасшифровки нужно переопределять действия, происходящие при двойном щелчке мыши на поле отчета.

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

Далее в процедуре события обработки расшифровки задал собственный алгоритм обработки расшифровки для поля СуммаОплаты:

Читайте также:  Php загрузить картинку на сервер

// 0. Процедура выполняет расшифровку обработки. Параметры: Элемент; Расшифровка (Произвольный) — значение расшифровки; СтандартнаяОбработка (Булево) — признак выполнения стандартной операции.
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Перем ВыбранноеДействие;
Перем ПараметрыВыбранногоДействия;

// 1. Получаем имя поля, для которого пользователь хочет применить расшифровку.
ИмяПоля = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле;

// 2. Определяем тип записи, детальная она или группировочная, т.к. расшифровку необходимо выполнять для детальной записи.
ЭтоДетальнаяЗапись = ЭтоДетальнаяЗапись(ДанныеРасшифровки, Расшифровка);

// 3. Выполняем проверку, если это поле СуммаОплаты и запись является детальной, то применяем собственный обработчик расшифровки.
Если ИмяПоля = "СуммаОплаты" И ЭтоДетальнаяЗапись Тогда

// 4. Отменяем стандартную обработку расшифровки.
СтандартнаяОбработка = Ложь;

// 5. Задаем список стандартных действий расшифровки, которые будут доступны пользователю.
ДоступныеДействия = Новый Массив;
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);

// 6. Задаем собственный список действий расшифровки, в моем случае это единственный пункт под названием "Расшифровать сумму".
ДополнительныеДействия = Новый СписокЗначений;
ДополнительныеДействия.Добавить("РасшифроватьСумму", "Расшифровать сумму");

// 7. Создаем объект, обрабатывающий расшифровку.
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

// 8. Интерактивный выбор действий обработки расшифровки. Для управляемой формы нужно использовать метод ВыбратьДействие, если для конфигурации свойство РежимИспользованияМодальности установлено в НеИспользовать, следует использовать метод ПоказатьВыборДействия.
ПараметрыВыбранногоДействия = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыбранноеДействие, , ДополнительныеДействия);

// 9. Проверим обработку расшифровки на изменение настроек.
Если ПараметрыВыбранногоДействия <> Неопределено Тогда

// 10. Если настройки изменены, значит пользователь выбрал стандартную расшифровку, которую мы определили в 5 пункте. Так как мы уже отменили выполнение стандартной операции в 4 пункте, то выполним стандартную обработку расшифровки программно.

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

// Открытие нового отчета с выводом результата для обычной формы.
//Отчет = Отчеты[Метаданные().Имя].Создать();
//Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыВыбранногоДействия);
//Форма = Отчет.ПолучитьФорму();
//Отчет.СкомпоноватьРезультат(Форма.ЭлементыФормы.Результат);
//Форма.Открыть();

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

// 10. Получим значение полей для собственной расшифровки см. рисунок 2, под 0 индексом получаем значение поля Реализация в текущей строке, а под 1 индексом значение поля СуммаОплаты.
ДокРеализация = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение;
СуммаОплаты = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[1].Значение;

Читайте также:  Можно ли сменить имя в фейсбук

// 11. Реализация собственной расшифровки и вывод результата (собственный алгоритм расшифровки приводить не буду, т.к. он громоздкий).
Сообщить("Сумма оплаты = " + СуммаОплаты + " по документу " + Строка(ДокРеализация));

КонецЕсли;
КонецЕсли;
КонецПроцедуры

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

Перем ВыбранноеДействие;
Перем ПараметрыВыбранногоДействия;

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

Если ИмяПоля = "СуммаОплаты" И ЭтоДетальнаяЗапись Тогда

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

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

ДополнительныеДействия = Новый СписокЗначений;
ДополнительныеДействия.Добавить("РасшифроватьСумму", "Расшифровать сумму");

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

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

Задача: В отчет СКД вместо ссылки на документ “Заявка на расходование ДС XX00-000001 от 09.01.2019 10:00:00″ вывести только его номер ” XX00-000001 “. Расшифровкой данного поля “Номер” должна быть ссылка на документ (по двойному клику открывается его форма).

Первоначальный вид отчета на СКД

Решение: Итак первое что нам надо сделать – это вместо ссылки вывести номера документа. Для этого поменяем запрос СКД и его настройки:

Строим наш отчет и видим, что все выводится как и задумывалось, но при двойном клике на поле “Номер” не происходит ничего:

Для того что бы это исправить нужно проделать элементарные действия:

  • На закладке отчета “Макет” добавляем “Макет Поля” (действие “Добавить макет поля”);
  • Указываем для него область (1 ячейку);
  • Заполняем свойства: “Параметр”, “ПараметрРасшифровки” (см. рисунок ниже);
  • Радуемся насколько мы крутые программисты.

Свойство “Параметр” – в него заносим значение из нашего набора данных, которое мы хотим отображть в этой ячейке.

Свойство “ПараметрРасшифровки” – в него записываем значение из набора данных, которые мы хотим видеть в качестве расшифровки.

Вот и все! Для примера можете скачать данный отчет по ссылке: “craft1c_отчетСКД_РасшифровкаЧерезМакет”.