Имя: Пароль:
1C
 
СкомпоноватьРезультат не вызывает ПриКомпоновкеРезультата
0 novichok79
 
21.09.17
09:14
Доброго времени суток, уважаемые воены 1С и светочи мудрости.
Сделал внешний отчет для УТ 11.3, в некоторых случаях не заполняются параметры отчета, при нажатии на кнопку "Сформировать", формы отчета, настроек и т д - общие, типовые. При формировании отчета вызывается фоновое задание, которое в конечном итоге компонует полученный отчет функцией "СкомпоноватьРезультат". Но вот беда, событие ПриКомпоновкеРезультата не срабатывает в отладчике (автоматическое подключение фоновых заданий подключено в конфигураторе). Вопрос к собравшимся - что я делаю не так? Заранее благодарю за ответы.
1 novichok79
 
21.09.17
09:15
кусок модуля, если кому интересно

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
    
#Область СлужебныеПроцедурыИФункции

Функция СведенияОВнешнейОбработке() Экспорт
    
    Перем ПараметрыРегистрации;
    
    Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
        
        МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
        МодульДополнительныеОтчетыИОбработкиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиентСервер");

        ПараметрыРегистрации = МодульДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.1.3.1");
        
        ПараметрыРегистрации.Вид = МодульДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
        ПараметрыРегистрации.Версия = "2017.08.17";
        ПараметрыРегистрации.БезопасныйРежим = Ложь;
        
        НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
        НоваяКоманда.Представление = ЭтотОбъект.Метаданные().Представление();
        НоваяКоманда.Идентификатор = "ОткрытьОтчет";
        НоваяКоманда.Использование = МодульДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
        НоваяКоманда.ПоказыватьОповещение = Ложь;

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

    КонецЕсли;
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

#КонецОбласти

#Область ОбработчикиСобытий

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    ПользовательскиеНастройкиМодифицированы = Ложь;

    УстановитьОбязательныеНастройки(ПользовательскиеНастройкиМодифицированы);

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

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

    // Сообщим форме отчета, что настройки модифицированы
    Если ПользовательскиеНастройкиМодифицированы Тогда
        
        КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ПользовательскиеНастройкиМодифицированы", Истина);
        
    КонецЕсли;
    
КонецПроцедуры

#КонецОбласти

#КонецЕсли
2 novichok79
 
21.09.17
09:38
ай да в топ.
3 novichok79
 
21.09.17
10:26
(0) переименовал внешний отчет, отчет находит параметры, но не заходит в процедуру. что за чертовщина, КАРЛ??!!
4 Вафель
 
21.09.17
10:26
а вообще на сервер заход в отладке?
5 novichok79
 
21.09.17
10:29
(4) конечно, да.
6 novichok79
 
21.09.17
10:36
(4) до переименования видимо заходило каким-то образом в процедуру ПриКомпоновке, но место ошибки не совпадало с реальной строкой в измененном модуле, переименовал отчет, заработало. но в процедуру все равно не заходит. кэш?
7 novichok79
 
21.09.17
10:46
только Вывести вызывается не в 91-ой, а в 93-й строке обработчика ПриКомпоновкеРезультата, сей косяк был исправлен вызовом установки параметра "ИспользуетсяОтборПоСегментуПартнеров" в общем модуле СегментыСервер

из журнала регистрации:

{ОбщийМодуль.ВариантыОтчетов.Модуль(2075)}: Ошибка при вызове метода контекста (СкомпоноватьРезультат)
по причине:

по причине:
Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
{ВнешнийОтчет.КрутойОтчет.МодульОбъекта(91)}: Ошибка при вызове метода контекста (Вывести)
по причине:
Ошибка вывода результата
по причине:
Ошибка при выводе результата
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "ДанныеОтчета"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(79, 69)}: Не задано значение параметра "ИспользуетсяОтборПоСегментуПартнеров"
ОтборПоСегментуПартнеров.ИспользуетсяОтборПоСегментуПартнеров = <<?>>&ИспользуетсяОтборПоСегментуПартнеров)) = &П4
8 novichok79
 
21.09.17
10:48
соответственно, после переименования отчета все становится хорошо. поэтому и была мысль на кэш.
9 aleks_default
 
21.09.17
11:40
(0)У тебя кнопка "Сформировать" своя нарисована?
10 Вафель
 
21.09.17
11:40
(9) это не должно влиять
11 novichok79
 
21.09.17
12:48
(9) цитирую себя же: "формы отчета, настроек и т д - общие, типовые"
12 YAGolova
 
21.09.17
13:07
(11) Может все таки дело в отладчике - не ловит фоновое задание. Я в таких случаях чтобы точно убедиться в модуле пишу матерное слово - если все таки зашел, то программа сругнется)
Ошибка? Это не ошибка, это системная функция.