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

10.06.22

Разработка - Механизмы платформы 1С

“Точка останова с условием“ - применима в самых разнообразных ситуациях, и грамотное её применение экономит много времени разработчика 1С.

Скачать файлы

Наименование Файл Версия Размер
Точка останова с условием. Приёмы и хитрости использования.:
.zip 62,97Kb
0
.zip 1 62,97Kb Скачать

10 июня 2022

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

Для этих целей надо завести внешнюю обработку, у меня она называется “Отладка“.

Есть пара важных моментов:

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

  2. Также точку останова с условием нужно ставить только на строку с кодом. На пустом месте поставить можно, но она не сработает, по крайней мере в платформе 8.3.20.1363.

  3. Для того, чтобы выполнение программы не останавливалось, функция должна возвращать Ложь.

Удобным оказалось в первой строке модуля внешней обработки прописать закомментированную строку с полным путем для вызова своей обработки. Остается только копировать - вставить.

Смотрите скрин ниже:

 

 

Сделана внешняя обработка “Отладка.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 и на толстых формах.

отладка приемы разработка.

См. также

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    6065    human_new    19    

56

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    3025    YA_418728146    3    

84

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    3460    sebekerga    43    

76

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    8590    SeiOkami    24    

87

Методы работы с универсальным отчетом в подсистеме "Варианты отчетов" на БСП

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье рассмотрим типовую подсистему "Варианты отчетов" БСП на примере применения в универсальном отчете любой современной конфигурации.

30.05.2023    3474    quazare    4    

81

Расширение глобального поиска 1С, или Глобальный поиск "на максималках"

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мало кто знает, что поле "Глобального поиска" в 1С можно доработать. Добавить свои варианты поиска, кнопочки в результатах и даже целые пользовательские меню.

27.03.2023    5418    SeiOkami    10    

129

Версионирование объектов VS История данных

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    9947    dsdred    48    

142

Идентификатор объекта в запросе. Вы этого хотели?

Запросы Механизмы платформы 1С Платформа 1С v8.3 Запросы Бесплатно (free)

В платформе 8.3.22 появилась возможность получать идентификатор в запросе. Лично я ждал этого давно, но по итогу ждал большего. Что не так?

12.01.2023    21982    dsdred    24    

80
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. flimm 10.06.22 16:58 Сейчас в теме
Спасибо за статью
Bad_Aleks; morber; maksa2005; Onwardv; +4 Ответить
2. tormozit 7044 14.06.22 07:45 Сейчас в теме
Для выполнения простых присваиваний значений переменным можно не править каждый раз внешнюю обработку и не создавать ее объект из файла, что относительно долго выполняется и не всегда доступно на стороне сервера. Вместо этого можно использовать функцию конфигурации (есть в ИР)
Функция ПрЛкс(п1, п2 = Неопределено) Экспорт
	п1 = п2;
	Возврат п1;
КонецФункции

и написать в условии точки останова
""+ПрЛкс(Элементы.Кнопка_ОбычноНедоступная.Доступность,Истина)+ПрЛкс(Элементы.БазоваяЕдиницаИзмерения.Видимость,Истина)=1

Но надо помнить, что редактор условия точки останова не позволяет вводить более 255 символов.
Bad_Aleks; json; unknown181538; Onwardv; NeviD; Pavl0; pvl_mksv; +7 Ответить
3. Nikola23 683 14.06.22 16:57 Сейчас в теме
(2) Имхо, решение коллеги - проще.
Особенно радует, что название функции у него - это не сокращение неизвестных слов, а функция суммирования строки и булево со сравнением с числом - отсутствует.
* я понимаю что за код наворочен в инструментах и сам пользуюсь.
Но все же - выступаю за "понятность", а не за нечитаемые названия функций.

*давайте, напихайте мне минусов.
werium; Bad_Aleks; morber; Vyacheslide; +4 1 Ответить
5. tormozit 7044 14.06.22 23:55 Сейчас в теме
(3)
функция суммирования строки и булево со сравнением с числом - отсутствует

Где отсутствует? Платформа умеет это. Поэтому свою функцию писать не надо.
Ну а указывать в качестве недостатка непонятное имя функции - это немного другой уровень восприятия. Я же не запрещаю ее переименовывать. Короткое оно потому, что длина имеет высокую цену. Оригинальную функцию из ИР указал специально, чтобы знакомым с ИР пользователям было проще понять смысл.
7. Cyberhawk 134 20.06.22 07:46 Сейчас в теме
(5)
длина имеет высокую цену
Речь об удобстве сопровождения / разработки (для автора ИР)? Или о каких-то технических особенностях платформы?
8. tormozit 7044 20.06.22 08:34 Сейчас в теме
(7) Я писал: "редактор условия точки останова не позволяет вводить более 255 символов". К тому же каждый раз писать руками без автодополнения/подсказки короткие имена функций в редакторе выражения намного удобнее, чем красивые но длинные.
4. Lancelot-2M 115 14.06.22 23:53 Сейчас в теме
Есть тут на инфостарте обработка Запросник2_0 и уже давно - всем советую.
Там эта тема юзается для дампа запроса: пишем Обработки. Запросник2_0.Создать().Дамп(Запрос) и разрешаем выполняться коду дальше. А в предприятии открываем запросник и жмём загрузить дамп. И вот у вас текст запроса, параметры-таблицы значений и временные таблицы в наличии - только отлаживай.
Alex17; VitaliyCeban; +2 Ответить
6. tormozit 7044 15.06.22 00:00 Сейчас в теме
(4) Тут немного другая тема - синхронное автоматическое выполнение изменений переменных в заданной точке кода во время отладки без перезапуска программы. Такое бывает нужно, чтобы "на лету" немного изменить поведение программы на время отладки и только в отлаживаемом сеансе.
JohnyDeath; Onwardv; Bad_Aleks; +3 Ответить
9. sidekick6923 11.07.23 14:23 Сейчас в теме
Подскажите, пожалуйста, почему эти "подменные" функции должны возвращать Ложь?
10. Onwardv 61 12.07.23 11:41 Сейчас в теме
(9)...Для того, чтобы выполнение программы не останавливалось, функция должна возвращать Ложь....
Это не обязательное условие. Только если вы не хотите, чтобы выполнение программы останавливалось на этой точке.
Оставьте свое сообщение