Динамическое изменение переменных во время отладки.


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

На самом деле идея, я так подозреваю, не новая, так что, сорри, если повторяюсь Cool

А заключается она в следующем. Есть такой замечательный оператор - Выполнить().

Создаём обработку, в которой пишем экспортную функцию, которая возвращает нам что-то (на самом деле неважно что):

//************************************************************

Функция ВыполнитьКод(ТекстКода, П1 = "", П2 = "", П3 = "") Экспорт

Попытка
Выполнить(ТекстКода);
Исключение
Возврат ОписаниеОшибки()
КонецПопытки;

Возврат Истина;

КонецФункции

//************************************************************

И помимо всего прочего, выполняет текст кода, который мы ей передали.

 

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

Например, если во время выполнения следубщего участка кода:

 

Перем1 = 1;

Перем2 = 3;

Сообщить(Перем1 + Перем2);

 

поставим точку останова на последней строке, вызовем "Вычислить выражение", передадим туда строку:

ВнешниеОбработки.Создать("D:\ВыполнитьКод.epf").ВыполнитьКод("П1 = 2", Перем2)

 

В результате в окне сообщения у нас появится "3" вместо "4".

Для удобства можно эту функцию написать в модуле приложения.

 

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

Файлы обработки:

-