1c универсальные отчеты расшифровка

Обновлено: 04.07.2024

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

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

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

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

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

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

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

Пример:

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

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

Пример:

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

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

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

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

1С отчет добавить расшифровку

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

1С отчет добавить расшифровку

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

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

//Полученное значение
РасшифрЗначение = ПолучитьРасшифровкуНаСервере (
Расшифровка , МРасшифровываемых ) ;

Если РасшифрЗначение = Неопределено Тогда Возврат ; КонецЕсли ;
СтандартнаяОбработка = Ложь ;

// Прописываем доступные действия. Если какое-то действие не указать,
//оно не будет доступно пользователю

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

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

ДопПункты = Новый СписокЗначений ;
ОбщСтрока = «Открыть отчет Расчеты с поставщиками «
+ «» «» + Строка ( ТипЗнч ( РасшифрЗначение ) )
+ » = « + РасшифрЗначение + «» «» ;

ДопПункты . Добавить ( 1 , ОбщСтрока + » за 1 мес.» ) ;
ДопПункты . Добавить ( 3 , ОбщСтрока + » за 3 мес.» ) ;
ДопПункты . Добавить ( 6 , ОбщСтрока + » за 6 мес» ) ;
ДопПункты . Добавить ( 12 , ОбщСтрока + » за 12 мес.» ) ;

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

ЕслиВыпДействие
= ДействиеОбработкиРасшифровкиКомпоновкиДанных . Нет Тогда
ИначеЕсли ВыпДействие
= ДействиеОбработкиРасшифровкиКомпоновкиДанных . ОткрытьЗначение Тогда
ОткрытьЗначение ( ПараметрВыполненногоДействия ) ;
ИначеЕсли ТипЗнч ( ВыпДействие ) = Тип ( «Число» ) Тогда

Форм2 = ПолучитьФорму (
«Отчет.РасчетыСПоставщиками.Форма» ,
,
,
РасшифрЗначение ) ; //Форма Расшифровки.

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

//Здесь устанавливаем настройки открываемого отчета
УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу (
КомпоновщНастр ,
КомпоновщНастр2 ,
«Контрагент» ) ;

УстановитьЗначениеОтбораКомпоновщикаНастроек ( КомпоновщНастр2 ,
Строка ( ТипЗнч ( РасшифрЗначение ) ) ,
РасшифрЗначение ,
ВидСравненияКомпоновкиДанных . Равно ) ;

ДатаКонца = ПолучитьЗначениеПераметраКомпоновщикаНастроек (
ЭтаФорма . Отчет . КомпоновщикНастроек ,
«ДатаКонца» ) ;

ПериодОтчета = Новый СтандартныйПериод (
ДобавитьМесяц ( ДатаКонца , — ВыпДействие ) ,
ДатаКонца ) ;

УстановитьЗначениеПераметраКомпоновщикаНастроек (
КомпоновщНастр2 ,
«Период» ,
ПериодОтчета ) ;

//Здесь открываем новый отчет
СтрВозврата = ОбработатьРасшифровкуНаСервере (
Форм2 . Отчет , «ОтчетОбъект.РасчетыСПоставщиками» ,
Форм2 . ОтчетТабличныйДокумент ,
Форм2 . НавигационнаяСсылка ,
Форм2 . УникальныйИдентификатор ) ;

Форм2 . ОтчетТабличныйДокумент = СтрВозврата . Результат ;
Форм2 . НавигационнаяСсылка = СтрВозврата . ДанныеРасшифровки ;
Форм2 . Открыть ( ) ;

&НаСервере
Функция ПолучитьРасшифровкуНаСервере (
Расшифровка ,
МассивИменРасшифровки ,
ЭтоГруппа = Ложь )

Данные = ПолучитьИзВременногоХранилища ( ДанныеРасшифровки ) ;
Поля = Данные . Элементы . Получить ( Расшифровка ) . ПолучитьПоля ( ) ;
Для Каждого ИмяРасшифровки Из МассивИменРасшифровки Цикл
ПолеНоменкл = Поля . Найти ( ИмяРасшифровки ) ;
Если Не ПолеНоменкл = Неопределено Тогда Прервать ; КонецЕсли ;
КонецЦикла ;
Возврат ПолеНоменкл . Значение ;
КонецФункции

&НаКлиенте
Процедура УстановитьЗначениеОтбораКомпоновщикаНастроек (
КомпоновщНастр2 ,
ИмяОтбора ,
Значение ,
ВидСравнения ,
Использование = Истина )

ПолеЭлементаОтбора =
КомпоновщНастр2 . Настройки . Отбор . ДоступныеПоляОтбора . Элементы . Найти ( ИмяОтбора ) . Поле ;

ИДЭлмОтбора = «» ;
Для Каждого Элемент Из КомпоновщНастр2 . Настройки . Отбор . Элементы Цикл
Если Элемент . ЛевоеЗначение = ПолеЭлементаОтбора Тогда
ИДЭлмОтбора = Элемент . ИдентификаторПользовательскойНастройки ;
Прервать ;
КонецЕсли ;
КонецЦикла ;

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

