Пятница, 11.10.2024, 15:33
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Ошибка От() при втором вызове (создание ИР из кода)
elkhovacДата: Четверг, 13.10.2022, 11:05 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 11
Репутация: 4
Статус: Оффлайн

Порядок воспроизведения: 
При компоновки отчета Создаём внешнюю обработку, потом последовательно вызываем функцию От(), передаём в неё Схему компоновки и потом Макет компоновки (порядок не важен).
Получившийся код:
Код
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
   
   СтандартнаяОбработка = Ложь;
   
   ДокументРезультат.Очистить();
   
   НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
   
   ФайлИР = "C:\Users\Елхов\Downloads\ИНСТРУМЕНТЫ РАЗРАБОТЧИКА ПОРТАТИВНЫЙ 1С 8.2+ V6.48.1P\ирПортативный.epf";
   ИР = ВнешниеОбработки.Создать(ФайлИР, Ложь);
   ИР.От(СхемаКомпоновкиДанных);
   ИР.От(МакетКомпоновки);
   
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
   ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
   
КонецПроцедуры


На второй попытке отладить выходит ошибка:

Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
Значение не является значением объектного типа (ЛиПортативныйРежимЛкс)
{ВнешняяОбработка.ирОбщий.МодульОбъекта(480)}:Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда
{ВнешняяОбработка.ирОбщий.МодульОбъекта(792)}:Результат = ОтладитьЛкс(Объект, Истина, Объект2, ВнешниеНаборыДанных, ОтложеннаяОтладка, ПорогОбрезкиВременнойТаблицы,, Наименование, МенеджерВременныхТаблиц);
{ВнешняяОбработка.ирПортативный.МодульОбъекта(911)}:Результат = ирОбщий.ОтЛкс(Объект, Объект2, ВнешниеНаборыДанных, ОтложеннаяОтладка, ПорогОбрезкиВременнойТаблицы, Наименование, МенеджерВременныхТаблиц);
{Отчет.Отчет1.МодульОбъекта(16)}:ИР.От(МакетКомпоновки);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

Если создавать 2 обработки на каждый вызов, то объекты для отладки сохраняются успешно

Код
ВнешниеОбработки.Создать(ФайлИР, Ложь).От(СхемаКомпоновкиДанных);
ВнешниеОбработки.Создать(ФайлИР, Ложь).От(МакетКомпоновки);

Вроде нигде не задокументировано, что при создании внешней обработки функции режима отладки можно вызывать только один раз. smile
Прикрепления: 6767457.png (30.5 Kb)
 
tormozitДата: Суббота, 15.10.2022, 00:23 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 6388
Репутация: 165
Статус: Оффлайн
Вызов отладочных функций из модуля ирПортативный является одноразовым, т.е. в конце выполнения функции вызывается Деструктор() (уничтожение) большинства связанных модулей в памяти. Поэтому повторное использование такого объекта не предусмотрено, хотя и может работать в некоторых случаях.

Исправлять это не планирую. Нужно либо каждый раз создавать новый экземпляр объекта внешней обработки либо переходить на вариант "Расширение".
 
  • Страница 1 из 1
  • 1
Поиск: