10 июня 2022
В 1С есть очень мощный инструмент “Точка останова с условием“. При установки такой точки необходимо указать условие, и если результатом вычисления этого условия будет Истина, то отладчик остановится на этой строке. Если же нет, то не остановится. В условии можно использовать выражение на встроенном языке 1С. Вызов экспортной функции внешней обработки как раз и является выражением языка 1С. Отсюда имеем возможность много чего сделать не меняя основную конфигурацию.
Для этих целей надо завести внешнюю обработку, у меня она называется “Отладка“.
Есть пара важных моментов:
-
Внешняя обработка должна быть доступна серверу отладки. Если сервер находится на другом компьютере, то Вам для комфортной работы необходима папка с общим доступом, доступная и Вам и тому пользователю, от которого запущен сервер.
-
Также точку останова с условием нужно ставить только на строку с кодом. На пустом месте поставить можно, но она не сработает, по крайней мере в платформе 8.3.20.1363.
-
Для того, чтобы выполнение программы не останавливалось, функция должна возвращать Ложь.
Удобным оказалось в первой строке модуля внешней обработки прописать закомментированную строку с полным путем для вызова своей обработки. Остается только копировать - вставить.
Смотрите скрин ниже:
Сделана внешняя обработка “Отладка.epf“ с экспортной процедурой “Проверка“. Создан справочник “Номенклатура“ и форма элемента. . В процедуре формы элемента справочника выставлена точка останова с условием. Также видно и результат открытия формы с сообщением из функции обработки.
В каких случаях имеет смысл использовать точку останова с условием.
В больших и сложных системах довольно много времени можно потратить на поиск или создание подходящего тестового примера.
Используя точку останова с условием можно существенно сократить затраты времени на эту работу.
При работе с хранилищем нужный объект может быть захвачен, а необходимо срочно что-то проверить или найти причину сбоя.
Нет риска забыть удалить отладочный код и оставить его в конфигурации.
При включенной отладке на рабочей базе можно столкнуться с уникальным случаем, когда пришел клиент, готов отдать вам деньги, а случай не предусмотрен алгоритмами и документ не проводится. И точка останова с условием может помочь не упустить ценного клиента конкурентам.
Рассмотрим парочку примеров более подробно.
Пример 1. Доступность и видимость элементов.
Довольно часто при отладке нужно изменить видимость/доступность элементов формы.
Например, на скрине ниже, программно сделана недоступной кнопка “Кнопка_ОбычноНедоступная“ и невидимым элемент "БазоваяЕдиницаИзмерения":
Конечно, если один-два элемента и разово, то быстрее сделать через обычную точку останова и через окно “Вычислить выражение… (SHIFT+F9)“, а там выбрав “Установить новое значение в виде выражения“ задать новое значение и нажать кнопку “Установить“. См.скрин:
Но если элементов много или необходимо изменить свойство множество раз, то это довольно утомительно. Удобнее использовать точку останова с условием и экспортную функцию внешней обработки. В эту функцию передать элементы, а там в пару строк кода изменить значения свойств на нужные. На скрине ниже кнопка делается доступной и базовая единица измерения видимой. Программа продолжает выполнение, т.к. функция возвращает ЛОЖЬ:
Здесь в процедуре формы элемента справочника “ПриСозданииНаСервере()“ на строке “КонецПроцедуры“ установлена точка останова с условием. Выражение условия останова:
ВнешниеОбработки.Создать("D:\VVK\отладка.epf").Пример1_ВидимостьДоступность(Элементы)
А во внешней обработке сделана экспортная функция “Пример1_ВидимостьДоступность“, принимающая в качестве параметра элементы формы. Полный текст функции для Копировать/Вставить:
Функция Пример1_ВидимостьДоступность(Элементы) Экспорт
Элементы.Кнопка_ОбычноНедоступная.Доступность = Истина;
Элементы.БазоваяЕдиницаИзмерения.Видимость = Истина;
Возврат Ложь;
КонецФункции
Пример 2. Изменение текста запроса.
Таким же способом можно существенно сократить время выполнения тяжелого запроса, оставив только те данные, которые Вам нужны в данный момент, “на лету“ изменив текст запроса.
Текст запроса может собираться программно, в таком случае в режиме отладки можно добраться до оператора, когда текст запроса сформировался. Получить его из Shift+F9, → F2, скопировать. См скрин:
Затем вставить в экспортную функцию внешней обработки, а там уже комфортно в конструкторе запроса изучить и изменить как надо. Как только функция будет готова, сохраните внешнюю обработку, затем установите точку останова с условием, в выражении условия которого пропишите вызов своей функции. Если Вы сделали всё правильно, то сработает уже измененный текст запроса.
См.скрин слева направо, важные моменты обведены красным:
Обратите внимание, что сначала выполняется выражение условия точки останова, а затем та строчка кода, на которой она установлена
Здесь, выражение условия:
ВнешниеОбработки.Создать("D:\VVK\отладка.epf").Пример2_ИзменениеТекстаЗапроса(ТяжелыйЗапрос)
В экспортной функции внешней обработки в тексте запроса добавлено условие “ГДЕ“ для временной таблицы. Полный код функции:
Функция Пример2_ИзменениеТекстаЗапроса(Запрос) Экспорт
Запрос.Текст ="ВЫБРАТЬ
| ТЗ.Номер КАК Номер
|ПОМЕСТИТЬ ВТ_ТЗ
|ИЗ
| &ТЗ_Пример КАК ТЗ
|ГДЕ
| ТЗ.Номер В (33, 500, 721)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ТЗ.Номер КАК Номер
|ИЗ
| ВТ_ТЗ КАК ВТ_ТЗ";
Возврат Ложь;
КонецФункции
Самое правое выделение на скрине: режим предприятия, 2 результата нажатия на кнопку “Показать количество строк“ в обработке “ВажнаяОбработка“ приложенной к статье конфигурации. Первый раз без изменения “на лету“ текста запроса, второй - с изменением.
И ещё раз напомню: текст запроса конфигурации не изменен. Можно же текст запроса изменить непосредственно в конфигурации и всё отлично отладить, но забыть подчистить за собой.
Заключение
Думаю, понятно более-менее.
Не пугайтесь следующих окошек безопасности:
и
Это тоже “лечится”, при желании.
К статье приложен архив с выгрузкой информационной базы, конфигурацией и внешней обработкой. Делалось на платформе 8.3.20.1363, хотя всё, что описал, работало ещё на платформе 8.2 и на толстых формах.