Если ИДЭлмОтбора = «» Тогда //Нет среди стандартных настроек
Для Каждого Элемент Из Коллекция2 Цикл //Ищем….
Если ТипЗнч ( Элемент ) = Тип ( «ОтборКомпоновкиДанных» ) Тогда
ПолеОтбора = Новый ПолеКомпоновкиДанных ( ИмяОтбора ) ;
ОтборНайден = Ложь ;
Для Каждого ЭлемОтбора Из Элемент . Элементы Цикл
Если ЭлемОтбора . ЛевоеЗначение = ПолеОтбора Тогда
ОтборНайден = Истина ; Прервать ; КонецЕсли ;
КонецЦикла ;
Если Не ОтборНайден Тогда
ЭлемОтбора = Элемент . Элементы . Добавить ( Тип ( «ЭлемОтбораКомпоновкиДанных» ) ) ;
Элемент . Элементы [ 0 ] . ЛевоеЗначение = ПолеОтбора ;
ЭлемОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( ИмяОтбора ) ;
КонецЕсли ;
Прервать ;
КонецЕсли ;
КонецЦикла ;
Иначе
ЭлемОтбора = Коллекция2 . Найти ( ИДЭлмОтбора ) ;
КонецЕсли ;

ЭлемОтбора . ПравоеЗначение = Значение ;
ЭлемОтбора . Использование = Использование ;
ЭлемОтбора . ВидСравнения = ВидСравнения ;

&НаКлиенте
Процедура УстановитьЗначениеОтбораКомпоновщикаНастроекПоОбразцу ( КомпоновщНастр , КомпоновщНастр2 , ИмяОтбора )
Отбор = КомпоновщНастр . Настройки . Отбор ;
Для Каждого Элемент Из Отбор . Элементы Цикл
ЭлемОтбора = Элемент ;
Прервать ;
КонецЦикла ;
УстановитьЗначениеОтбораКомпоновщикаНастроек ( КомпоновщНастр2 , ИмяОтбора , ЭлемОтбора . ПравоеЗначение , ЭлемОтбора . ВидСравнения , ЭлемОтбора . Использование ) ;
КонецПроцедуры

&НаСервере
Функция ОбработатьРасшифровкуНаСервере ( Знач ОтчетZ , СтрТипаОтчета , Знач РезультатZ , Знач ДанныеРасшифровкиZ , Знач ИДФормы )
ОтчетОбъект = ДанныеФормыВЗначение ( ОтчетZ , Тип ( СтрТипаОтчета ) ) ;
РезультатZ . Очистить ( ) ;
ОтчетОбъект . СкомпоноватьРезультат ( РезультатZ , ДанныеРасшифровкиZ ) ; //Формируем
АдресДанныхРасшифровки = ПоместитьВоВременноеХранилище ( ДанныеРасшифровкиZ , ИДФормы ) ;
Возврат Новый Структура ( «Результат,ДанныеРасшифровки» , РезультатZ , АдресДанныхРасшифровки ) ;
КонецФункции

Результат проделанной работы:

1С отчет добавить расшифровку

Это наш простенький отчет с уже открытой расшифровкой.

После выбора нужной позиции откроется отчет «Ведомость расчетов с поставщиками»:

1С отчет добавить расшифровку

У меня данных в этом отчете нет, но видно, что параметры формирования передались правильно.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

Вопрос: Подскажите пожалуйста, каким образом можно сделать следующее.

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

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

1С отчет добавить расшифровку

Ответ: Расшифровки бывают стандартные и нестандартные.

I) Стандартные:

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

Чтобы Расшифровка сработала, должны выполняться 3 условия:

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

2)В процессе вывода областей макета в результирующий табличный документ нужно ОБЯЗАТЕЛЬНО ПРИСВОИТЬ параметру расшифровки значение нужного типа, например:

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

ТабДок.ТолькоПросмотр = Истина;

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

II) Нестандартные:

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

1)Вывод табличного документа должен осуществляться в объект ПолеТабличногоДокумента;

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

3)Параметру расшифровки РасшифровкаКонтрагента присваивается заполненный при формировании табличного документа нужными значениями СписокЗначений или чаще Структура. В частности, может передаваться имя стандартного отчета конфигурации и параметров, которые нужно задать в форме отчета, например, период дат, номер счета и т.д. А потом этот отчет вызывается как процедура.

4)Для объекта ПолеТабличногоДокумента свойство ТолькоПросмотр нужно установить в значение Истина.

5)Код пользовательской процедуры помещается в процедуру

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

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

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

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

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

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

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

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

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

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

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

Пример:

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

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

Пример:

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

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

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

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

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

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

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

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


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

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

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


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

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

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


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

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


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


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


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


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


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


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

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



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

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

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


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


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

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

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

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

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

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

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

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


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

В этой статье мы по шагам рассмотрим два простейших примера реализации расшифровки в отчете на платформе 8.1.

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

Допустим, у нас есть справочник:

Вид расчета Сумма
Начисление 1 3
Начисление 2 4
Начисление 3 6
Начисление 1 9

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

