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

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

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

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

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

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

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

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

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

Такой тип вызова позволит нам использовать новые возможности расширений, описанные здесь.
Эти возможности доступны в релизах платформы начиная с 8.3.15.1489.
Они позволяют нам вносить "точечные" изменения в типовой код за счет использования инструкция препроцессора
#Вставить и #КонецВставить, #Удалить и #КонецУдалить.
Итак, измененный код процедуры УстановитьНастройкиПоУмолчанию() будет выглядеть следующим образом:
&НаСервере
&ИзменениеИКонтроль("УстановитьНастройкиПоУмолчанию")
Процедура Старт_УстановитьНастройкиПоУмолчанию()
БухгалтерскиеОтчетыВызовСервера.УстановитьНастройкиПоУмолчанию(ЭтотОбъект);
Отчет.ПоказательСумма = Истина;
Отчет.ПоказательКоличество = Истина;
#Вставка
Отчет.ПоказательВес = Истина;
#КонецВставки
КонецПроцедурыТакже нам потребуется внести изменения в функцию ПодготовитьПараметрыОтчетаНаСервере() модуля формы.
Делаем это также как и в предыдущем случае. Измененный код функции будет выглядеть следующим образом:
