1с прикомпоновкерезультата не вызывается
Рассмотрим программное формирование результата отчета на примере события ПриКомпоновкеРезультата, которое вызывается по-умолчанию при формировании отчета или при выполнении отчета с помощью метода СкомпоноватьРезультат().
// 1. Установим признак отказа от выполнения стандартной обработки события.
СтандартнаяОбработка = Ложь;
// 2. Получим макет, в котором хранится "шапка" и "подвал" отчета.
МакетДопОформление = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_ДопОформлениеСКД");
// 3. Выведем в табличный документ шапку отчета.
ШапкаОтчета = МакетДопОформление.ПолучитьОбласть("ШапкаОтчета");
ДокументРезультат.Вывести(ШапкаОтчета);
// 4. Получим копию настроек компоновки данных.
НастройкиОтчета = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
// 5. Установим значение параметра компоновки данных ОтчетнаяДата (Вкладка "Параметры" схемы компоновки данных).
ПараметрОтчетнаяДата = Новый ПараметрКомпоновкиДанных("ОтчетнаяДата");
Если НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрОтчетнаяДата) <> Неопределено Тогда
НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрОтчетнаяДата, ЭтотОбъект.ОтчетнаяДата);
КонецЕсли;
// 6. Загрузим настройки в компоновщик (пользовательские настройки заново заполняются на основе этих настроек).
ЭтотОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета);
// 7. Создадим объект для компоновки макета и выполним компоновку макета.
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(
ЭтотОбъект.СхемаКомпоновкиДанных,
ЭтотОбъект.КомпоновщикНастроек.Настройки,
ДанныеРасшифровки);
// 8. Создадим объект, выполняющий компоновку данных, и инициализируем его.
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
// 9. Создадим объект для вывода результата компоновки в табличный документ, установим табличный документ, в который нужно вывести результат и выведем весь результат в установленный табличный документ.
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// 10. Выведем в табличный документ подвал отчета.
ПодвалОтчета = МакетДопОформление.ПолучитьОбласть("ПодвалОтчета");
ДокументРезультат.Вывести(ПодвалОтчета);
Итоговый код события:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
МакетДопОформление = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_ДопОформлениеСКД");
// Шапка.
ШапкаОтчета = МакетДопОформление.ПолучитьОбласть("ШапкаОтчета");
ДокументРезультат.Вывести(ШапкаОтчета);
ПараметрОтчетнаяДата = Новый ПараметрКомпоновкиДанных("ОтчетнаяДата");
Если НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрОтчетнаяДата) <> Неопределено Тогда
НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрОтчетнаяДата, ЭтотОбъект.ОтчетнаяДата);
КонецЕсли;
ЭтотОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета);
// СКД.
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(
ЭтотОбъект.СхемаКомпоновкиДанных,
ЭтотОбъект.КомпоновщикНастроек.Настройки,
ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Подвал.
ПодвалОтчета = МакетДопОформление.ПолучитьОбласть("ПодвалОтчета");
ДокументРезультат.Вывести(ПодвалОтчета);
КонецПроцедуры
Здравствуйте.
Модифицирую отчет на СКД в типовой конфе ЗУП.
Поставил точку останова в модуле отчета, уже везде, например, процедура ПриКомпоновкеРезультата
Нигде не срабатывает точка останова, хотя в этот же отчет добавил свой вариант (в СКД) - он добавился, то есть, вроде, не промахиваюсь.
В нужном отчете ставлю точку останова, а эффекта 0.
Вопрос: Почему может не срабатывать точка останова, хотя отчет формируется?
может потому что он запускается через механизм выполнения длительных операций и это уже как бы фоновое задание
(3) О! А есть где-то простой пример, как свой отчет можно переложить на длительные операции? А то у меня БСП есть, но без подсистемы вариантов отчетов. Хочется малой кровью колесико прикрутить к отчетам с переопределенной компоновкой.
(4) к сожалению не подскажу, надо разбираться, у нас УТ11, так что достаточно просто написать отчет на СКД без своей формы )
(5) Понял. Судя по общим модулям, простых путей нет. В любом случае через общую форму для отчетов проще всего делать. Ну или таки подсистему прикрутить :)
(3) Спасибо.
Я начал "ковырять", если модуль менеджера очистить - тогда останов срабатывает (вроде бы.. сейчас вот опять нет).
Продолжу изыски.
Прочитаю про этот механизм. Как я понял, он встроен в БСП?
(8) А вот фигушки!
Не помогает режим отладки. Как не останавливал так и не останавливает - сразу же вызывает исключение, хотя весь код точками останова обставил
СКД конечно, муть еще та.
Да, удобна, но, НЕ ДАЙ БОГ ЧЕГО - ТО ТАМ СДВИНЕТСЯ.
Искать будешь до пенсии - запросы там огромнейшие, по нескольку тысяч строк и никак в них не влезешь, а, еще и отладчик на событиях не останавливается
У меня во внешнем отчете на СКД отладка модуля формы запустилась только после того, как я основной формой явно указал Управляемую, до этого основной оставалась старая (для обычного режим), и хотя в тонком клиенте отчет автоматом открывал управляемую форму, для запуска отладки это как то мешало.
Преподаватель 1С
Санкт-Петербург
зарплата от 100 000 руб. до 120 000 руб.
Временный (на проект)
УТ 11.2. Сделал простой новый внешний отчет на СКД. Основные формы для отчета не указал, а значит при открытии этого отчета (через Файл - Открыть) будет использоваться форма, указанная в свойстве корня конфигурации "Основная форма отчета". В этой форме формирование результата делается через фоновое задание (и подсистему БСП "ДлительныеОперации"). У моего внешнего отчета в модуле объекта задан обработчик "ПриКомпоновкеРезультата", который при формировании отчета через вышеназванную форму конфигурации не вызывается. Если у отчета создать авто-форму (через лупу) и указать ее основной, то этот обработчик (ожидаемо), вызывается. Вопрос: кому уже удалось добиться вызова кода модуля ваших внешних отчетов, для которых основная форма отчета не задана?
До длительных операций - не припомню такого. Точно помню, что делал внешние отчеты без указания формы, делал свой обработчик "При компоновке результата" + получал плюшки от основной формы отчета конфигурации (суммирование там, быстрые настройки и т.д.), и обработчик мой там вызывался.
А как ты определил что не вызывается? По результату? или что отладчик на точке остановке там не останавливается? Просто если по второму признаку, то когда отчет выполняется в фоном задании, он запускается в другом сеансе(сеансе планировщика заданий), и отладить ты это выполнение не можешь.
Можно включить отладку фоновых заданий и отловить. Тяжелее, конечно, чем обычная отладка, но это возможно.
О нашел - кнопка "Автоматическое подключение" в настройках отладки. с какого релиза появилась? только сейчас ее увидел.
По результату (у меня параметры выводятся в результирующий табличный документ, по их значениям и смотрел) Выкрутился через подключение внешнего отчета к подсистеме "Варианты отчетов" - ребята из БСП в этом случае предусмотрели возможность вызова некоторых обработчиков модуля внешнего отчета из той самой общей формы (в которой отчет формируется в фоновом режиме). Естественно, серверного обработчика "ПриКомпоновкеРезультата" там возможности вызвать нет, но мне помог доступный обработчик "ПередЗагрузкойНастроекВКомпоновщик", где и переопределяю параметры нужным мне образом. Happy end.
Отчет СКД: отображение значений параметров на форме
Добрый день, устанавливаю значения параметров при открытии, но на форме колонки эти пустые.
Обычные формы, отчет на СКД - вывод параметров на форму
Обычная форма, делаю отчет на СКД. Задаю параметры , на форме размещаю Табличное поле - В его.
1с отчет СКД выбор данных в зависимости от значения логического параметра
Здравствуйте. Платформа 1С: Предприятие 8.3. Столкнулась с такой проблемой. Имеется отчет "Отчет.
Отчет СКД. Вывод нескольких таблиц в отчет из разных запросов.
Привет, коллеги! Возникла необходимость в одном отчете видеть 2 таблички: одну по продажам, другую.
А правильно делать - это в параметрах скд (ваш скрин) Вот там в выражениях и в доступных значениях настроить ваши значения параметров Попробуйте параметры устанавливать в модуле объекта в процедуре ПриКомпоновкеРезультата(). ситуация та же. параметры не заполняются. Что не так опять делаю? а почему стандартная обработка ложь?
просто вы задаёте своих параметров или чего хотите, а уж компоновщик и прочие штуки пусть оно делает так, как ему полагается.
хотя вероятно дело не в этом
jediAlex Устанавливаешь Ложь стандартной обработке, а работаешь только с Компоновщиком. Ну изменил компоновщик, а где макет, где процессор вывода? У тебя ничего не выполняется без этого. И если эти параметры в скд установлены как пользовательские, то устанавливает параметры не в Настройках, а в ПользовательскиеНастройки. Ну и еще раз, как минимум параметры дат можно попробовать выставить на закладке Параметы макета скд
Добавлено через 3 часа 50 минут
Вижу сложности. Вот нашел у себя пример. Мне нужно было перенести в нестандартную обработку пользовательские настройки (параметры и отбор), с просто настройками - по аналогии.
И потом Окончание периода что это?
В общем, установите правильно параметры в макете скд и все получится Куда и что ставить - пользуйтесь отладчиком и смотрите
ни разу не делал такой вывод отчета(программно) поэтому не пойму что и как делать в данном случае.
Добавлено через 4 минуты
ОкончаниеПериода - параметр, который задается пользователем и используется для расчета конца периода. Я пробовал без этого обойтись - сразу в условии запроса писал
.
Вот это правильно для моего варианта, неправильно для твоего
А вообще ставь точку останова и смотри значение КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, увидишь под каким индексом что стоитпопробовал, как вы посоветовали. Параметры дат присвоились, а массив подразделений - пустое значение. что не так с этим массивом?
Добавлено через 5 минут
ставил точку останова - при выполнении не останавливается
Функция ПодразделенияДляОтчета() что возвращает? Проверяли? Дайте код этой функции
Добавлено через 1 минуту
Где ставили точку останова? Сначала запускаете конфигуратор, из него запускаете программу (отладку). Есть подозрение что сделали наоборот
Читайте также: