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

10.06.22

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

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

Скачать исходный код

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

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 и на толстых формах.

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

См. также

Сервисы интеграции без Шины и интеграции

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

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    2694    dsdred    16    

59

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

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

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    6225    dsdred    59    

86

Как готовить и есть массивы

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

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

24.01.2024    6108    YA_418728146    25    

68

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    7167    dsdred    36    

114

1С-ная магия

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

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

06.10.2023    19285    SeiOkami    46    

119

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

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

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

14.09.2023    12998    human_new    27    

76

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

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

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

28.08.2023    9602    YA_418728146    6    

143

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

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

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

20.08.2023    6596    sebekerga    54    

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

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

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

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

Где отсутствует? Платформа умеет это. Поэтому свою функцию писать не надо.
Ну а указывать в качестве недостатка непонятное имя функции - это немного другой уровень восприятия. Я же не запрещаю ее переименовывать. Короткое оно потому, что длина имеет высокую цену. Оригинальную функцию из ИР указал специально, чтобы знакомым с ИР пользователям было проще понять смысл.
7. Cyberhawk 135 20.06.22 07:46 Сейчас в теме
(5)
длина имеет высокую цену
Речь об удобстве сопровождения / разработки (для автора ИР)? Или о каких-то технических особенностях платформы?
8. tormozit 7144 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 7144 15.06.22 00:00 Сейчас в теме
(4) Тут немного другая тема - синхронное автоматическое выполнение изменений переменных в заданной точке кода во время отладки без перезапуска программы. Такое бывает нужно, чтобы "на лету" немного изменить поведение программы на время отладки и только в отлаживаемом сеансе.
JohnyDeath; Onwardv; Bad_Aleks; +3 Ответить
9. sidekick6923 11.07.23 14:23 Сейчас в теме
Подскажите, пожалуйста, почему эти "подменные" функции должны возвращать Ложь?
10. Onwardv 64 12.07.23 11:41 Сейчас в теме
(9)...Для того, чтобы выполнение программы не останавливалось, функция должна возвращать Ложь....
Это не обязательное условие. Только если вы не хотите, чтобы выполнение программы останавливалось на этой точке.
11. NeSPEC 45 30.11.23 13:25 Сейчас в теме
Проверил на сервере ( linux ) "КА2 (2.5.8.378)" , сервер "1С:Предприятие 8.3 (8.3.21.1709)" - отлично работает.
Автору однозначно - респект, идею может реально помочь в работе.
Оставьте свое сообщение