Отладка с использованием расширений



Использование механизма расширений для расширения (как бы это коряво не звучало =) ) возможностей отладки.
Тестировалось на релизе: 8.3.14.1694 (но взлетит и на более ранних, поддержку общих модулей в расширения добавили практически в первых версиях механизма расширения).

Не так давно столкнулся с задачей, для решения которой стандартного функционала отладки оказалось недостаточно.

Некорректно формировалась печатная форма отчета, и нужно было понять, на каком этапе происходит "порча" макета. 

Макет отчета хранился в ХЗ (Хранилище значений), среди множества других. Вызов в отладчике Макет.Записать("C:/temp/1.mxl") ожидаемо сообщил, что я обращаюсь к процедуре как к функции, и ничего у меня не получится. Можно было бы написать обработку, которая получала бы макет так же, как это делает оригинальная процедура отчета, но для этого пришлось бы перелопатить эту процедуру, выделяя нужный код, а кроме того, результат был бы "на один раз", т.е. для следующей аналогичной задачи пришлось бы все делать с начала. Можно было бы снять конфигурацию с поддержки, внести в код изменения, которые выполняли бы требуемые действия. Но зачем? Есть куда более удобный и гораздо менее затратный по времени прием.

  1. Создаем новое расширение. Настройки значения не имеют, но я по привычке снимаю флаги "Безопасный режим" и "Защита от опасных действий". 
  2. В расширении добавляем новый Общий модуль, в котором создаем экспортную функцию, которая в качестве параметров принимает Таблицу, которую требуется сохранить, и путь, по которому это нужно сделать: 
    Функция СохранитьТабличныйДокументВФайл(ТабличныйДокумент, ИмяФайла) Экспорт
    
    ТабличныйДокумент.Записать(ИмяФайла);
    Возврат 0;
    
    КонецФункции
    

     

  3. После сохранения конфигурации и перезапуска отладки ловим момент, когда алгоритм получил нужный нам макет, после чего в Табло пишем вызов нашей функции: НашОбщийМодуль.СохранитьТабличныйДокументВФайл(Макет, "C:/temp/1.mxl"). 
  4. В нужной папке получаем сохраненный макет, который можно открыть и проверить, что же в действительности хранится в нашем ХЗ.

В моем случае дальнейшая отладка не понадобилась, т.к. проблема была именно в хранимом макете.

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

Еще одним преимуществом предложенного решения является возможность его применения на боевых базах. После добавления расширения пользователи получат сообщения о необходимости перезайти в базу, но даже если они этого не сделают — работа приложения никак не нарушится. 

Пример в приложении, но качать смысла особого не вижу, все подробно расписано. В перспективе маячит создание некоего "Инструментария", который позволял бы существенно расширить возможности как отладки, так и разработки в целом, но таких продуктов уже целый зоопарк, поэтому не известно, дойдут ли до этого руки. В любом случае, если это вдруг произойдет, то на ИС появится отдельная статья =)

С Уважением 😉

2 Comments

  1. AlX0id

    ЗначениеВСтрокуВнутр(ХЗ) — и строку копипастишь в инструменты разработчика, а дальше уже препарируешь как хошь..

    Reply
  2. Ксакеп

    (1) Век живи — век учись =) Спасибо за науку.

    Reply

Leave a Comment

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