Доработка типового отчета на СКД с помощью расширения

09.01.22

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

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

Скачать исходный код

Наименование Файл Версия Размер
Доработка типового отчета на СКД с помощью расширения:
.cfe 58,16Kb
7
.cfe 58,16Kb 7 Скачать

Итак, что мы имеем? Поставлена задача доработать типовой отчет "Продажи" в конфигурации "Бухгалтерия предприятия 3.0".

Необходимо сделать так, чтобы этот отчет выводил помимо двух показателей "Количество" и "Сумма" третий показатель - "Вес".

Разработка и тестирование производились на релизе На релизе 3.0.99.21 конфигурации "Бухгалтерия предприятия".

Что нам для этого нужно? С чего начать?

Прежде всего начнем с того что не требует программирования - добавим дополнительный реквизит "Вес" в справочник "Номенклатура". Процедура стандартная, и думаю, всем знакомая. Поэтому останавливаться на этом не буду.

Идем дальше. Добавляем в конфигурацию расширение. Меню -Конфигурация - Расширение конфигурации.

 

 

Назовем его "АдаптацияОтчетаПродажи". Префикс - "Старт_". Назначение - "Адаптация".

 

 

Снимем признак "Безопасный режим" в расширении.

 

 

Найдем в конфигурации нужный нам отчет "Продажи" и добавим его в расширение.

 

 

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

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

Добавим также еще один очень важный реквизит - ТекущаяСхемаКомпоновкиДанных. Тип реквизита Строка(80).
Комментарий "Наименование текущей используемой схемы компоновки данных".
Этот реквизит присутствует в некоторых других отчетах конфигурации, но в отчете "Продажи" его нет.
Зачем он нужен? Расскажу позже.

 

 

Также необходимо заимствовать в отчет табличные части Группировка и ДополнительныеПоля, а также их реквизиты Использование, Представление, ТипГруппировки.

Кроме этого, заимствуем форму отчета. Нам понадобится ее изменить.

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

Что делаем дальше? Подправим немного нашу заимствованную форму отчета.
Находим в элементах формы группу "ГруппаПоказатели". Видим что в этой группе есть элементы ПоказательКоличество и ПоказательСумма. Нам нужно здесь же разместить элемент ПоказательВес, связанный с добавленным нами ранее реквизитом отчета.
В правом верхнем окне формы раскрываем ветку реквизита Отчет, и... очень удивляемся.
Мы не видим там наш добавленный ранее реквизит отчета ПоказательВес. Что же делать?

 

 

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

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

 

 

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

 

 

Добавим обработчик события "ПриИзменении" для элемента ПоказательВес.

&НаКлиенте
Процедура Старт_ПоказательВесПриИзмененииПосле(Элемент)

	Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
		ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеАктуальность");
	КонецЕсли;

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

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

 

 

Такой тип вызова позволит нам использовать новые возможности расширений, описанные здесь.
Эти возможности доступны в релизах платформы начиная с 8.3.15.1489.
Они позволяют нам вносить "точечные" изменения в типовой код за счет использования инструкция препроцессора
#Вставить и #КонецВставить, #Удалить и #КонецУдалить.

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

&НаСервере
&ИзменениеИКонтроль("УстановитьНастройкиПоУмолчанию")
Процедура Старт_УстановитьНастройкиПоУмолчанию()

	БухгалтерскиеОтчетыВызовСервера.УстановитьНастройкиПоУмолчанию(ЭтотОбъект);

	Отчет.ПоказательСумма = Истина;
	Отчет.ПоказательКоличество = Истина;
	#Вставка
	Отчет.ПоказательВес = Истина;
	#КонецВставки

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

Также нам потребуется внести изменения в функцию ПодготовитьПараметрыОтчетаНаСервере() модуля формы.
Делаем это также как и в предыдущем случае. Измененный код функции будет выглядеть следующим образом:

 
 Функция Старт_ПодготовитьПараметрыОтчетаНаСервере()

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

А сейчас перейдем к самому главному: модификации Схемы компоновки отчета.
Что нам рекомендует фирма 1С при доработке типовых отчетов на СКД через расширения?
Она предлагает два варианта:

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

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

Фирма 1С не рассмотрела третий возможный вариант доработки типового отчета на СКД с помощью расширений.
Третий вариант представлен в следующей публикации: "Пример доработки типового отчета в БП 3.0".
Его суть заключается в программной модификации СКД.

Мы начинаем модифицировать нашу Схему компоновки и сразу же натыкаемся на множество ошибок, пути исправления которых не всегда очевидны. Эти ошибки связаны с тем что в нашем расширении не хватает некоторых объектов метаданных расширяемой конфигурации на которые есть ссылки в схеме компоновки отчета.
Эти ошибки не критичны, и в общем-то даже не являются ошибками. В режиме 1С:Предприятия наш доработанный отчет будет "видеть" все эти отсутствующие объекты метаданных конфигурации, и будет нормально работать.
Но если вы хотите чтобы "все было красиво" еще на этапе разработки расширения, то придется немного повозиться для исправления этих ошибок.

Ошибка первая:

 

 

Ну, тут как бы все очевидно. необходимо заимствовать в расширение справочник НоменклатурныеГруппы.
Также нам понадобится заимствовать в расширение справочники Номенклатура и некоторые другие объекты метаданных чтобы не было подобных ошибок.

Ошибка вторая:

 

 

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

