Расшифровка скд открыть отчет с параметрами
Расшифровка в 1С СКД
При разработке отчетов в 1С достаточно часто требуется такая функция как Расшифровка 1С СКД. Обычно под расшифровкой понимается формирование такого же отчета с установленными отборами с дополнительной (более подробной) группировкой.
В том числе такая возможность имеется и в отчетах, созданных с помощью 1С СКД. При этом функционал расшифровки является встроенным и позволяет выполнять пользователю различные действия, без приложения дополнительных усилий со стороны программиста. То есть при создании отчета на СКД программисту достаточно настроить только схему компоновки – без дополнительного кода в модуле отчета и без добавления форм отчета.
Стандартные возможности расшифровки 1С СКД
В пользовательском режиме расшифровку отчета можно вызвать двумя способами:
Какие действия доступны при выполнении расшифровки:
Что еще можно сделать с расшифровкой без программирования? В расшифровку попадают значения полей из наборов данных. Иногда возникает необходимость в отчет вывести одно значение, но в качестве расшифровки должно выступать другое поле. Например, регистратор можно выводить как номер, но необходимо, чтобы при клике по нему открывался документ. Это можно сделать без дополнительного программирования – через установку выражения представления
При такой настройке в расшифровке везде будет использоваться ссылка на документ, но в отчете будет выводиться только его номер.
Дальше мы будем рассматривать все более сложные ситуации при разработке отчета на СКД. Например, вам может понадобиться добавить свою форму в отчет – добавить какие-то дополнительные команды, настроить более сложный интерфейс для пользователя.
При добавлении новой формы отчета система производит сама настройку формы для использования совместно с СКД. В том числе добавляется реквизит «ДанныеРасшифровки» с типом «Строка». И в свойствах формы производится связь атрибута «Данные расшифровки» с созданным реквизитом.
Если вы добавляете форму отчета самостоятельно – например, как произвольную или копируете форму из какого-то другого объекта, для правильной работы расшифровки вам необходимо добавить реквизит и настроить его связь, как описано выше.
Расшифровка при программном выполнении 1С СКД
При разработке отчета на СКД вам иногда может понадобиться выполнять программного выполнения. Например, всегда – при использовании внешних наборов данных. Например, в ситуации, когда в отчете есть больше чем одна схема компоновки.
В этом случае, для правильной работы расшифровки, необходимо в модуле объекта отчета в процедуре ПриКомпоновкеРезультата передавать параметр процедуры «ДанныеРасшифровки» в два места кода программного выполнения СКД:
Макеты и расшифровка 1С СКД
Следующий этап в разработке отчета на СКД, где вы столкнетесь с расшифровкой это использование собственных макетов. Если в схеме не указаны макеты, то платформа генерирует макеты для полей самостоятельно и самостоятельно настраивает их для правильно работы расшифровки. Если вы добавили свой макет, то вы должны дополнительно настроить работу расшифровки в нем.
Рассмотрим настройку простого отчета по регистру оборотов «Продажи»
В схеме добавлено два макета группировки
Если сформировать отчет и навести курсор на группировку «Контрагент», то курсор меняется на «лупу с крестиком» — расшифровка доступна. Если навести курсор на группировки «Номенклатура» или «Детали», расшифровка недоступна.
Макет для группировки «Номенклатура» выглядит следующим образом
Для ячейки макета «Номенклатура» определим свойство «ПараметрРасшифровки»
Назвать параметр расшифровки нужно отлично от свойства «Параметр», тогда в параметрах макета добавится наш параметр расшифровки:
Зайдем здесь в редактирование поля «Выражение», определим основное действие. Например, «Расшифровать»:
Теперь это действие будет выполняться по умолчанию при клике ЛКМ, при клике ПКМ доступно меню всех действий расшифровки. Для остальных ячеек (Количество, Сумма) зададим такое же название параметра расшифровки. В этом случае расшифровка будет действовать одинаково для всех ячеек в группировке.
В окне редактирования параметра расшифровки мы можем также переопределить значения полей набора, которые будут использоваться для расшифровки. Например, для поля «Номенклатуры» можно указать выражение «Контрагент» и при открытии значения будет открываться карточка контрагента:
Мы разобрали уже немало вариантов применения расшифровки в СКД, но до сих пор не написали ни одной (ну или почти ни одной) строчки кода. В следующей главе рассмотрим ситуации, когда для обработки расшифровки необходимо написать программный код.
Произвольная обработка расшифровки 1С СКД
Когда может понадобиться произвольная обработка расшифровки? Например, если результат отчета вам нужно расшифровать этим же отчетом, но с другими настройками, с другим макетом, выполнить расшифровку другим отчетом, выполнить какую-то обработку и т.п.
Для реализации произвольной расшифровки служит событие «ОбработкаРасшифровки» у табличного документа и обработчик «ОбработкаДополнительнойРасшифровки». Первой событие вызывается по ЛКМ, второй при клике ПКМ.
Заголовок обоих обработчиков выглядит одинаково. Здесь и далее будем рассматривать работу расшифровки для управляемых форм:
Нас будут интересовать параметры: «Расшифровка» — в этом параметре указывается идентификатор расшифровки, в параметре «СтандартнаяОбработка» указываем «Истина», если нужно выполнить стандартный алгоритм расшифровки, «Ложь» если мы реализуем произвольную расшифровку.
Здесь используется функция общего модуля «ПолучитьМассивПолейРасшифровки», которая кроме текущего значения параметра расшифровки получается значения родительский полей и значения установленных отборов:
В итоге мы получаем массив элементов с типом «ЭлементОтбораКомпоновкиДанных» или «ЗначениеПоляРасшифровкиКомпоновкиДанных», эти значения мы уже можем передать в другой отчет или в обработку.
В этом нам может помочь объекта с типом «ОбработкаРасшифровкиКомпоновкиДанных». В обработчике «ОбработкаРасшифровки» мы можем написать такой код:
Здесь с помощью реквизита «ДанныеРасшифровки» и источника доступных настроек, полученного из компоновщика настроек нашего отчета мы получаем объект указанного типа. Далее мы вызываем метод объекта «ПоказатьВыборДействия», в который передаем нужные нам типовые действия и список наших действие в виде дополнительных пунктов.
В обработке выбранного действия мы производится собственно действия по расшифровке:
В этом примере видно, что типовые действия такие как расшифровка, упорядочить можно выполнить с помощью объекта типа «ОписаниеОбработкиРасшифровкиКомпоновкиДанных», который мы передаем в новую форму нашего отчета. Можно выполнить расшифровку в текущей форме. Для этого используется метод «ПрименитьНастройки» объекта «ОбработкаРасшифровкиКомпоновкиДанных», который возвращает итоговые настройки. Далее мы загружаем эти настройки в компоновщик и выполняем отчет:
Можно эти настройки получать также с помощью таких методов объекта «ОбработкаРасшифровкиКомпоновкиДанных» как: Упорядочить, Расшифровать, Сгруппировать, Отфильтровать.
Расшифровка СКД. Управляемые формы
Платформа 1С предоставляет возможность расшифровки из коробки, но только в том случае, если мы используем объект “Отчет” и его форму. Если мы выводим отчет на форме обработки – нам придется добавить немного кода.
Для начала создадим обработку, форму обработки и создадим реквизиты формы:
На форме сделаем два элемента:
Пойдем от очень простого к простому.
Код кнопки “Обновить” будет таким:
И добавим процедуру:
Это минимум кода, который нам необходим, чтобы вывести отчет.
Тут-то и появляется вопрос “Куда делась расшифровка?”.
Для того, чтобы появилась расшифровка нам надо изменить нашу процедуру ОбновитьОтчетНаСервере:
Теперь мы добавили данные расшифровки в наш отчет.
Но и это еще не все. Если мы сформируем отчет у нас будет расшифровка. но вместо нее мы будем видеть цифры, как на скриншоте
Эту проблему я встречал достаточно часто на различных форумах. Но и это не проблема.
Достаточно создать событие “ОбработкаРасшифровки” для поля табличного документа со следующим кодом:
И передать данные расшифровки с сервера на клиент. Кстати именно для этого мы сделали два реквизита “АдресРасшифровки” и “АдресХранилищаСКД”.
Для этого опять изменим процедуру ОбновитьОтчетНаСервере и приведем ее вот к такому виду:
Теперь добавим процедуру для обработки вышеуказанного оповещения:
Видим, что мы уже почти все сделали. Отчет работает, выводит меню расшифровки и даже открывает ссылки справочников и документов. Осталось два вопроса:
В отличии от открытия значений расшифровка и фильтрация требует повторного формирования отчета с заданными настройками.
Эти настройки нам нужно получить и вывести отчет уже с новыми настройками.
Конечный результат модуля формы
Для этого приведем процедуру ОбновитьОтчетНаСервере к такому виду:
А процедуру РезультатОбработкаРасшифровки_Продолжение к такому:
Подставляем параметры в отчет СКД
Если выводимый отчет имеет параметры – нам надо об этом тоже позаботиться.
Впрочем ничего сложно тут нет.
Предположим, что нам нужно установить параметр “Период” для отчета.
Перед тем как скомпановать результат нужно добавить одну строку:
Таким образом наша процедура примет следующий вид:
Все что я хотел рассказать и чем поделиться – подробно изложено в этой статье. Если у вас остались вопросы – добро пожаловать в комментарии.
Расшифровка одного отчета СКД при помощи другого отчета СКД (в управляемых формах, классический вариант, методика + пример для УТ11)
Предположим что есть некий отчет, при расшифровке которого нужно использовать другой, отличный от первого отчет, или конкретнее:
При расшифровке отчета «НеликвидыНоменклатуры» хочется использовать отчет «АнализДвиженийТоваровСРезервамиУпак», оба отчета самопальные и внедерены в УТ11 (оба отчета во вложении к теме). Т.е. при клике на ячейке с номенклатурой исходного отчета, должен быть построен отчет-расшифровка уже установленным отбором по этой номенклатуре, до кучи можно установить другие параметры отчета расшифровки (например период и склад):
Сначала нужно понять в каком же месте произошло событие, требующее расшифровки (иначе говоря нужно узнать какую номенклатуру выбрал пользователь), т.к. «РезультатОбработкаРасшифровки» работает на клиенте, тут потребуется вызов серверной функции с передачей в качестве параметра переменной «Расшифровка»
Номенклатура = ПолучитьРасшифровкуНаСервере(Расшифровка, ЭтоГруппа);
Тут передается также переменная ЭтоГруппа – для возврата признака выбранной номенклатуры.
&НаСервере
Функция ПолучитьРасшифровкуНаСервере(Расшифровка, ЭтоГруппа = Ложь )
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); //Здесь основная «недокументированная фишка»: Переменная ДанныеРасшифровки не описана в хелпе, также не описано что Данные, нужно получать путем извлечения из временного хранилища,
Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля(); //Тут получаем поля расшифровки, среди которых находим нужное.
ПолеНоменклатура = Поля.Найти(«Номенклатура»);
Если ПолеНоменклатура = Неопределено Тогда
Возврат Неопределено;
Иначе
ЭтоГруппа = ПолеНоменклатура.Значение.ЭтоГруппа;
Возврат ПолеНоменклатура.Значение;
КонецЕсли ;
КонецФункции
Далее, продолжаем наполнять основную процедуру формы исходного отчета « РезультатОбработкаРасшифровки » :
Если Номенклатура = Неопределено Тогда Возврат; КонецЕсли;
Если ЭтоГруппа Тогда Возврат; КонецЕсли; //Группа стандартной обработкой проверяется на равенство, поэтому при выборе группы используем стандартную расшифровку.
СтандартнаяОбработка = Ложь ;
//Получаем Склад, указанный в Отборе текущего отчета:
КоллекцияЗдесь = ЭтаФорма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
НастройкиЗдесь = ЭтаФорма.Отчет.КомпоновщикНастроек.Настройки;
ПолеСкладЗдесь = НастройкиЗдесь.Отбор.ДоступныеПоляОтбора.Элементы.Найти(» Склад «).Поле;
ИДЭлмОтбораСкладЗдесь = «»;
Для Каждого Элемент Из НастройкиЗдесь.Отбор.Элементы Цикл
Если Элемент.ЛевоеЗначение = ПолеСкладЗдесь Тогда ИДЭлмОтбораСкладЗдесь = Элемент.ИдентификаторПользовательскойНастройки; Прервать; КонецЕсли;
КонецЦикла ;
ЭлементОтбораСкладЗдесь = КоллекцияЗдесь.Найти(ИДЭлмОтбораСкладЗдесь);
//Получаем Период, указанный в настройках текущего отчета:
ИДНастройкиПериодЗдесь = НастройкиЗдесь.ПараметрыДанных.Элементы.Найти(» Интервал «).ИдентификаторПользовательскойНастройки;
КонецПериодаЗдесь = КоллекцияЗдесь.Найти(ИДНастройкиПериодЗдесь).Значение.ДатаОкончания;
ОткрытьФорму(» Отчет.АнализДвиженийТоваровСРезервамиУпак.Форма «, ПараметрыФормыХ, ЭтаФорма, Номенклатура);
Некоторые пояснения к тексту процедуры:
Расшифровка в 1С в отчете на СКД (системе компоновки данных)
В сформированном отчете 1С на СКД существует возможность двойным кликом мыши на ячейку вызвать всплывающее окно расшифровки с набором определенных действий. К таким действиям относятся:
Наибольший интерес вызывает открытие по расшифровке в 1С другого отчета 1С с параметром, содержащемся в выбранной ячейке. Но и другие действия будут доступны.
Начнем с того, что нужно вызвать событие обработки расшифровки в свойствах управляемой формы СКД. Сейчас те, кто работал на 7-ке, возможно, ужаснутся, так как лично для меня это было жутко нелогично. В 8-ке все гораздо прозаичней. Нужно создать основную форму, затем перейти на нее и открыть свойства реквизита «Результат»:
Обращу внимание, что реквизит «Результат» появляется только после того, как создана «ОсновнаяСхемаКомпоновкиДанных», и при создании формы установлены следующие флажки:
Я сразу приведу текст процедур и функций для организации расшифровок на СКД в 1С, а пояснения буду давать в комментариях. Читать на сайте код достаточно сложно, поэтому Вы можете скачать этот отчет и читать код в конфигураторе 1С 8.3. А результат работы отчета можно увидеть под этим кодом:
Если РасшифрЗначение = Неопределено Тогда Возврат ; КонецЕсли ;
СтандартнаяОбработка = Ложь ;
// Прописываем доступные действия. Если какое-то действие не указать,
//оно не будет доступно пользователю
ДопПункты = Новый СписокЗначений ;
ОбщСтрока = «Открыть отчет Расчеты с поставщиками «
+ «» «» + Строка ( ТипЗнч ( РасшифрЗначение ) )
+ » = « + РасшифрЗначение + «» «» ;
Результат проделанной работы:
Это наш простенький отчет с уже открытой расшифровкой.
После выбора нужной позиции откроется отчет «Ведомость расчетов с поставщиками»:
У меня данных в этом отчете нет, но видно, что параметры формирования передались правильно.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Добавление расшифровки в стандартные и добавленные внешние отчеты со стандартной формой отчета на СКД
Как известно, подключаемый внешний отчет, если не указывать свою форму отчета, будет использовать общую формуОтчета из конфигурации,
Всем она хороша,но вот добавить свою расшифровку в такой отчет как я думал затруднительно, но разработчики позаботились и об этом.
Ниже предоставлен код который можно добавить в расширение либо в сам общий модуль «ОтчетыКлиентПереопределяемый», Он снабжен комментариями поэтому понять сто к чему можно будет из кода.
Все тестировалось на 1С ERP 2.2.4
Специальные предложения
(3)Ну собственно там, идет обработка того что в коде приведено, они ищет в отчете поля, сравнивает с тем что прописали вы, в случае удачного сосоставления он добавляет пункт меню в расшифровку стандартную и обраьотчик
Обновление 27.09.18 18:20
См. также
Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)
27.01.2016 84511 Serginio 113
Взаимодействие с api Честный знак (Молочная продукция)
Обзор основных примеров взаимодействия с Честным знаком по api для нетиповых конфигураций.
30.08.2021 1002 user5300 32
Изменение расшифровки макета СКД до компоновки
Это не про работу с данными расшифровки. Это про изменение расшифровок полей ДО того, как СКД выполнилась. Быстрый способ сделать нужные расшифровки.
12.07.2021 2230 Yashazz 6
В данной публикации предлагаю рассмотреть основные типовые возможности библиотеки стандартных подсистем (БСП), касаемые префиксации объектов конфигураций.
21.06.2021 4099 quazare 4
Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо
28.12.2020 8270 comol 31
Чтение CSV (быстрое)
Почему то из гугла до сих пор нет ссылки на код процедуры быстро читающей csv. Загрузка из файла CSV c помощью ADODB.Connection провайдера Microsoft.Jet.OLEDB.
31.03.2021 1433 kuzyara 4
Последний раз про срез последних (на каждую дату в запросе)
Срез последних на каждую дату в запросе. Известные факты о задаче: часто встречается на испытаниях соискателей на работу программистом 1с, постоянно провоцирует споры об оптимальном решении. В данном тексте приводятся замеры производительности различных вариантов решения задачи.
15.02.2021 9626 randomus 47
Ускоряем медленный/долгий и тормозной стандартный поиск по динамическому списку, настраиваем его под себя
14.12.2020 19947 SizovE 2
Универсальные функции с примерами использования Промо
26.02.2016 42994 unichkin 47
11.12.2020 974 SizovE 6
Программное условное оформление динамического списка, раскраска строк списка по цветам справочника или любым другим условиям (условное оформление)
30.11.2020 5567 SizovE 4