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

10.06.22

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Точка останова с условием. Приёмы и хитрости использования.:
.zip 62,97Kb ver:1
2
2 Скачать (1 SM) Купить за 1 850 руб.

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)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    8337    bayselonarrend    20    

156

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

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

13.03.2024    6404    dsdred    18    

80

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

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

24.01.2024    19671    YA_418728146    26    

72

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

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

06.10.2023    24322    SeiOkami    48    

135

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

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

28.08.2023    15393    YA_418728146    7    

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

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

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

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

Где отсутствует? Платформа умеет это. Поэтому свою функцию писать не надо.
Ну а указывать в качестве недостатка непонятное имя функции - это немного другой уровень восприятия. Я же не запрещаю ее переименовывать. Короткое оно потому, что длина имеет высокую цену. Оригинальную функцию из ИР указал специально, чтобы знакомым с ИР пользователям было проще понять смысл.
7. Cyberhawk 135 20.06.22 07:46 Сейчас в теме
(5)
длина имеет высокую цену
Речь об удобстве сопровождения / разработки (для автора ИР)? Или о каких-то технических особенностях платформы?
8. tormozit 7238 20.06.22 08:34 Сейчас в теме
(7) Я писал: "редактор условия точки останова не позволяет вводить более 255 символов". К тому же каждый раз писать руками без автодополнения/подсказки короткие имена функций в редакторе выражения намного удобнее, чем красивые но длинные.
12. Serg2000mr 740 27.06.24 16:13 Сейчас в теме
(2) Можно вообще сочетать функцию конфигурации и код внешней обработки, т.к. в строке редактора точки отладки писать код довольно неудобно. Функция конфигурации будет обращаться к внешней обработке, в которой можно динамически менять содержимое экспортной функции.
13. redtram 53 23.09.24 20:17 Сейчас в теме
(2) в типовых нет аналога?
14. Serg2000mr 740 24.09.24 19:41 Сейчас в теме
(13) В типовых нет. У меня в персональном расширении есть общий модуль Мое (Клиент, Сервер, Вызов сервера) с функциями
&НаКлиенте
Функция ВнешнийКодКлиент(П=Неопределено, П1=Неопределено,  П2=Неопределено, П3=Неопределено, П4=Неопределено, П5=Неопределено) Экспорт
	
	Если Не ПользователиКлиент.ЭтоПолноправныйПользователь() Тогда
		Сообщить("Недостаточно прав");
		Возврат Неопределено;
	КонецЕсли;
	
	Если ТипЗнч(П) = Тип("ФормаКлиентскогоПриложения") Тогда
		Контекст = П;
	Иначе
		Контекст = Неопределено;
	КонецЕсли;
	
	ПутьКФайлу = "c:\Users\User1\Downloads\Отладка.epf";
	ИмяОбработки = ПодключитьВнешнююОбработкуНаСервере(ПутьКФайлу);
	ФормаОбработки = ПолучитьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма.Форма",
		,
		Контекст,
		Новый УникальныйИдентификатор);
		
	Результат = ФормаОбработки.Клиентская(П, П1, П2, П3, П4); //экспортная функция модуля формы
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция ВнешнийКодСервер(П = Неопределено, П1 = Неопределено,  П2 = Неопределено, П3 = Неопределено, П4 = Неопределено, П5=Неопределено) Экспорт
	
	Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Недостаточно прав");
		Возврат "Недостаточно прав";
	КонецЕсли;
	
	ПутьКФайлу = "c:\Users\User1\Downloads\Отладка.epf";
	Обработка = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
	
	Результат = Обработка.Серверная(П, П1, П2, П3, П4); //экспортная функция модуля формы
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция ПодключитьВнешнююОбработкуНаСервере(ПутьКФайлу) Экспорт
	
	Обр = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
	
	Возврат Обр.Метаданные().Имя;
	
КонецФункции
Показать


В нужном месте конфигурации вставляю вызов Мое.ВнешнийКодКлиент(Парам1) или Мое.ВнешнийКодСервер(Парам1)
Прикрепленные файлы:
Отладка.epf
4. Lancelot-2M 115 14.06.22 23:53 Сейчас в теме
Есть тут на инфостарте обработка Запросник2_0 и уже давно - всем советую.
Там эта тема юзается для дампа запроса: пишем Обработки. Запросник2_0.Создать().Дамп(Запрос) и разрешаем выполняться коду дальше. А в предприятии открываем запросник и жмём загрузить дамп. И вот у вас текст запроса, параметры-таблицы значений и временные таблицы в наличии - только отлаживай.
Alex17; VitaliyCeban; +2 Ответить
6. tormozit 7238 15.06.22 00:00 Сейчас в теме
(4) Тут немного другая тема - синхронное автоматическое выполнение изменений переменных в заданной точке кода во время отладки без перезапуска программы. Такое бывает нужно, чтобы "на лету" немного изменить поведение программы на время отладки и только в отлаживаемом сеансе.
JohnyDeath; Onwardv; Bad_Aleks; +3 Ответить
9. sidekick6923 11.07.23 14:23 Сейчас в теме
Подскажите, пожалуйста, почему эти "подменные" функции должны возвращать Ложь?
10. Onwardv 66 12.07.23 11:41 Сейчас в теме
(9)...Для того, чтобы выполнение программы не останавливалось, функция должна возвращать Ложь....
Это не обязательное условие. Только если вы не хотите, чтобы выполнение программы останавливалось на этой точке.
11. NeSPEC 52 30.11.23 13:25 Сейчас в теме
Проверил на сервере ( linux ) "КА2 (2.5.8.378)" , сервер "1С:Предприятие 8.3 (8.3.21.1709)" - отлично работает.
Автору однозначно - респект, идею может реально помочь в работе.
Оставьте свое сообщение