новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Некоторые приемы отладки

  • Добавить свою публикацию
  • для этого требуется регистрация

Тема обсуждалась и не раз, но добавлю свои методы, которые не нашел в предыдущих публикациях, либо они описывались но не в явном виде.

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

МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

ОпределитьСчетаУчета(МенеджерВременныхТаблиц);

РассчитатьНачальноеСальдо(МенеджерВременныхТаблиц);

...

Результат = ВычислитьРезультат(МенеджерВременныхТаблиц);

 Таким образом в процессе отладки в какой-то момент достаточно сложно определить на основании каких данных мы получаетм соответствующий результат, и было бы достаточно удобно посмотреть все этапы расчета, а именно получить результаты промежуточных запросов из временных таблиц.

 Ок, достаточно для вступления, далее текст модуля внешней обработки, которую я использую для получения соответствующих данных:

 Функция ПолучитьДанныеВременнойТаблицыИзМенеджераВТ(имяТаблицы, менеджерВременныхТаблиц) Экспорт
    запрос = Новый Запрос("ВЫБРАТЬ * ИЗ " + имяТаблицы + " КАК Таб");
    запрос.МенеджерВременныхТаблиц = менеджерВременныхТаблиц;
    Возврат запрос.Выполнить().Выгрузить();
КонецФункции
    
Функция ПолучитьДанныеВременнойТаблицыИзЗапроса(имяТаблицы, оригЗапрос) Экспорт
    Если оригЗапрос.МенеджерВременныхТаблиц <> Неопределено Тогда
        Возврат ПолучитьДанныеВременнойТаблицыИзМенеджераВТ(имяТаблицы, оригЗапрос.МенеджерВременныхТаблиц);
    КонецЕсли;
    запрос = Новый Запрос;
    запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    запрос.Текст = оригЗапрос.Текст + "; " + "ВЫБРАТЬ * ИЗ " + имяТаблицы + " КАК Таб";
    Сообщить(запрос.Текст);
    Для каждого параметр Из оригЗапрос.Параметры Цикл
        запрос.УстановитьПараметр(параметр.Ключ, параметр.Значение);
    КонецЦикла;
    Возврат запрос.Выполнить().Выгрузить();
КонецФункции

Первый метод позволяет получить данные с использованием соответствующего менеджера запроса. Второй - с использованием непосредственно запроса,  причем этот метод можно вызывать еще до выполнения запроса.

 

 Далее, как использовать это в отладчике. Я поместил данные методы в модуль внешней обработки и вместе с ней храню строки для подстановки в табло отладчика:

ВнешниеОбработки.Создать("Путь\До\Обработки\ПомощникиОтладки.epf").ПолучитьДанныеВременнойТаблицыИзМенеджераВТ("ИмяВременнойТаблицы", МенеджерВременныхТаблиц);
ВнешниеОбработки.Создать("Путь\До\Обработки\ПомощникиОтладки.epf").ПолучитьДанныеВременнойТаблицыИзЗапроса("ИмяВременнойТаблиц", Запрос);

И все что мне остается сделать в нужный момент отладки - это подставить, соответствующие значения в параметрах вызова, и далее просмотреть результат соответствующей временной таблицы

 

На этом все, удачной отладки)

 
0
≡ к списку статей