Привет, Хабр! В одном из недавних проектов мне удалось поближе познакомиться с «Инструментами разработчика» (далее ИР). Это универсальный комплекс средств, который помогает решать широкий спектр задач, поставленных разработчику и администратору. 

Описание всего инструментария будет слишком объемной задачей – многие из них заслуживают отдельной статьи. 

Меня зовут Николай, я 1С-разработчик в SimbirSoft и хочу поделиться собственным опытом применения трех инструментов из набора, которые использую чаще всего: 

  • Консоль запросов;

  • Консоль компоновки;

  • Консоль кода. 

Я абсолютно уверен, что эти инструменты способны существенно облегчить жизнь разработчика. К примеру, значительно снизить время отладки, работая с большими и сложными запросами, которые в изобилии встречаются в типовых конфигурации компании 1С. Консоль запросов предлагает мощный арсенал средств по анализу запросов, делающих их отладку намного проще, чем использование других обработок, например, Консоли запросов от 1С. Материал будет полезен 1С-разработчикам уровня middle и тем, кто хочет знать о 1С-разработке больше.

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

Под толстым клиентом управляемого приложения гораздо больше шансов проработать без сбоев, но и тут в доработанных конфигурациях могут возникнуть проблемы. Как правило, ошибки в таком режиме связаны с несоблюдением стандартов 1С при разработке, а именно – код пишется без учета работы пользователей под толстым клиентом. Зачастую разработчики забывают добавлять инструкции препроцессора в Модуле менеджера и Модуле объекта у объектов метаданных конфигурации:

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

Если при работе с ИР под толстым клиентом управляемых форм вам встретились ошибки, связанные с вызовом экспортной процедуры общего модуля, скомпилированного без галки «Вызов сервера», то проблема скорее всего в отсутствующих инструкциях, указанных выше.

Установка не представляется сложной – можно запустить портативный вариант в виде набора внешних обработок. Работает только под обычными формами. Просто скачиваете архив с обработками, запускаете ирПортативные.epf.

В виде расширения – работает под управляемыми формами. Расширение можно установить, подключив непосредственно в базу или воспользовавшись установщиком расширения. 

Консоль кода

Консоль кода – достаточно простой инструмент разработчика. Он реализует идею, аналогичную интерактивному режиму ввода кода и проверки его исполнения, существующего в языке Python. Удобно, когда «на лету» можно проверить некоторый участок кода перед вставкой его в основную часть.

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

Другой вариант – это создать внешнюю обработку, добавить форму во внешнюю обработку, создать необходимые реквизиты, запустить обработку, проверить результат. 

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

Консоль кода – альтернативный вариант предыдущим двум:

Инструмент предоставляет среду разработки по написанию кода:

На скриншоте выше я постарался кратко указать самые интересные возможности. Консоль предоставляет множество дополнительных средств, улучшающих ваш код: рефакторинг, инструментарий для замера производительности. Также присутствует подсветка кода, есть синтакс-помощник:

Лично мне больше всего нравится возможность работать с переменными в коде (верхняя таблица). Удобно добавлять необходимые переменные, смотреть значения вычисленных переменных. 

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

Консоль компоновки данных и Консоль запросов

Консоль запросов, равно как и Консоль компоновки данных – одни из самых полезных и нужных инструментов в ИР, когда речь заходит об отладке, анализе запросов или отчетов на СКД (схеме компоновки данных). Когда мы говорим о простых запросах, необходимость в подобных механизмах может исчезнуть, но все меняется, когда запрос стремится превратиться из милого пушистого зверька в монстра (не кормите запросы после полуночи и не мочите водой :)

На этот случай пригодится тяжелая артиллерия в виде Консоли запросов!

Вот ее плюсы:

  • Получение запроса в Консоль запросов из отладчика в контексте,с использованием функции  ИрОбщий.ОтЛкс инструмента «Отладка ИС».

  • Получение макета компоновки данных в Консоль запросов из отладчика в контексте. 

  • Широкие возможности по анализу данных в Консоли запросов.

  • Возможность получения структуры анализируемого отчета в Консоли (временные таблицы, подзапросы).

  • Возможность просмотра данных по каждому элементу структуры отчета (временные таблицы, подзапросы).

  • Редактирование схемы компоновки и настроек компоновки данных в Консоли.

  • «Сборка» сложных запросов в Консоли.

Передача запроса из отладки в Консоль запросов

Одно из главных преимуществ Консоли запросов – это получение запроса в контексте исполнения со всеми переданными в него параметрами. При этом в отличие от Консоли запросов от компании 1С, в которой также возможно передать запрос из отладки, в параметры Консоли без проблем передаются все типы параметров (в том числе списки значений и таблицы). В Консоли запросов от 1С при попытке передать таблицу значений возникает ошибка. Напомню, как передается запрос в Консоль запросов 1С из режима отладки:

ТекстЗапросаXML = ОбщегоНазначения.ЗапросВСтрокуXML(Запрос) (конфигурация должна быть интегрирована с БСП). Далее полученный текст вставляем в Консоль запросов 1С:

Этот способ полезен, когда запрос сравнительно не сложный, но имеет ограничения.

Если в полученном XML-тексте будут типы параметров, которые Консоль не может обработать, появится ошибка, и часть параметров из XML-текста не будет передана. В Консоли запросов ИР этого нет, все параметры передаются без проблем. 

О том, как передать запрос из отладчика, и другие преимущества разберем на простом примере. Он не будет столь большим и страшным, как гремлин выше. Но об основных принципах работы и преимуществах я постараюсь подробно рассказать на примере передачи схемы компоновки данных отчета СКД из отладчика в Консоль запросов. 

В процедуре «ПриКомпоновкеРезультата» в режиме отладки остановимся на точке останова: 

Вызовем команду Вычислить выражение (SHIFT – F9). Воспользуемся функцией  ИрОбщий.ОтЛкс инструмента «Отладка ИС»:

Скопируем текст из колонки Значение, выполним команду инструмента разработчика: 

Нажимаем ОК.

В консоли откроется отлаживаемая схема компоновки данных:

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

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

ирОбщий.ОтЛкс(СхемаКомпоновкиДанных, Настройки,,,,"ЗапросСКД",МенеджерВТ)

Параметры:

СхемаКомпоновкиДанных – схема компоновки данных.

Настройки – настройки компоновки данных.

ЗапросСКД – уникальное имя для сохранения на диске получаемого значения (здесь макета компоновки данных). Имеет смысл указывать, если в настройках инструмента вы указали каталог сохранения. Рекомендую всегда указывать каталог сохранения, так как все сохраненные объекты отладки сохраняются в указанном каталоге: остается возможность загрузить объект заново.

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

Функция ИрОбщий.ОтЛкс – имеет универсальное значение, с помощью функции можно получить любое сериализуемое значение. Подробнее о параметрах и других полезных функций отладки можно посмотреть здесь:

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

Итак, мы получили схему компоновку данных. Теперь посмотрим, какие интересные возможности предоставляет нам Консоль:

Возможности консоли компоновки для отладки отчета

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

Довольно полезна возможность изменения схемы компоновки данных. Прямо из консоли можно поменять схему компоновки данных и посмотреть результат, обновив отчет.

Многие из представленных в обработке команд имеют аналоги в типовой Консоли компоновки данных, но в отличие от типовой Консоли, с помощью нашей рассматриваемой Консоли запросов можно исследовать сформированный СКД-запрос!

Перенос запроса макета компоновки данных в Консоль запросов для анализа

Очень часто при отладке отчета возникает необходимость в анализе запроса, который будет выполняться для получения данных из информационной базы. Консоль компоновки данных позволяет легко получить исполняемый запрос и исследовать его в контексте переданных параметров.

Перенести запрос из макета компоновки данных в Консоль запросов можно двумя способами (отмечены на рисунке выше). 

Способ №1. ЛК на Наборы данных. 

Способ №2. ЛК по кнопке Запросы. 

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

Воспользовавшись одним из способов, перенесемся в Консоль запросов для исследования запроса:

Анализ и отладка запроса в Консоли запросов

Команда Структура открывает структуру запроса со всеми входящими в него временными таблицами. В режиме структуры можно отдельно проанализировать каждый элемент запроса, а также изменить, переформировать, посмотреть результат по каждому из них.

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

Обратите внимание на команды контекстного меню, особенно хотелось бы отметить команды выполнения запросов и поиск зависимых от текущего выделенной таблицы запросов (Зависимые запросы). Когда запрос большой, состоит из большого числа временных таблиц, изменения во временных таблицах влияет на запросы вышестоящих. Точечно обновить их результаты помогают команды выполнения запросов:

Команды Обозначить зависимые запросы и Зависимые запросы помогают в навигации по большим запросам. Находясь на интересующем из них, можно посмотреть, где используется текущая временная таблица:

Средства анализа данных в консоли запросов

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

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

Перенос и изменение параметров в консоли запросов

Есть еще одна отличная особенность Консоли, которая пригодится, когда нужно собрать запрос из нескольких частей, где встречаются параметры типа таблицы значений, и необходимо вручную вносить данные для их заполнения. И это – возможность легко манипулировать параметрами (передавать параметры в запрос, сохранять в файл, загружать из файла, что избавляет от ручного ввода и экономит много времени). 

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

