[ Разбор вопросов ] Тонкости СКД – настройки, варианты, расчет итогов по вычисляемым полям, программная обработка

Поток вопросов по СКД в Мастер-группе не прекращается. Сегодняшняя подборка тому подтверждение. Вопросы связаны и с платформенными изменениями самой системы компоновки данных, и с развитием БСП, и с расширением практик применения СКД в современных типовых решениях.

 

Вопрос №1: “Почему могут быть не доступны варианты отчетов на СКД в пользовательском режиме?”

Несколько раз сталкивался с тем, что варианты отчета, настроенные в конфигураторе, в пользовательском режиме не видны или виден только Основной вариант. Из этого я даже сделал вывод, что больше одного предопределенного варианта делать не имеет смысла. Судя по всему, вывод мой неправильный, в тестовой базе не воспроизводится. Почему могут быть не видны варианты и как это “лечить”?

Ответ

Если такая база базируется на БСП, то тут еще могут влиять механизмы БСП. Например, пользователю по ограничениям доступа недоступен конкретный вариант отчета, поэтому он его и не видит. Также для подсистемы БСП “Варианты отчетов” в общем модуле ВариантыОтчетовПереопределяемый в процедуре НастроитьВариантыОтчетов нужно явно описывать используемые варианты отчетов и запустить приложение с ключом ЗапуститьОбновлениеИнформационнойБазы.

Пример подключения отчетов к подсистеме “Варианты отчетов” есть на странице нашего сайта – Подключение отчетов к подсистеме “Варианты отчетов”. Возможно, в вашем случае какое-то из описанных действий не было выполнено.

 

Вопрос №2: “Можно ли делать отбор на уровне детальных записей по вычисляемым полям в СКД?”

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

 

Ошибка

(нажмите, чтобы увеличить картинку)

Ответ

Ошибка не будет возникать, если для отбора на уровне детальных записей изменить настройку Применение – указать значение “После группировки или для иерархии”:

Исправление ошибки

(нажмите, чтобы увеличить картинку)

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

 

Вопрос №3: “В каком случае можно установить значения параметров в процедуре ПередКомпоновкойМакета модуля менеджера отчета?”

В видео-уроке есть пример, где параметры отчета определяются и устанавливаются в модуле менеджера этого отчета в процедуре ПередКомпоновкойМакета(). Мне непонятно вот что:

  1. Эта процедура вызывается “сама”? То есть, если я сделаю такую процедуру в модуле менеджера, мне не нужно будет прописывать её вызов? Смущает, что в списке предопределенных возможных процедур нет такой (например, ПриКомпоновкеРезультата  в модуле объекта есть). Прилагаю скриншот, поясняющий, какой список имею в виду.

Модуль менеджера

  1. Переопределение параметров правильно делать именно в этой процедуре? Почему не в процедуре ПриКомпоновкеРезультата модуля объекта или в модуле формы?
  2. Если у меня внешний отчет, то модуля менеджера в нем нет – значит, такую процедуру я не могу использовать?

Ответ

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

А в общем модуле БухгалтерскиеОтчетыВызовСервера есть функция ПодготовитьОтчет, в которой содержится следующий код:

Если ПараметрыИсполненияОтчета.ИспользоватьПередКомпоновкойМакета Тогда

    МенеджерОтчета.ПередКомпоновкойМакета(ПараметрыОтчета, СхемаКомпоновкиДанных, КомпоновщикНастроек);

КонецЕсли;

Следовательно, в модуле менеджера отчета можно доработать компоновщик, например, установить значения параметров. Инициируется этот вызов в процедуре ПриКомпоновкеРезультата.

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

  1. Это зависит от того, для какой конфигурации разрабатывается отчет. Если конфигурация создается с нуля, то такой метод из модуля менеджера просто некому будет вызвать. Если конфигурация базируется на БСП, то можно “подсмотреть” в типовых отчетах, как они разработаны. Также в документации по БСП, размещенной на сайте ИТС, можно изучить подробное устройство подсистемы Варианты отчетов.
  2. Да, во внешних отчетах и обработках в принципе не существует модуля менеджера.

 

Вопрос №4: “Как вывести изображение в колонтитулах отчета на СКД?”

Подскажите, есть ли возможность в колонтитулах отчета выводить изображение (например, логотип фирмы)?

Ответ

Да, начиная с платформы 8.3.15 появилась возможность добавить картинку в колонтитул.

В конфигураторе это можно сделать в меню Таблица – Настройки печати – Колонтитулы:

Картинка в колонтитул

(нажмите, чтобы увеличить картинку)

 

Вопрос №5: “Каким образом можно программно получать настройки отчета на СКД?”

Насколько я понимаю, чтобы учесть значения, заданные пользователем на форме, нужно получать настройки так:

НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();

Но во многих видео настройки получаются такой строкой:

НастройкиКомпоновки = СхемаКомпоновки.НастройкиПоУмолчанию;

или

НастройкиКомпоновки = КомпоновщикНастроек.Настройки;

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

Ответ

Чтобы решить, какие именно настройки следует использовать, нужно задавать себе вопрос “Отчет с какими настройками мне нужно сформировать для решения поставленной задачи?”

  1. Чаще всего на практике нужно учитывать пользовательские настройки, значит, используем метод:
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();

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

  1. Если нужно взять настройки не из компоновщика, а из схемы компоновки, то воспользуемся настройками по умолчанию:
НастройкиКомпоновки = СхемаКомпоновки.НастройкиПоУмолчанию;

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

  1. СКД часто используется в обработках – для заполнения ТЧ, списка справочников или документов для обработки. Настройки компоновщика размещаются на форме, пользователь может их редактировать – настраивать отборы по своему усмотрению. А пользовательские настройки в таком случае не используются, поскольку мы не отчет разрабатываем, а всего лишь обработку. Значит, можно взять настройки из компоновщика:
НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
Это примеры разобранных вопросов из Мастер-группы курса
Профессиональная разработка отчетов в 1С 8.3 на СКД.

Описание курса и примеры видео

Комментарии / обсуждение (2):

  1. SinO

    Добрый день!
    Подскажите пожалуйста, проблема с округлением Вычисляемого поля в СКД:

    Есть выражение которое рассчитывается так ВычислитьВыражение(“Сумма(СуммаАналитики)”,”Клиент”)/ВычислитьВыражение(“Сумма(СуммаАналитики)”,”Торговый”) (2400,51/477296,83)получается число 0,0050,
    далее другое выражение Сумма(ВычислитьВыражениеСГруппировкойМассив(“Максимум(План)”,”Торговый”)) получается число 103 236,00, далее перемножаем между собой эти выражения, на калькуляторе получается 516,18,
    а в самом отчете после формирования 519,21. Когда убираешь форматирование вычисляемого поля тогда после деления первого выражения получается 0,005029 и после перемножения на калькуляторе получается 519,17.
    Как это победить? Т.е. СКД не умеет корректно округлять? Я уже пробовал и через окр() и через Выразить(МоеЧисло,”ЧИСЛО()15,2″) ничего не выходит, визуально в отчете первое выражение равно 0,0050
    и соответственно при перемножении показатели отличаются если их перемножаешь на калькуляторе. Помогите пожалуйста если возможно!

    • Василий Ханевич

      Добрый день!
      Без данных и конкретного отчета, конечно, трудно определить причину.

      Пришла в голову идея, что разные результаты получаются, потому что

      СУММА(А*В) <> СУММА(А)*СУММА(В)

      Пример.
      Таблица
      Предполагаю, что разные числа перемножаются, поэтому и результаты разные.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.