Вид расчета Сумма
Начисление 1 12
Начисление 2 4
Начисление 3 6

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

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

Вид расчета Сумма
Итого 12
Начисление 1 3
Начисление 1 9

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

Вы можете скачать и развернуть у себя базу с примерами реализации этого отчета вот по этой ссылке:

(ссылка не работает из соображений безопасности, если база нужна, напишите комментарий к этой статье, вышлем базу)

Реализация расшифровки в отчете, созданном без использования СКД


Рис 1. Создание формы отчета.


И еще нам потребуется макет для вывода отчета и его расшифровки (в нашем случае он получился универсальный, но обычно макет отчета и макет расшифровки различаются, и требуется создавать макеты отдельно):

Рис.2. Создание макета отчета и макета расшифровки отчета.

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

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


Реализация отчета с использованием Системы Компоновки Данных (СКД)

Итак, последовательность разработки отчета следующая.



Для нашего примера проверка имени этого поля выполняется вот в таком операторе сравнения:

Расширение формы отчета (Report form extension)

ВосстанавливатьЗначенияПриОткрытии (RestoreValuesOnOpen)
ДанныеРасшифровки (DetailsData)
РезультатОтчета (ReportResult)

ПередСохранениемЗначений (BeforeSaveValues)
ПослеВосстановленияЗначений (AfterRestoreValues)

Чтение и запись.

Тип: ДанныеРасшифровкиКомпоновкиДанных. Содержит данные расшифровки последнего выполненного отчета.
Недоступно на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.

**********************************************************

Посмотрим, что это за тип такой, ДанныеРасшифровкиКомпоновкиДанных:

Объект, содержащий информацию о расшифровке.
XML-сериализация. Поддержка отображения в XDTO; пространство имен: . Имя типа XDTO: DetailsInformation.

ОтчетОбъект, свойство
Расширение формы отчета, свойство ДанныеРасшифровки
ПроцессорКомпоновкиДанных, метод Инициализировать
КомпоновщикМакетаКомпоновкиДанных, метод Выполнить
ОбработкаРасшифровкиКомпоновкиДанных, конструктор На основании данных расшифровки и источника доступных настроек

**********************************************************

Добавить (Add)
Индекс (IndexOf)
Количество (Count)
Получить (Get)

Коллекция элементов расшифровки.

Получить( ) (*см примечание)

Представляет собой специальный объект для идентификации объекта расшифровки.
Поддержка отображения в XDTO; пространство имен: . Имя типа XDTO: DetailsID.

ЭлементРасшифровкиКомпоновкиДанныхПоля, свойство Идентификатор
ЭлементРасшифровкиКомпоновкиДанныхГруппировка, свойство Идентификатор
ОбработкаРасшифровкиКомпоновкиДанных, метод Выполнить
ОбработкаРасшифровкиКомпоновкиДанных, метод ОткрытьЗначение
ОбработкаРасшифровкиКомпоновкиДанных, метод Отфильтровать
ОбработкаРасшифровкиКомпоновкиДанных, метод Упорядочить
ОбработкаРасшифровкиКомпоновкиДанных, метод Сгруппировать
ОбработкаРасшифровкиКомпоновкиДанных, метод Расшифровать
ОбработкаРасшифровкиКомпоновкиДанных, метод ПрименитьНастройки

**********************************************************
ЭлементРасшифровкиКомпоновкиДанныхПоля (DataCompositionFieldDetailsItem)
Идентификатор (ID)
Использование:
Только чтение.
Описание:
Тип: ИдентификаторРасшифровкиКомпоновкиДанных. Идентификатор элемента.

**********************************************************

Вставить (Insert)
Добавить (Add)
Индекс (IndexOf)
Количество (Count)
Найти (Find)
Очистить (Clear)
Получить (Get)
Сдвинуть (Move)
Удалить (Delete)

Коллекция значений полей.

Тип: Строка. Имя искомого элемента.

Тип: ЗначениеПоляРасшифровкиКомпоновкиДанных; Неопределено. Если элемент не найден, будет возвращено значение Неопределено.

Значение (Value)
Иерархия (Hierarchy)
Поле (Field)

Содержит значения полей элемента расшифровки.
Поддержка отображения в XDTO; пространство имен: . Имя типа XDTO: FieldValue.

Общее описание универсального отчета в 1С 8.3

интерфейс универсального отчета

Вкратце пройдемся по его элементам управления.

С верхней строчкой закончили.

Инструкция по настройке универсального отчета 1С 8.3

Получите понятные самоучители по 1С бесплатно:

настройка универсального отчета 1С 8.3

Чтобы получить наименования материалов, выберем группировку по 1-му субконто. Именно в нем хранится наименование, точнее, ссылка на номенклатуру.

отборы в отчете

Здесь нам нужно указать, что мы хотим видеть только счет 10.01.

При желании Вы можете указать здесь сколько угодно условий отбора.

Нажмем кнопку сформировать и посмотрим, что у нас получилось:

готовый отчет

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

показатели отчета

Убираем флажки с тех колонок, которые нам выводить не надо.

сортировка по субконто

универсальный отчет 1с с новыми настройками

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

Читайте также: