Расшифровка в 1С СКД
При разработке отчетов в 1С достаточно часто требуется такая функция как Расшифровка 1С СКД. Обычно под СКД расшифровкой понимается формирование такого же отчета с установленными отборами с дополнительной (более подробной) группировкой.
В том числе такая возможность имеется и в отчетах, созданных с помощью 1С СКД. При этом функционал расшифровки является встроенным и позволяет выполнять пользователю различные действия, без приложения дополнительных усилий со стороны программиста. То есть при создании отчета на СКД программисту достаточно настроить только схему компоновки – без дополнительного кода в модуле отчета и без добавления форм отчета.
- 1 Стандартные возможности расшифровки 1С СКД
- 1.1 Данные расшифровки 1С СКД
Стандартные возможности расшифровки 1С СКД
В пользовательском режиме расшифровку отчета можно вызвать двумя способами:
- Левой клавишей мыши (ЛКМ) или с клавиатуры клавишей Enter на области отчета. При этом для значений ссылочного типа выполняется действие по умолчанию – открытие значения, для полей ресурсов – расшифровка по выбранному полю, для значений группировкой не ссылочного типа – открывается меню выбора действия расшифровки
- Правой клавишей мыли (ПКМ) . При этом открывается меню выбора действия расшифровки
Какие действия доступны при выполнении расшифровки:
- Расшифровать – новый отчет с установленными отборами по измерениям и группировкой по выбранному полю
- Открыть – открыть форму значения ссылочного типа
- Отфильтровать – новый отчет с дополнительно установленным отбором
- Упорядочить – новый отчет с дополнительно установленной сортировкой
- Сгруппировать – новый отчет с дополнительной группировкой
- Оформить – новый отчет с дополнительно настроенным условным оформлением
Что еще можно сделать с расшифровкой без программирования? В расшифровку попадают значения полей из наборов данных. Иногда возникает необходимость в отчет вывести одно значение, но в качестве расшифровки должно выступать другое поле. Например, регистратор можно выводить как номер, но необходимо, чтобы при клике по нему открывался документ. Это можно сделать без дополнительного программирования – через установку выражения представления
При такой настройке в расшифровке везде будет использоваться ссылка на документ, но в отчете будет выводиться только его номер.
Дальше мы будем рассматривать все более сложные ситуации при разработке отчета на СКД. Например, вам может понадобиться добавить свою форму в отчет – добавить какие-то дополнительные команды, настроить более сложный интерфейс для пользователя.
Данные расшифровки 1С СКД
При добавлении новой формы отчета система производит сама настройку формы для использования совместно с СКД. В том числе добавляется реквизит «ДанныеРасшифровки» с типом «Строка». И в свойствах формы производится связь атрибута «Данные расшифровки» с созданным реквизитом.

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

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

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

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

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

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

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

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


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

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

Нас будут интересовать параметры: «Расшифровка» — в этом параметре указывается идентификатор расшифровки, в параметре «СтандартнаяОбработка» указываем «Истина», если нужно выполнить стандартный алгоритм расшифровки, «Ложь» если мы реализуем произвольную расшифровку.
Теперь немного подробнее про параметр «Расшифровка». Вспомним про реквизит формы «ДанныеРасшифровки» . В этом реквизите (напомню, что мы рассматриваем управляемый режим) хранится адрес временного хранилища, в котором хранится объект типа «ДанныеРасшифровкиКомпоновкиДанных». У этого объекта есть свойство «Элементы», в котором в виде списка (коллекции) хранятся все параметры расшифровки. И наш параметр «Расшифровка» является индексом в этой коллекции. То есть получить собственно сам параметр расшифровки мы можем получить следующим образом:
&НаСервере Функция ПолучитьНастройкиРасшифровки(ИдентификаторРасшифровки) // В тонком клиенте ДанныеРасшифровки это адрес временного хранилища ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); МассивПолей = СКД.ПолучитьМассивПолейРасшифровки(ИдентификаторРасшифровки, ДанныеРасшифровкиОбъект, Ложь); Возврат МассивПолей; КонецФункции// УстановитьНастройки()
Здесь используется функция общего модуля «ПолучитьМассивПолейРасшифровки», которая кроме текущего значения параметра расшифровки получается значения родительский полей и значения установленных отборов:
#Область Расшифровка // Возвращает доступное поле по полю компоновки Функция ПолучитьДоступноеПолеПоПолюКомпоновкиДанных(ПолеКомпоновкиДанных, ОбластьПоиска) Экспорт Если ТипЗнч(ПолеКомпоновкиДанных) = Тип("Строка") Тогда ПолеПоиска = Новый ПолеКомпоновкиДанных(ПолеКомпоновкиДанных); Иначе ПолеПоиска = ПолеКомпоновкиДанных; КонецЕсли; Если ТипЗнч(ОбластьПоиска) = Тип("КомпоновщикНастроекКомпоновкиДанных") ИЛИ ТипЗнч(ОбластьПоиска) = Тип("ДанныеРасшифровкиКомпоновкиДанных") ИЛИ ТипЗнч(ОбластьПоиска) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда Возврат ОбластьПоиска.Настройки.ДоступныеПоляВыбора.НайтиПоле(ПолеПоиска); Иначе Возврат ОбластьПоиска.НайтиПоле(ПолеПоиска); КонецЕсли; КонецФункции Функция ДобавитьРодителей(ЭлементРасшифровки, ТекущийОтчет, МассивПолейРасшифровки, ВключатьРесурсы = Ложь) Экспорт Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл ДоступноеПоле = ПолучитьДоступноеПолеПоПолюКомпоновкиДанных(Новый ПолеКомпоновкиДанных(Поле.Поле), ТекущийОтчет); Если ДоступноеПоле = Неопределено Тогда Продолжить; КонецЕсли; Если Не ВключатьРесурсы И ДоступноеПоле.Ресурс Тогда Продолжить; КонецЕсли; МассивПолейРасшифровки.Добавить(Поле); КонецЦикла; КонецЕсли; Для каждого Родитель Из ЭлементРасшифровки.ПолучитьРодителей() Цикл ДобавитьРодителей(Родитель, ТекущийОтчет, МассивПолейРасшифровки, ВключатьРесурсы); КонецЦикла; КонецФункции // Возвращает массив, по которому следует расшифровать отчет Функция ПолучитьМассивПолейРасшифровки(Расшифровка, ДанныеРасшифровки, ВключатьРесурсы = Ложь) Экспорт МассивПолейРасшифровки = Новый Массив; Если ТипЗнч(Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") И ТипЗнч(Расшифровка) <> Тип("ДанныеРасшифровкиКомпоновкиДанных") Тогда Возврат МассивПолейРасшифровки; КонецЕсли; // Добавим поля родительских группировок ДобавитьРодителей(ДанныеРасшифровки.Элементы[Расшифровка], ДанныеРасшифровки, МассивПолейРасшифровки, ВключатьРесурсы); Количество = МассивПолейРасшифровки.Количество(); Для Индекс = 1 По Количество Цикл ОбратныйИндекс = Количество - Индекс; Для ИндексВнутри = 0 По ОбратныйИндекс - 1 Цикл Если МассивПолейРасшифровки[ОбратныйИндекс].Поле = МассивПолейРасшифровки[ИндексВнутри].Поле Тогда МассивПолейРасшифровки.Удалить(ОбратныйИндекс); Прервать; КонецЕсли; КонецЦикла; КонецЦикла; // Добавим отбор, установленный в отчете Для каждого ЭлементОтбора Из ДанныеРасшифровки.Настройки.Отбор.Элементы Цикл Если Не ЭлементОтбора.Использование Тогда Продолжить; КонецЕсли; МассивПолейРасшифровки.Добавить(ЭлементОтбора); КонецЦикла; Возврат МассивПолейРасшифровки; КонецФункции #КонецОбластиВ итоге мы получаем массив элементов с типом «ЭлементОтбораКомпоновкиДанных» или «ЗначениеПоляРасшифровкиКомпоновкиДанных», эти значения мы уже можем передать в другой отчет или в обработку.
Когда мы реализуем собственную расшифровку, часто возникает потребность оставить типовые действия расшифровки , к которым нужно лишь добавить свои действия.
В этом нам может помочь объекта с типом «ОбработкаРасшифровкиКомпоновкиДанных». В обработчике «ОбработкаРасшифровки» мы можем написать такой код:
&НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Отчет.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек()); ДоступныеДействия = Новый Массив; ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение); ДополнительныеПункты = Новый СписокЗначений; ДополнительныеПункты.Добавить("Наше действие"); ОбработкаРасшифровки.ПоказатьВыборДействия(Новый ОписаниеОповещения("ОбработкаВыбораРасшифровки", ЭтаФорма, Расшифровка) , Расшифровка , ДоступныеДействия , ДополнительныеПункты , , Элемент); КонецПроцедурыЗдесь с помощью реквизита «ДанныеРасшифровки» и источника доступных настроек, полученного из компоновщика настроек нашего отчета мы получаем объект указанного типа. Далее мы вызываем метод объекта «ПоказатьВыборДействия», в который передаем нужные нам типовые действия и список наших действие в виде дополнительных пунктов.
В обработке выбранного действия мы производится собственно действия по расшифровке:
&НаКлиенте Процедура ОбработкаВыбораРасшифровки(ВыполненноеДействие, ПараметрДействия, ИдентификаторРасшифровки) Экспорт Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда ПоказатьЗначение(,ПараметрДействия); ИначеЕсли ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать ИЛИ ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить Тогда ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина); Расшифровка = Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИдентификаторРасшифровки,ПараметрДействия); ПараметрыФормы.Вставить("Расшифровка", Расшифровка); ОткрытьФорму("Здесь форма вашего (текущего) отчета", ПараметрыФормы, , Новый УникальныйИдентификатор); ИначеЕсли ВыполненноеДействие = "Наше действие" Тогда // здесь мы можем открыть другой отчет, выполнить какую-то обработку КонецЕсли; КонецПроцедуры // ОбработкаВыбораРасшифровки()В этом примере видно, что типовые действия такие как расшифровка, упорядочить можно выполнить с помощью объекта типа «ОписаниеОбработкиРасшифровкиКомпоновкиДанных», который мы передаем в новую форму нашего отчета. Можно выполнить расшифровку в текущей форме. Для этого используется метод «ПрименитьНастройки» объекта «ОбработкаРасшифровкиКомпоновкиДанных», который возвращает итоговые настройки. Далее мы загружаем эти настройки в компоновщик и выполняем отчет:

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

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

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

3. Формы в отчете я использовал БСПшные, только для расшифровки создал свою форму «ФормаРасшифровки» с типом «Форма Отчета»

4. Открываем основную форму отчета БСП, для элемента формы «ОтчетТабличныйДокумент» ищем событие «ОбработкаРасшифровки» и переходим в нее.
В открывшейся процедуре вызываем процедуру обработки в переопределяемом модуле.
ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка);5. Проверяем имя отчета, при необходимости подсистему на существование, определяем модуль дальнейшей обработки и вызываем из него следующую процедуру.
Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ДвижениеМаркированногоТовара" Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует( "ТакскомПодсистемы.ЭлектронныйДокументооборот.РеализацияМаркированнойПродукции") Тогда МодульРеализацияМаркированнойПродукцииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РеализацияМаркированнойПродукцииКлиент"); МодульРеализацияМаркированнойПродукцииКлиент.ОбработкаРасшифровкиОтчетаДвижениеМаркированногоТовара( ФормаОтчета, Расшифровка, СтандартнаяОбработка); КонецЕсли; КонецЕсли; КонецПроцедуры6. Полный код вызываемой процедуры:
Процедура ОбработкаРасшифровкиОтчетаДвижениеМаркированногоТовара(ФормаОтчета, Расшифровка, СтандартнаяОбработка) Экспорт СтандартнаяОбработка = Ложь; ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных( ФормаОтчета.ОтчетДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(ФормаОтчета.Отчет)); ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Расшифровка", Расшифровка); ДополнительныеПараметры.Вставить("ОтчетДанныеРасшифровки", ФормаОтчета.ОтчетДанныеРасшифровки); ДополнительныеПараметры.Вставить("ФормаОтчета", ФормаОтчета); ОписаниеОповещения = Новый ОписаниеОповещения("ПоказатьВыборДействияЗавершение", ЭтотОбъект, ДополнительныеПараметры); ДоступныеДействия = Новый Массив; ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение); ДополнительныеПунктыМеню = Новый СписокЗначений; ДополнительныеПунктыМеню.Добавить("КодыМаркировки", НСтр("ru = 'Коды маркировки документа'")); ОбработкаРасшифровки.ПоказатьВыборДействия(ОписаниеОповещения, Расшифровка, ДоступныеДействия, ДополнительныеПунктыМеню); КонецПроцедурыРазберем подробно код процедуры
Прежде всего отменяем стандартную обработку:
СтандартнаяОбработка = Ложь;Создаем обработку расшифровки:
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных( ФормаОтчета.ОтчетДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(ФормаОтчета.Отчет));Создаем ОписаниеОповещения с параметрами, для алгоритма после выбора действия пользователем:
ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Расшифровка", Расшифровка); ДополнительныеПараметры.Вставить("ОтчетДанныеРасшифровки", ФормаОтчета.ОтчетДанныеРасшифровки); ДополнительныеПараметры.Вставить("ФормаОтчета", ФормаОтчета); ОписаниеОповещения = Новый ОписаниеОповещения("ПоказатьВыборДействияЗавершение", ЭтотОбъект, ДополнительныеПараметры);Добавляем два действия, одно платформенное, другое создаем свое собственное «КодыМаркировки»:
ДоступныеДействия = Новый Массив; ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение); ДополнительныеПунктыМеню = Новый СписокЗначений; ДополнительныеПунктыМеню.Добавить("КодыМаркировки", НСтр("ru = 'Коды маркировки документа'"));Вызываем меню выбора действий:
ОбработкаРасшифровки.ПоказатьВыборДействия(ОписаниеОповещения, Расшифровка, ДоступныеДействия, ДополнительныеПунктыМеню);7. В обработке оповещения обрабатываем каждый пункт меню действий
— В первом случае просто открываем объект по ссылке
— Во втором вызываем процедуру, которая нам вернет выбранное поле.
И если Выбранное поле заполнено, тогда вызываем процедуру открывающую новую форму отчета.
Процедура ПоказатьВыборДействияЗавершение(ВыполненноеДействие, ПараметрВыполненногоДействия, ДополнительныеПараметры) Экспорт Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда ПоказатьЗначение(Неопределено, ПараметрВыполненногоДействия); ИначеЕсли ВыполненноеДействие = "КодыМаркировки" Тогда ВыбранноеПоле = РеализацияМаркированнойПродукцииВызовСервера.ОбработкаРасшифровкиОтчетаДвижениеМаркированногоТовара( ДополнительныеПараметры.ОтчетДанныеРасшифровки, ДополнительныеПараметры.Расшифровка); Если ВыбранноеПоле = Неопределено Тогда Возврат КонецЕсли; ОткрытьОтчетРасшифровкуПоВыбранномуПолю(ДополнительныеПараметры.ФормаОтчета, ВыбранноеПоле); КонецЕсли; КонецПроцедурыТ.к. функция получения выбранного поля находится в общем модуле с галочкой Вызов Сервера, то делаем там только инициализацию серверной функции
Функция ОбработкаРасшифровкиОтчетаДвижениеМаркированногоТовара(ОтчетДанныеРасшифровки, Расшифровка) Экспорт Возврат РеализацияМаркированнойПродукцииСервер.ПолеРасшифровкиОтчетаДвижениеМаркированногоТовара( ОтчетДанныеРасшифровки, Расшифровка) КонецФункцииА уже в серверном общем модуле, описываем алгоритм получения выбранного поля Документ поступления.
Функция ПолеРасшифровкиОтчетаДвижениеМаркированногоТовара(ОтчетДанныеРасшифровки, Расшифровка) Экспорт ДанныеРасшифровки = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки); ПоляРасшифровки = ДанныеРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля(); НайденноеПоле = ПоляРасшифровки.Найти("ДокументПоступления"); Если НайденноеПоле = Неопределено Тогда Возврат Неопределено; Иначе Возврат НайденноеПоле.Значение; КонецЕсли; КонецФункции8. Процедура инициализирует открытие формы отчета с передачей параметров.
Процедура ОткрытьОтчетРасшифровкуПоВыбранномуПолю(ФормаОтчета, ВыбранноеПоле) Отбор = Новый Структура; Отбор.Вставить("ДокументСсылка", ВыбранноеПоле); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Отбор", Отбор); ПараметрыФормы.Вставить("КлючНазначенияИспользования", "КодыМаркировки"); ОткрытьФорму( "Отчет.ДвижениеМаркированногоТовара.Форма.ФормаРасшифровки", ПараметрыФормы, ФормаОтчета, ФормаОтчета.УникальныйИдентификатор); КонецПроцедуры9. В модуле открывшейся формы процедура ПриСозданииНаСервере:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; СтандартнаяОбработка = Ложь; Запрос = ""; Если Параметры.Отбор.Свойство("ДокументСсылка") Тогда Запрос = СформироватьДинамическиЗапрос(Параметры.Отбор.ДокументСсылка); КонецЕсли; Если Запрос = "" Тогда Возврат; КонецЕсли; Схема = Отчеты.ДвижениеМаркированногоТовара.ПолучитьМакет("РасшифровкаКодыМаркировки"); Схема.НаборыДанных[0].Запрос = Запрос; //Из схемы возьмем настройки по умолчанию Настройки = Схема.НастройкиПоУмолчанию; Для Каждого СтрокаОтбора Из Параметры.Отбор Цикл Отбор = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(СтрокаОтбора.Ключ); Отбор.ПравоеЗначение = СтрокаОтбора.Значение; КонецЦикла; //Формируем макет, с помощью компоновщика макета КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; //Передаем в макет компоновки схему, настройки и данные расшифровки МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки); //Выполним компоновку с помощью процессора компоновки ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки); //Очищаем поле табличного документа Результат.Очистить(); //Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); АвтоЗаголовок = Ложь; Заголовок = НСтр("ru = 'Коды операций (расшифровка)'"); КонецПроцедурыРазберем ключевые строки процедуры:
— Проверяем параметры формы, и вызываем формирование динамического запроса по полученному параметру ссылки на документ.
Запрос = ""; Если Параметры.Отбор.Свойство("ДокументСсылка") Тогда Запрос = СформироватьДинамическиЗапрос(Параметры.Отбор.ДокументСсылка); КонецЕсли; Если Запрос = "" Тогда Возврат; КонецЕсли;— Процедура формирования динамического запроса:
&НаСервере Функция СформироватьДинамическиЗапрос(ДокументСсылка) ШаблонЗапроса = "ВЫБРАТЬ | КодыМаркировки.Ссылка КАК ДокументСсылка, | КодыМаркировки.НомерСтроки КАК НомерСтроки, | КодыМаркировки.СерийныйНомер КАК СерийныйНомер |ИЗ | Документ.%1.КодыМаркировки КАК КодыМаркировки"; Запрос = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонЗапроса, ДокументСсылка.Метаданные().Имя); Возврат Запрос; КонецФункции— Получаем макет скд и в первом наборе данных переопределяем запрос, на тот, что мы сформировали динамически выше.
Схема = Отчеты.ДвижениеМаркированногоТовара.ПолучитьМакет("РасшифровкаКодыМаркировки"); Схема.НаборыДанных[0].Запрос = Запрос;Посмотрим на вкладку «Наборы данных» полученного макета расшифровки и видим что запрос в нем это лишь шаблон, т.к. мы заранее не знаем какой тип
документа будет расшифровываться. На вкладке «Настройки» вывод детальных записей, больше настроек у этой схемы нет.

