Расшифровка отчета СКД в конфигурации на БСП со своими костылями

02.04.26

Разработка - СКД

Как превратить стандартную расшифровку СКД в переход к отдельному отчету с другой схемой компоновки и автоматической передачей параметров.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Расшифровка отчета СКД в конфигурации на БСП со своими костылями
.cfe 16,44Kb
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вступление

Я больше 20 лет в бизнесе, однако СКД всё ещё регулярно заставляет меня попотеть. Почему-то она до сих пор выглядит контринтуитивно.

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

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

Тут я предлагаю совсем простой костыль метод с заполнением макета поля.

 

Сценарий

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

1. Пользователь нажимает на поле `Партнер` в основном отчете.

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

3. Расширение перехватывает `ОбработкаРасшифровки`.

4. Открывается форма отчета в режиме расшифровки.

5. Перед загрузкой настроек в компоновщик подключается другой макет СКД.

6. Параметры из расшифровки автоматически попадают в новую схему.

 

Реализация

 

1. Описываем расшифровку в основной СКД

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

 

 

Именно эта структура потом подсказывает обработке расшифровки, что открывать и какие параметры передавать.

 

2. В ОбработкаРасшифровки() открываем новый (или этот же) отчет

У меня расширение, в основной конфигурации просто дописываем в конец. Лучше конечно это всё сложить в свою процедуру в отдельном модуле.

&После("ОбработкаРасшифровки")

Процедура КАЕ_ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка)


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

    СтруктураРасшифровки = ОтчетыУТВызовСервераПереопределяемый.СформироватьДанныеРасшифровки(Расшифровка, ФормаОтчета.ОтчетДанныеРасшифровки);

    Если Не СтруктураРасшифровки.Свойство("ПолеРасшифровки") Тогда
        Возврат;
    КонецЕсли;

    СтандартнаяОбработка = Ложь;

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

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

    ОткрытьФорму("Отчет.МойОтчет.Форма", ПараметрыФормы, ФормаОтчета);

КонецПроцедуры

Здесь важен не сам вызов ОткрытьФорму, а передача СтруктураРасшифровки через дополнительные свойства.

 

3. Разрешаем форме отчета подменить схему

В модуле менеджера включаем поддержку настройки формы:

Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт

    НастройкиОтчета.ОпределитьНастройкиФормы = Истина;

КонецПроцедуры

 

А в модуле объекта подменяем схему до компоновки:

// для внешних отчетов эта процедура нужна всегда, чтобы отладчик не сыпал ошибки
// в нашем случае она нужна для того, чтобы переопределить схему компоновки данных
// если это сделать в ПриКомпоновкеРезультата(), то "открыть" можно будет только поля
// названия которых уже были в оригинальной схеме
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт

	Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина;
	
КонецПроцедуры

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

В этот момент отчет остается тем же объектом метаданных, но формируется уже по другому макету СКД.

 

4. Заполняем параметры новой схемы

После подмены схемы остается перенести значения из структуры расшифровки в параметры СКД:

Для Каждого Параметр Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл

    Параметр.Использование = Истина;

    ЗначениеПараметра = Неопределено;

    Если СтруктураРасшифровки.Свойство(Строка(Параметр.Параметр), ЗначениеПараметра) Тогда

        Параметр.Значение = ЗначениеПараметра;

    КонецЕсли;

КонецЦикла;

В демонстрации это дает простой эффект: клик по партнеру в сводном отчете открывает отдельную СКД с договорами именно этого партнера.

 

Что в итоге

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

 

Важное уточнение

Обработчики в отчете отрабатывают (видимо, для удобства программиста) по-разному в зависимости от того, где лежит отчет: в файле, в основной конфигурации или в расширении. 
В расширении и конфигурации будут вызваны функции конфигурации из модуля менеджера отчета, причем в расширении для этого нужно включить отчет в подсистему ПодключаемыеОтчетыИОбработки, а в основной конфигурации - добавить свой отчет в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(), во внешнем же отчете всё работает и так. Я для расширения считаю вариант ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов() более надежным.

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 11, релизы 11.5.12.195

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    251935    1394    421    

1147

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5978    317    shapa_pro    25    

69

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    17708    ovetgana    112    

110

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    10362    krasnoshchekovpavel    5    

68

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    9740    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

27.02.2025    16153    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    13791    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

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

20.08.2024    10465    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Viktor_Ermakov 400 03.04.26 13:38 Сейчас в теме
Спасибо за статью. Скажите пожалуйста, я не проверял, а в документации на ИТС к БСП Вашей версии, нет написано как это делать?
Для отправки сообщения требуется регистрация/авторизация