Ошибка третья:

 

 

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

  1. Заимствовать в расширение следующие объекты:
    план видов характеристик ВидыСубконтоХозрасчетные, план счетов Хозрасчетный.
  2. Для плана видов характеристик назначить типы как на скриншоте ниже.
  3. Для плана счетов указать виды субконто и их количество как на скриншоте ниже.
  4. Для регистра бухгалтерии Хозрасчетный указать план счетов Хозрасчетный.

 

 

Ошибка четвертая:

 

 

Для устранения этой ошибки установим в свойствах регистра бухгалтерии Хозрасчетный признак "Корреспонденция".

Ошибка пятая:

 

Исправить ошибку нам поможет установка свойства Владельцы у справочника ДоговорыКонтрагентов.

 

 

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

Модификация совсем несложная. Добавим вычисляемое поле Вес.

 

 

В выражении поля пропишем следующее:
УправлениеСвойствами.ЗначениеСвойства(Номенклатура, "Вес_1e023769e20845f7836529edef6a3da9")*Количество
Где "Вес_1e023769e20845f7836529edef6a3da9" - это идентификатор нашего дополнительного реквизита Вес.

Затем добавляем наше вычисляемое поле в ресурсы:

 

Далее для каждого варианта отчета добавляем наш ресурс Вес в выбранные поля группировки Таблица.

 

 

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

 

 

Здесь у нас первые четыре макета - из типового отчета. Все следующие добавлены.

Что еще остается сделать? Осталось внести некоторые изменения в модуль отчета и в модуль менеджера отчета.

В модуле отчета меняем процедуру ОпределитьНастройкиФормы()
Здесь мы подменяем типовую схему компоновки отчета на нашу собственную.
 

&ИзменениеИКонтроль("ОпределитьНастройкиФормы")
Процедура Старт_ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки)

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

	#Удаление
	СхемаКомпоновкиДанных = ПолучитьМакет("СхемаКомпоновкиДанных");
	#КонецУдаления
	#Вставка
	СхемаКомпоновкиДанных = ПолучитьМакет("Старт_СхемаКомпоновкиДанных");
	#КонецВставки

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

Но эта подмена не сработала бы если бы мы ранее не добавили в наш отчет реквизит ТекущаяСхемаКомпоновкиДанных.
Именно по наличию этого реквизита в модуле БухгалтерскиеОтчетыКлиентСервер проверяется необходимость подмены схемы компоновки отчета:

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

Теперь нам осталось поменять некоторые процедуры и функции в модуле менеджера отчета. Займемся этим.

&ИзменениеИКонтроль("ПолучитьНаборПоказателей")
Функция Старт_ПолучитьНаборПоказателей()

	НаборПоказателей = Новый Массив;
	НаборПоказателей.Добавить("Сумма");
	НаборПоказателей.Добавить("Количество");
	#Вставка
	НаборПоказателей.Добавить("Вес");
	#КонецВставки

	Возврат НаборПоказателей;

КонецФункции

Все внесенные изменения заключены в инструкции препроцессора #Вставить и #КонецВставить, #Удалить и #КонецУдалить.

 
 Полный текст изменений в модуле менеджера отчета

Ну вот и все. Наш отчет готов.

 

 

Готовое расширение конфигурации с отчетом прикрепляю к публикации.

Типовой отчет Адаптация СКД Расширение

См. также

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

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    134652    739    391    

775

Как посмотреть итоговый запрос в отчете СКД

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    4374    implecs_team    6    

39

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    5101    39    obmailok    20    

75

Набор-объект для СКД по тексту или запросу

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2411    2    Yashazz    0    

33

СКД на JavaScript в 1С

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

11.12.2023    9091    21    John_d    25    

124

Использование менеджера временных таблиц в СКД

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    5738    PROSTO-1C    13    

65
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1644 09.01.22 17:20 Сейчас в теме
а ОСВ в расширение также переводится? или есть другие нюансы?
2. WorkerPavel 10.01.22 14:24 Сейчас в теме
Затем добавляем наше вычисляемое поле в ресурсы:

А скриншот после этого от предыдущего пункта. Хотя и так понятно.
4. Spacer 358 10.01.22 22:18 Сейчас в теме
(2)Спасибо за замечание. Исправил.
3. triviumfan 94 10.01.22 15:54 Сейчас в теме
Я бы не стал такую задачу делать с помощью расширения.
5. МимохожийОднако 142 16.01.22 09:06 Сейчас в теме
(3) Какой вариант предложишь?
7. barat 19.01.22 15:53 Сейчас в теме
6. RustIG 1644 19.01.22 07:58 Сейчас в теме
спасибо за такой подробный пошаговый обзор!
простая с первого взгляда задача "добавить вес в отчет" - в итоге превратилась в решение-"монстра" с 20-тью нюансами...
denis83; cdiamond; bondaleksey; 2711640; mrChOP93; Angealtor; _Vovik; Jimbo; Spacer; +9 Ответить
8. porese 20.01.22 09:42 Сейчас в теме
То что можно вынести во внешние отчеты, обработки... не стоит адаптировать расширением. Что стоило скопировать отчет во внешние, исправить без всяких лишних телодвижений и вставить во внешние отчеты. Получится проще.
Но в данном случае было показано, как сделать расширение и какие подводные камни встретятся. Та же технология применима и для документов, справочников и т.д. Хороший мануал для тех кто начинает работать с расширениями.
9. pentanom 25 08.07.22 17:15 Сейчас в теме
У меня при переносе "ПоказательВес" вылетает конфигурация. С чем это может быть связано?
Прикрепленные файлы:
Оставьте свое сообщение