— Применяем настройки и добавляем полученный в параметрах отбор
//Из схемы возьмем настройки по умолчанию Настройки = Схема.НастройкиПоУмолчанию; Для Каждого СтрокаОтбора Из Параметры.Отбор Цикл Отбор = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(СтрокаОтбора.Ключ); Отбор.ПравоеЗначение = СтрокаОтбора.Значение; КонецЦикла;— После располагается типовой код по программному формированию отчета,
куда мы передаем полученную схему, и сформированные настройки отчета.
Статья, по формированию расшифровки, без использования БСП
Скд что это такое расшифровка
синтетический каучук дивиниловый
Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.
СКД
сальдо конечное дебетовое
СКД
система комбинированного доступа
СКД
СКДсамоходный комбайн двухбарабанный
Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.
СКД
СКДсистема контроля допусков
СКД
сборочный комплект деталей
Источник: http://www.regnum.ru/expnews/280776.html
Пример использования
СКД для автомобилей
Союз концертных деятелей Российской Федерации
муз., организация, РФ
Источник: http://news.mail.ru/news.html?396588
СКД
Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.
СКД
Совет крестьянских депутатов
СКД
свеклоуборочный комбайн дисковый
Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.
СКД
Союз конституционных демократов
Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.
СКД
система контроля доступа
Словарь: Словарь сокращений и аббревиатур армии и спецслужб. Сост. А. А. Щелоков. — М.: ООО «Издательство АСТ», ЗАО «Издательский дом Гелеос», 2003. — 318 с.
СКД
например: Сквер СКД
г. Сумы, Украина
СКД
станция канатной дороги;
станция канатных дорогСКД
система компоновки данных
Словарь сокращений и аббревиатур . Академик . 2015 .
Полезное
Смотреть что такое «СКД» в других словарях:
- СКД РФ — СКД СКД РФ Союз концертных деятелей Российской Федерации муз., организация, РФ СКД Источник: http://news.mail.ru/news.html?396588 … Словарь сокращений и аббревиатур
- СКД-Л — синтетический каучук дивинильный на литиевом катализаторе нефт., хим. Источник: http://fs.rts.ru/content/annualreports/517/3/godovoy otchet 2009 eng.pdf … Словарь сокращений и аббревиатур
- СКД-Н — синтетический каучук дивиниловый на неодимовом катализаторе Источник: http://www.avias.com/news/2004/06/16/79836.html … Словарь сокращений и аббревиатур
- СКД (футбольный клуб) — СКД Полное название Футбольный клуб СКД Самара Основан 1989? Соревнован … Википедия
- СКД (футбольный клуб, Самара) — СКД Полное название Футбольный клуб СКД Самара Основан 1989? Соревнование вторая лига, зона «Центр» 1995 15 … Википедия
- СКД — Система контроля и управления доступом (СКУД) совокупность совместимых между собой аппаратных и программных средств, направленных на ограничение и санкционирование доступа людей, транспорта и других объектов в (из) помещения, здания, зоны и… … Википедия
- СКД — Аббр.: Симуляция Кипучей Деятельности. Так называют кафедру Социально Культурной Деятельности в Гуманитарном университете профсоюзов (ул. Фучика, 15) … Словарь Петербуржца
- СКД — самоходный комбайн двухбарабанный свеклоуборочный комбайн дисковый сверхкритическое давление синтетический каучук дивиниловый система контроля допусков система контроля доступа Совет крестьянских депутатов Союз конституционных демократов (РФ)… … Словарь сокращений русского языка
- РНМЦНТ и СКД — РНМЦ НТ и СКД Республиканский научно методический центр народного творчества и социально культурной деятельности имени А. Е. Кулаковского РНМЦНТ и СКД им. А.Е. Кулаковского г. Якутск, РС(Я) http://rnmc.ykt.ru/ г. Якутск, образование и… … Словарь сокращений и аббревиатур
- РНМЦ НТ и СКД — РНМЦНТ и СКД РНМЦ НТ и СКД Республиканский научно методический центр народного творчества и социально культурной деятельности имени А. Е. Кулаковского РНМЦНТ и СКД им. А.Е. Кулаковского г. Якутск, РС(Я) http://rnmc.ykt.ru/ г. Якутск,… … Словарь сокращений и аббревиатур
- Обратная связь: Техподдержка, Реклама на сайте
- Путешествия
Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.- Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
- Искать во всех словарях
- Искать в переводах
- Искать в ИнтернетеИскать в этой же категории
Расшифровка отчета в 1С 8.3 на СКД

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

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

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

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

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

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

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

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

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

Для начала в модуле формы отчета в процедуре РезультатОбработкаРасшифровки описываем получение полей, для которых будет выводиться расшифровка:
МассивДляРасшифровки = Новый Массив(); МассивДляРасшифровки.Добавить("Организация"); МассивДляРасшифровки.Добавить("Номенклатура"); РасшифрЗначение = ПолучитьРасшифровкуНаСервере(Расшифровка, МассивДляРасшифровки); Если РасшифрЗначение = Неопределено Тогда Возврат; КонецЕсли;В коде запрещаем открытие стандартной расшифровки:
СтандартнаяОбработка = Ложь;Выводим в расшифровку собственные действия:
ОбработРасшифр = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет)); ВыпДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать; ПараметрВыполненногоДействия = Неопределено; ДоступныеДействия = Новый Массив; ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение); НашиПункты = Новый СписокЗначений; ОбщСтрока = "Открыть обороты партий товаров по " + РасшифрЗначение; НашиПункты.Добавить( 1, ОбщСтрока + " за один месяц."); НашиПункты.Добавить( 6, ОбщСтрока + " за шесть месяцев.");
После описания собственного меню расшифровки, определения полей, для которых будет действовать расшифровка, необходимо передать параметры в новый открываемый отчет для его формирования.
ОбработРасшифр.ВыбратьДействие(Расшифровка, ВыпДействие, ПараметрВыполненногоДействия, ДоступныеДействия, НашиПункты); Если ВыпДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда ИначеЕсли ВыпДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда ОткрытьЗначение(ПараметрВыполненногоДействия); ИначеЕсли ТипЗнч(ВыпДействие) = Тип("Число") Тогда Парам = новый Структура(); Парам.Вставить("Нач",ДобавитьМесяц(ТекущаяДата(),-ВыпДействие)); Парам.Вставить("Кон",ТекущаяДата()); Парам.Вставить("СформироватьПриОткрытии",истина); Парам.Вставить("Номенклатура",РасшифрЗначение); ОткрытьФорму("Отчет.ПартииТоваров.Форма.ФормаОтчета",Новый Структура("Параметры",Парам)); КонецЕсли;
Для расшифровки на сервере используем следующую функцию:
&НаСервере Функция ПолучитьРасшифровкуНаСервере(Расшифровка, МассивИменРасшифровки, ЭтоГруппа = Ложь) Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля(); Для Каждого ИмяРасшифровки Из МассивИменРасшифровки Цикл ПолеНоменкл = Поля.Найти(ИмяРасшифровки); Если Не ПолеНоменкл = Неопределено Тогда Прервать; КонецЕсли; КонецЦикла; Возврат ПолеНоменкл.Значение; КонецФункцииСозданные на СКД отчеты предоставляют пользователям 1С широчайшие возможности по гибкой настройке выводимых данных. В программе присутствует типовой функционал по расшифровке данных, а с помощью программирования можно создавать дополнительные варианты любых действий.






