1с параметр расшифровки в макете 1с
Работа с расшифровкой в табличном документе
Табличный документ предоставляет пользователю возможность работы с расшифровкой - детализацией информации, располагающейся в ячейке документа. В данной статье описываются некоторые особенности механизма расшифровок табличного документа.
Для чего используется расшифровка и как ей пользоваться
Основное назначение расшифровки - получение дополнительной информации об объекте, отображенном в табличном документе. Например, пользователь выбрал ячейку отчета, содержащую название контрагента. По двойному щелчку левой кнопки мыши может быть открыт диалог, содержащий дополнительную информацию о данном контрагенте. Например, может быть запущен новый отчет по всем документам данного контрагента, или открыто контекстное меню, в котором пользователю выдаются возможные варианты расшифровки и т.д.
Для того чтобы воспользоваться расшифровкой, пользователю необходимо навести курсор мыши на нужную ячейку. Если для данной ячейки существует расшифровка, то при этом должен измениться вид курсора. Расшифровка может быть вызвана при помощи двойного щелчка левой кнопкой мыши, либо при помощи клавиши Enter. Дальнейшее действие по обработке расшифровки будет зависеть от того, какая расшифровка была предусмотрена в программе.
Получение расшифровки возможно только в том случае, если табличный документ находится в режиме "Только просмотр" или в режиме защиты. В остальных случаях при двойном щелчке мыши табличный документ будет переходить в режим редактирования содержимого ячейки.
Заполнение расшифровки
Расшифровка представляет собой значение, которое присвоено свойству "Расшифровка" области ячеек табличного документа или рисунку табличного документа. Заполнить данное свойство можно одним из следующих способов:
1. Непосредственно присвоив данному свойству значение.
Этот способ может быть удобным в том случае, если табличный документ заполняется при помощи встроенного языка без использования макета и построителя отчета.
Пример:
В данном примере расшифровка устанавливается первой ячейке первой строки поля табличного документа.
2. Использовать параметр расшифровки и метод "Вывести".
Часто табличный документ заполняется при помощи макета и метода табличного документа "Вывести". В таком случае в ячейке макета можно указать свойство "Параметр расшифровки". При вызове метода "Вывести", этот параметр будет использован для заполнения значения свойства расшифровки.
Пример:
Отчет выводится при помощи макета. В некоторой ячейке области "Запись" табличного документа содержится параметр расшифровки "Номенклатура". Результатом выполнения следующего кода будет помещение в данную ячейку значения переменной Номенклатура.
Отметим, что с параметром расшифровки работа ведется также как и с обычными параметрами, размещенными в ячейках макета.
В случае если необходимо поместить в значение расшифровки несколько значений, следует поместить нужные значения в коллекцию, после чего поместить коллекцию в расшифровку.
Пример того, как это можно сделать, воспользовавшись объектом Структура:
Аналогично выполняется заполнение расшифровки рисунка табличного документа.
Обратите внимание на свойство "ИспользованиеРасшифровки" ячейки табличного документа. Это свойство указывает, для какой области будет возможно вызвать расшифровку. Если данное свойство имеет значение "Ячейка", обработка расшифровки будет выполняться только для этой ячейки. Если "Строка", то расшифровка будет обрабатываться для всей строки, в которой расположена данная ячейка. Если же данное свойство имеет значение "Без обработки", то расшифровка для данной ячейке не будет обрабатываться вовсе, даже если ячейка будет содержать значение расшифровки.
Обработка расшифровки
После того, как расшифровка заполнена, следует позаботиться об ее обработке.
Если табличный документ открыт в отдельном окне, никаких действий по обработке расшифровки выполнить нельзя. В этом случае расшифровка будет работать в соответствии со своим поведением по умолчанию – то есть, будет открыто значение расшифровки. Для ссылочных типов будет открыта основная форма объекта, для других типов будет отображена строка, представляющая значение расшифровки.
Если табличный документ отображается в поле табличного документа, возможно переопределение поведения расшифровки. Для этого нужно создать обработчик события ОбработкаРасшифровки поля табличного документа. Это событие будет вызываться при каждой попытке пользователя вызвать расшифровку. В обработчик события будет передано поле табличного документа, для которого вызвана расшифровка, значение расшифровки и флаг стандартной обработки расшифровки. Если стандартная обработка расшифровки не нужна, следует присвоить флагу СтандартнаяОбработка значение "Ложь".
Пример:
В тексте обработчика события можно выполнить любые действия по обработке расшифровки. Например, запустить на исполнение некоторый отчет, передав ему в качестве параметра значение расшифровки.
Подробно рассматривать все настройки схемы компоновки мы не будем, остановимся только на том, ради чего была сделана статья.
Имеется некий отчет, у него схема компоновки данных, наборы данных, ресурсы, Параметры, Настройки.
Основные настройки отчета:
1. Рассмотрим вкладку «Макеты» основной схемы компоновки данных.
В макете описано каждое поле, для того что бы можно было сделать расшифровку по ним.
Если поле не ссылочного типа:
- В параметре расшифровки указываем наименование параметра
- В параметрах макета в поле Выражение делаем выбор
- В Параметр расшифровки в поле Выражение указываем ссылку на документ, по которому будет производиться расшифровка.
Если поле ссылочного типа:
Все тоже самое, только в Параметр расшифровки добавляем 2 параметра:
- Один из низ это ссылка на элемент указанный в поле
- Второй это ссылка на документ, по которому будет производиться расшифровка
На этом со схемой компоновки данных закончили.
3. Формы в отчете я использовал БСПшные, только для расшифровки создал свою форму "ФормаРасшифровки" с типом «Форма Отчета»
4. Открываем основную форму отчета БСП, для элемента формы «ОтчетТабличныйДокумент» ищем событие «ОбработкаРасшифровки» и переходим в нее.
В открывшейся процедуре вызываем процедуру обработки в переопределяемом модуле.
5. Проверяем имя отчета, при необходимости подсистему на существование, определяем модуль дальнейшей обработки и вызываем из него следующую процедуру.
6. Полный код вызываемой процедуры:
Разберем подробно код процедуры
Прежде всего отменяем стандартную обработку:
Создаем обработку расшифровки:
Создаем ОписаниеОповещения с параметрами, для алгоритма после выбора действия пользователем:
Добавляем два действия, одно платформенное, другое создаем свое собственное "КодыМаркировки":
Вызываем меню выбора действий:
7. В обработке оповещения обрабатываем каждый пункт меню действий
- В первом случае просто открываем объект по ссылке
- Во втором вызываем процедуру, которая нам вернет выбранное поле.
И если Выбранное поле заполнено, тогда вызываем процедуру открывающую новую форму отчета.
Т.к. функция получения выбранного поля находится в общем модуле с галочкой Вызов Сервера, то делаем там только инициализацию серверной функции
А уже в серверном общем модуле, описываем алгоритм получения выбранного поля Документ поступления.
8. Процедура инициализирует открытие формы отчета с передачей параметров.
9. В модуле открывшейся формы процедура ПриСозданииНаСервере:
Разберем ключевые строки процедуры:
- Проверяем параметры формы, и вызываем формирование динамического запроса по полученному параметру ссылки на документ.
- Процедура формирования динамического запроса:
- Получаем макет скд и в первом наборе данных переопределяем запрос, на тот, что мы сформировали динамически выше.
Посмотрим на вкладку "Наборы данных" полученного макета расшифровки и видим что запрос в нем это лишь шаблон, т.к. мы заранее не знаем какой тип
документа будет расшифровываться. На вкладке "Настройки" вывод детальных записей, больше настроек у этой схемы нет.
- Применяем настройки и добавляем полученный в параметрах отбор
- После располагается типовой код по программному формированию отчета,
куда мы передаем полученную схему, и сформированные настройки отчета.
Статья, по формированию расшифровки, без использования БСП
Специальные предложения
(1)Спасибо Вам за отзыв.
1. "Получение данных из документов, не зачет на экзамене, нужно было сделать регистр сведений, событием" - тут Вы правы, но это уже тема архитектуры, в рамках которой я был ограничен.
2. "СформироватьДинамическиЗапрос" - чем это плохо, поясните, ведь я заведомо не знаю тип документа по которому мне нужно получить расшифровку, поэтому формирую динамический запрос. Это кстати стандартная практика типовых решений в настоящее время.
3. "Новый запрос, нужно сделать либо как отчет № 2 либо как второй набор данных передав параметр "КлючТекущегоВарианта"" - это уже тонкости, вариации решения. Я против отчета №2, а вот второй набор можно сделать, но не вижу ничего плохого во второй схеме компоновки.
4. "Параметры отчета нужно было передать через параметр "ПользовательскиеНастройки,Отбор", а не кодом "ПриСозданииНаСервере"" - то что использовать нужно пользовательские настройки это да. Но что значит передать, я не понял.
Резюмирую: да, скорее всего представленный алгоритм можно улучшить, оптимизировать, я могу чего то не знать еще, все приходит с опытом.
Цель статьи была показать как в дорабатываемой конфигурации на БСП сделать отчет с расшифровкой, минимизируя изменения объектов на поддержке.
2. "СформироватьДинамическиЗапрос" - это к получению данных из документов, в логике формирования запроса динамически нет никаких нарушений.
4.Делал открытие отчета СКД с заполнением параметров и отборами так :
(УстановитьПользовательскиеНастройкиОтчета - сделана не рекурсивно, т.к. группы условий это не стандартные наборы параметров и их даже если есть устанавливать не нужно, так было принято)
Переопределение расшифровки для поля
В некоторых ситуациях необходимо, чтобы при расшифровке, выполняемой пользователем над одним полем, расшифровка выполнялась над другим полем. В данной статье описывается, каким образом можно добиться такого эффекта, используя макет поля.
Предположим, в отчет требуется вывести дату, номер, контрагента документа. При этом при расшифровке по полю Номер , требуется, чтобы открывалось значение документа.
Данные для такого отчета будем получать при помощи следующего запроса:
ВЫБРАТЬ
РасходнаяНакладная.Дата,
РасходнаяНакладная.Номер,
РасходнаяНакладная.Контрагент,
РасходнаяНакладная.Ссылка Как Документ
ИЗ
Документ.РасходнаяНакладная КАК РасходнаяНакладная
Для того чтобы переопределить расшифровку для поля Номер , добавим для этого поля макет. В конструкторе схемы компоновки данных это делается на закладке " Макеты ".
В появившемся диалоге выбора поля выберем поле " Номер ".
После чего, в добавленной строке, в поле ввода колонки " Область " нажать кнопку выбора. При этом табличный документ с макетом перейдет в режим выбора области. Выберем ячейку, в которой будем располагать макет поля и нажмем клавишу Enter .
Ячейка " Область " при этом заполнится адресом выбранной области.
В свойствах ячейки области (свойства вызываются при помощи сочетания клавиш Ctrl+Enter ) укажем, что мы хотим выводить в этой ячейке параметр, укажем имя параметра Номер и укажем имя параметра расшифровки Расшифровка .
В выражении параметра Расшифровки введем выражение для поля Документ .
На этом настройку макета поля закончим.
Теперь, при выполнении расшифровки над полем Номер , пользователю будет предложено открыть документ.
Вопрос: Подскажите пожалуйста, каким образом можно сделать следующее.
У меня есть выводимый в табличный документ результат запроса, к ячейке есть расшифровка.
Я хочу чтобы при двойном клике на ячейку выполнялась процедура которая к примеру запускает отчет по расшифровке ячейки.
Ответ: Расшифровки бывают стандартные и нестандартные.
I) Стандартные:
может использоваться как непосредственно в табличном документе, так и в объекте ПолеТабличногоДокумента (т.е.табличный документ, размещенный не в отдельном окне, а непосредственно на форме).
Чтобы Расшифровка сработала, должны выполняться 3 условия:
1) Для ячейки табличного документа, из которой мы хотим вызвать Расшифровку, должно быть установлено свойство ПараметрРасшифровки. Например, мы хотим, чтобы по двойному щелчку на ячейке с названием контрагента открывалась форма элемента справочника Контрагента, чтобы можно было уточнить какие-то данные, которые в отчет не выводятся. Задаем свойству ПараметрРасшифровки какое-нибудь значение, например, РасшифровкаКонтрагента.
2)В процессе вывода областей макета в результирующий табличный документ нужно ОБЯЗАТЕЛЬНО ПРИСВОИТЬ параметру расшифровки значение нужного типа, например:
3)Должен быть обеспечен запрет редактирования ячейки с расшифровкой, т.е. нужно указать
ТабДок.ТолькоПросмотр = Истина;
иначе, несмотря на многообещающий вид курсура при наведении на ячейку можно щелкать по ней сколько угодно, но ничего происходить не будет.
II) Нестандартные:
по двойному щелчку на ячейке с расшифровкой можно вызвать свою процедуру. Для реализации этого следует выполнить несколько условий:
1)Вывод табличного документа должен осуществляться в объект ПолеТабличногоДокумента;
2)Должно быть присвоено значение свойству ячейки ПараметрРасшифровки, например, РасшифровкаКонтрагента.
3)Параметру расшифровки РасшифровкаКонтрагента присваивается заполненный при формировании табличного документа нужными значениями СписокЗначений или чаще Структура. В частности, может передаваться имя стандартного отчета конфигурации и параметров, которые нужно задать в форме отчета, например, период дат, номер счета и т.д. А потом этот отчет вызывается как процедура.
4)Для объекта ПолеТабличногоДокумента свойство ТолькоПросмотр нужно установить в значение Истина.
5)Код пользовательской процедуры помещается в процедуру
Приведу небольшой пример, открывающий для "щелкнутого" контрагента подчиненный справочник.
Читайте также: