Вывести отчет для расшифровки 1с

Использование объекта ДанныеРасшифровки

Для реализации расшифровки отчетов, выполненных при помощи системы компоновки данных, в платформе реализован объект ОбработкаРасшифровкиКомпоновкиДанных, который позволяет сформировать настройки компоновки данных, которые можно использовать для формирования отчета — расшифровки.

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

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

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

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

ВАЖНО!
Для того, чтобы при выводе отчета объект ДанныеРасшифровки был заполнен, следует его создать при компоновке макета и передать в процессор компоновки данных.

Для создания объекта ДанныеРасшифровки, при вызове метода Выполнить компоновщика макета, следует передать переменную, в которую требуется поместить созданный объект.
Пример:

МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);

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

Если используется метод объекта Отчет СкомпоноватьРезультат, то для заполнения данных расшифровки следует передать в метод переменную, в которую необходимо поместить данные расшифровки.

Если отчет формируется при помощи стандартной команды отчета Сформировать, то данные расшифровки помещаются в свойство расширения формы отчета ДанныеРасшифровки.

Объект ДанныеРасшифровки содержит настройки, для которых этот объект был сформирован (заполняются при генерации макета компоновки данных) и коллекции элементов расшифровки (заполняются при формировании результата).

Каждый элемент расшифровки имеет идентификатор (который и помещается в ячейку табличного документа — результата) и массив идентификаторов родительских элементов расшифровки. Имея идентификатор расшифровки из объекта ДанныеРасшифровки можно получить элемент расшифровки при помощи метода Получить или при помощи операции [].

Существуют два типа элементов расшифровки: ЭлементРасшифровкиКомпоновкиДанныхПоля и ЭлементРасшифровкиКомпоновкиДанныхГруппировка.

ЭлементРасшифровкиКомпоновкиДанныхПоля содержит список значений полей, которые присутствуют в элементе расшфровки. В каждом значении имеется указание того, для какого поля содержится значение (соответствует пути к данным поля в терминах настроек компоновки данных, например: Номенклатура.ОсновнойПоставщик), само значение поля, и указание того, что значение было получено для иерархической записи (имеет значение Истина, если значение было получено от иерархической записи).

ЭлементРасшифровкиКомпоновкиДанныхГруппировка содержит имя группировки, для которой был создан элемент (соответствует идентификатору группировки в настройках из данных расшифровки).

При компоновке результата процессор компоновки данных заполняет данные расшифровки следующим образом:

1. При выводе группировки помещает в данные расшифровки элемент типа ЭлементРасшифровкиКомпоновкиДанныхГруппировка, с указанием того, какая группировка выводится. Если выводится вложенная группировка, то в качестве идентификатора родительского элемента группировки будет использован идентификатор расшифровки от родительской группировки.

2. В качестве дочернего к элементу группировки выдает в данные расшифровки элемент типа ЭлементРасшифровкиКомпоновкиДанныхПоля, в который выдает значения полей, по которым осуществлялась группировка. Например, если группировка осуществлялась по полю Номенклатура.ОсновнойПоставщик, то в значениях полей будет находиться значение для этого поля. При этом, если группировка выполнялась по иерархии и в настоящий момент выдавалась иерархическая запись, то в значении поля группировки об этом будет сказано в свойстве Иерархия.

3. При выводе ячеек процессор компоновки получит из каждой ячейки список полей, которые нужно помещать в ее расшфровку и создаст в данных расшифровки для ячейки элемент типа ЭлементРасшифровкиКомпоновкиДанныхПоля, в который поместит значения полей. При этом родительским для нового элемента будет являться элемент, содержащий значения полей группировки, т.е. элемент, заполненный на втором шаге. Если выводился элемент для ресурсов на пересечении группировок кросс-таблицы, то у элемента будет установлено два родительских элемента — один от группировки — строки и один от группировки — колонки. Идентификатор вновь созданного элемента будет помещен в качестве значения расшифровки в ячейку результирующего табличного документа. Именно этот идентификатор придет в обработчик расшифровки, если пользователь потребует расшифровать в отчет в данной ячейке.

Обработка расшифровки.

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

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

Источник

Работа с расшифровкой в табличном документе

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

Для чего используется расшифровка и как ей пользоваться

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

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

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

Заполнение расшифровки

Расшифровка представляет собой значение, которое присвоено свойству «Расшифровка» области ячеек табличного документа или рисунку табличного документа. Заполнить данное свойство можно одним из следующих способов:

1. Непосредственно присвоив данному свойству значение.

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

Пример:

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

2. Использовать параметр расшифровки и метод «Вывести».

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

Пример:

Отчет выводится при помощи макета. В некоторой ячейке области «Запись» табличного документа содержится параметр расшифровки «Номенклатура». Результатом выполнения следующего кода будет помещение в данную ячейку значения переменной Номенклатура.

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

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

Пример того, как это можно сделать, воспользовавшись объектом Структура:

Аналогично выполняется заполнение расшифровки рисунка табличного документа.

Обратите внимание на свойство «ИспользованиеРасшифровки» ячейки табличного документа. Это свойство указывает, для какой области будет возможно вызвать расшифровку. Если данное свойство имеет значение «Ячейка», обработка расшифровки будет выполняться только для этой ячейки. Если «Строка», то расшифровка будет обрабатываться для всей строки, в которой расположена данная ячейка. Если же данное свойство имеет значение «Без обработки», то расшифровка для данной ячейке не будет обрабатываться вовсе, даже если ячейка будет содержать значение расшифровки.

Обработка расшифровки

После того, как расшифровка заполнена, следует позаботиться об ее обработке.

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

Если табличный документ отображается в поле табличного документа, возможно переопределение поведения расшифровки. Для этого нужно создать обработчик события ОбработкаРасшифровки поля табличного документа. Это событие будет вызываться при каждой попытке пользователя вызвать расшифровку. В обработчик события будет передано поле табличного документа, для которого вызвана расшифровка, значение расшифровки и флаг стандартной обработки расшифровки. Если стандартная обработка расшифровки не нужна, следует присвоить флагу СтандартнаяОбработка значение «Ложь».

Пример:

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

Источник

Расшифровка в 1С СКД

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

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

Стандартные возможности расшифровки 1С СКД

В пользовательском режиме расшифровку отчета можно вызвать двумя способами:

  • Левой клавишей мыши (ЛКМ) или с клавиатуры клавишей Enter на области отчета. При этом для значений ссылочного типа выполняется действие по умолчанию – открытие значения, для полей ресурсов – расшифровка по выбранному полю, для значений группировкой не ссылочного типа – открывается меню выбора действия расшифровки
  • Правой клавишей мыли (ПКМ) . При этом открывается меню выбора действия расшифровки

Какие действия доступны при выполнении расшифровки:

  • Расшифровать – новый отчет с установленными отборами по измерениям и группировкой по выбранному полю
  • Открыть – открыть форму значения ссылочного типа
  • Отфильтровать – новый отчет с дополнительно установленным отбором
  • Упорядочить – новый отчет с дополнительно установленной сортировкой
  • Сгруппировать – новый отчет с дополнительной группировкой
  • Оформить – новый отчет с дополнительно настроенным условным оформлением

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

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

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

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

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

Расшифровка при программном выполнении 1С СКД

При разработке отчета на СКД вам иногда может понадобиться выполнять программного выполнения. Например, всегда – при использовании внешних наборов данных. Например, в ситуации, когда в отчете есть больше чем одна схема компоновки.

В этом случае, для правильной работы расшифровки, необходимо в модуле объекта отчета в процедуре ПриКомпоновкеРезультата передавать параметр процедуры «ДанныеРасшифровки» в два места кода программного выполнения СКД:

Макеты и расшифровка 1С СКД

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

Рассмотрим настройку простого отчета по регистру оборотов «Продажи»

В схеме добавлено два макета группировки

Если сформировать отчет и навести курсор на группировку «Контрагент», то курсор меняется на «лупу с крестиком» — расшифровка доступна. Если навести курсор на группировки «Номенклатура» или «Детали», расшифровка недоступна.

Макет для группировки «Номенклатура» выглядит следующим образом

Для ячейки макета «Номенклатура» определим свойство «ПараметрРасшифровки»

Назвать параметр расшифровки нужно отлично от свойства «Параметр», тогда в параметрах макета добавится наш параметр расшифровки:

Зайдем здесь в редактирование поля «Выражение», определим основное действие. Например, «Расшифровать»:

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

В окне редактирования параметра расшифровки мы можем также переопределить значения полей набора, которые будут использоваться для расшифровки. Например, для поля «Номенклатуры» можно указать выражение «Контрагент» и при открытии значения будет открываться карточка контрагента:

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

Произвольная обработка расшифровки 1С СКД

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

Для реализации произвольной расшифровки служит событие «ОбработкаРасшифровки» у табличного документа и обработчик «ОбработкаДополнительнойРасшифровки». Первой событие вызывается по ЛКМ, второй при клике ПКМ.

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

Нас будут интересовать параметры: «Расшифровка» — в этом параметре указывается идентификатор расшифровки, в параметре «СтандартнаяОбработка» указываем «Истина», если нужно выполнить стандартный алгоритм расшифровки, «Ложь» если мы реализуем произвольную расшифровку.

Теперь немного подробнее про параметр «Расшифровка». Вспомним про реквизит формы «ДанныеРасшифровки» . В этом реквизите (напомню, что мы рассматриваем управляемый режим) хранится адрес временного хранилища, в котором хранится объект типа «ДанныеРасшифровкиКомпоновкиДанных». У этого объекта есть свойство «Элементы», в котором в виде списка (коллекции) хранятся все параметры расшифровки. И наш параметр «Расшифровка» является индексом в этой коллекции. То есть получить собственно сам параметр расшифровки мы можем получить следующим образом:

Здесь используется функция общего модуля «ПолучитьМассивПолейРасшифровки», которая кроме текущего значения параметра расшифровки получается значения родительский полей и значения установленных отборов:

В итоге мы получаем массив элементов с типом «ЭлементОтбораКомпоновкиДанных» или «ЗначениеПоляРасшифровкиКомпоновкиДанных», эти значения мы уже можем передать в другой отчет или в обработку.

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

В этом нам может помочь объекта с типом «ОбработкаРасшифровкиКомпоновкиДанных». В обработчике «ОбработкаРасшифровки» мы можем написать такой код:

Здесь с помощью реквизита «ДанныеРасшифровки» и источника доступных настроек, полученного из компоновщика настроек нашего отчета мы получаем объект указанного типа. Далее мы вызываем метод объекта «ПоказатьВыборДействия», в который передаем нужные нам типовые действия и список наших действие в виде дополнительных пунктов.

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

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

Можно эти настройки получать также с помощью таких методов объекта «ОбработкаРасшифровкиКомпоновкиДанных» как: Упорядочить, Расшифровать, Сгруппировать, Отфильтровать.

Источник

Читайте также:  Чистим уши перекисью водорода собаке
Оцените статью