Останавливаемся в отладчике на нужной строке. Открываем окно «Вычислить выражение» и вычисляем выражение ирОбщий.ОтЛкс(Таблица,,,,,”тестовые данные”). Скопируем текст в колонке Значение. Далее переходим в пользовательский сеанс 1С и вызываем команду “Открыть объект для отладки” на панели инструментов Инструменты разработчика. Вставляем скопированное значение из окна вычислить «Вычислить выражение» и нажимаем ОК. В результате откроется окно «Исследователь объектов», в котором можно исследовать переданный в ИР объект, посмотреть содержимое значения. 

Перейдем к переносу таблицы в наш запрос. В Консоли запросов добавим параметр «Таблица» с типом Таблица значений и откроем значение, нажав лупу в колонке «Значение». Передадим таблицу значений в буфер обмена, как показано на втором скрине. Обратимся к нашей пустой таблице-параметру и выберем команду меню «из буфера обмена». Таблица заполнится переданным значением из буфера обмена (четвертый скрин).

Вставим текст запроса для временной таблицы в текст запроса.

UPD: Автор ИР@tormozitподсказал возможность генерации кода запроса из параметра запроса с типом Таблица значений. Чтобы текст запроса временной таблицы был сгенерирован автоматически, можно использовать команду на панели инструментов параметров. В текст запроса будет добавлен код запроса временной таблицы.

Вывод

Думаю, мне удалось показать, насколько полезным для 1С-разработчика может оказаться Консоль запросов и другие инструменты из набора ИР. Консоль кода помогает упростить отладку и написание кода, а Консоль компоновки совместно с Консолью запросов позволяют значительно упростить отладку особо сложных запросов и отчетов. 

Вот ряд их преимуществ:

  • Передача в Консоль запроса в контексте его исполнения. Это полезно, когда текст запроса «собирается» в коде, имеет большое количество параметров, заполнение которых, может оказаться очень трудоемким. В Консоли заботиться о передаче параметров отдельно не требуется. Существуют дополнительные удобные средства по передаче параметров, например, таблица значений в запрос;

  • Передача в Консоль скомпонованного для исполнения отчета. Можно сформировать отчет, проверить его настройки, выполнить его с измененной схемой компоновки данных или с измененными настройками. 

  • Возможность проанализировать запрос, который СКД с учетом всех оптимизаций и внутренней кухни приготовила к исполнению. Анализ получившегося запроса часто оказывается критически важным для понимания работы отчета. Известно, что запрос, который будет выполняться может сильно отличаться от того, что хранится в системе компоновки данных. 

  • Детальный анализ запроса, вплоть до разбора временных таблиц. Можно проанализировать время выполнения каждого структурного элемента запроса. 

  • Удобная навигация по структуре запроса, широкие возможности по анализу данных, получаемых в запросе на каждом этапе его исполнения. 

Итак, использование инструментов значительно сокращает время на отладку, особенно при отладке типовых запросов в конфигурациях 1С и разработке собственных сложных запросов. Удобная среда разработки, богатый инструментарий средств, а также сокращение времени отладки помогут качественно, быстро и эффективно делать свою работу. К тому же, ИР распространяется бесплатно и продолжает развиваться.

Спасибо за внимание!

Полезные материалы для web-разработчиков мы также публикуем в наших соцсетях – ВК и Telegram.

Комментарии (8)


  1. vis_inet
    19.05.2023 07:03

    Спасибо, очень интересно было прочитать такой подробный разбор этих инструментов.


  1. E_Pirozhkov
    19.05.2023 07:03

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


  1. GenAcid
    19.05.2023 07:03

    Отличные инструменты. Плюсы перекрывают единственный минус, по режиму запуска, с головой.


  1. tormozit
    19.05.2023 07:03

    Молодец. Видно, что старался. Доволен тобой.


  1. tormozit
    19.05.2023 07:03
    +1

    "Вставим текст запроса для временной таблицы в текст запроса"
    Можно не писать этот текст руками, а вставить кнопкой


    1. SSul Автор
      19.05.2023 07:03

      Спасибо за оценку и дополнение! Добавили его в материал


  1. tormozit
    19.05.2023 07:03
    +2

    Передачу менеджера временных таблиц при передаче запросов макета компоновки добавлю https://www.hostedredmine.com/issues/963842
    Но лучше конечно создавать заявку на доработку в таких случаях самостоятельно.


  1. tormozit
    19.05.2023 07:03
    +1

    По переносу запросов компоновки есть важное замечание. В статье указано:
    "Способ №1. ЛК на Наборы данных. 
    Способ №2. ЛК по кнопке Запросы."
    Поясню важное отличие межу этими способами.

    Способ №1 - передача запроса схемы на редактирование в консоль запросов. Т.е. этот запрос является первичным и не содержит каких либо модификаций, накладываемых настройками компоновки.

    Способ №2 - передача запросов макета на отладку в консоль запросов. Т.е. эти запросы являются финальными (исполняемыми) и содержат модификации, накладываемые настройками компоновки. Этот способ не подразумевает возвращения изменения запроса из консоли запросов в консоль компоновки.