Изменение данных среды выполнения «на лету» в процессе отладки с помощью внешней обработки

14.02.14

Разработка - Универсальные функции

Иногда бывают такие моменты, что при остановке во время отладки необходимо «на лету» поменять какое-то значение реквизита или переменной. Или даже выполнить какой-то совершенно посторонний кусок кода в то время пока программа стоит на точке.

Осуществить это желание довольно просто.

Достаточно создать внешнюю обработку(можно даже без формы) и в модуле объекта прописать вот такую экспортную(это обязательно!) функцию:

 

Функция ИсполнитьКод(ТекстКода, Параметр="",Ответ="ОК") Экспорт
    Попытка
        Выполнить(ТекстКода);
    Исключение
        Ответ= «!!!Ошибка выполнения внешнего кода!!!...»+ОписаниеОшибки();
    КонецПопытки;
    Возврат Ответ;
КонецФункции 

 

По принимаемым параметрам:

 

  1. ТекстКода. – тут все понятно. Это произвольный текст на встроенном языке, желательно без синтаксических и логических ошибок : - ).В случае ошибки получите в возврате текст  ««!!!Ошибка выполнения внешнего кода!!!...»» и т.д.
  1. Параметр. – сюда можете передавать всякие всякости, доступные в текущем контексте, над которыми нужно поиздеваться и менять их значения пока стоит точка останова.
  2. Ответ. – По умолчанию равен «ОК» и если все прошло штатно и ничего не надо было возвращать для «посмотреть»  в табло, то «ОК» и  вернется при вызове. В случае ошибки - см. выше.

Теперь собственно сам главный финт ушами – как этим безобразием пользоваться.

 

Создадим внешнюю обработку с вышеуказанной процедурой и сохраним ее скажем вот так:

«E:\execute.epf»

Когда сработала точка останова, в табло пишем вызов с произвольной строкой кода.

Допустим вот такое традиционное:

 

ВнешниеОбработки.Создать("E:\execute.epf").Исполнить("Ответ=""Hello, world!""")


Имеем вот такой результат:

Т.е. функция, выполняя ваш посланный код, присвоила переменной Ответ строку «Hello, world!» и отправила вам же обратно в возврате. На этом примере понятен принцип: если хотим увидеть какой-то результат в табло при вызове функции, то надо в передаваемом коде присвоить переменной Ответ его значение. Оно вернется как результат выполнения функции и отобразится в табло. Если ничего не будем присваивать переменной Ответ, то при успешном выполнении вернется «ОК»

 Поле применения этого метода довольно широкое.

Допустим вас не устраивает текущее значение реквизита документа, которое приводит в последствии к ошибке.

 Тогда просто передаем в параметр текущий документ объект и в обработке над ним издеваемся, как хотим.

 

Предположим мы хотим поменять дату объекта документ в момент отладки.

Пишем в табло:

 

ВнешниеОбработки.Создать("E:\execute.epf").Исполнить("Параметр.Дата ='20131231235959'",ЭтотОбъект)

 

Видим результат ДО

и ПОСЛЕ (Для отображения нового значения даты надо "перещелкнуть" сроку с ЭтотОбъект.Дата)

 

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

Вот такие пироги с котятами.: -)

Надеюсь кому-то это будет интересным и полезным.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5460    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    46470    dimanich70    83    

165

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6872    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57576    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    8644    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    22832    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ksvd 13.02.14 13:11 Сейчас в теме
Кавычки надо поменять на "
в
Ответ= «!!!Ошибка выполнения внешнего кода!!!...»+ОписаниеОшибки();

А для какой это конфигурации?
У меня в табло пишет:
{(1,1)}: Переменная не определена (ВнешниеОбработки)
Рэйв; +1 Ответить
3. Franco 84 13.02.14 15:12 Сейчас в теме
(1) ksvd, Для выполнения на сервере

Глобальный контекст (Global context)
ВнешниеОбработки (ExternalDataProcessors)
Использование:

Только чтение.
Описание:

Тип: ВнешниеОбработкиМенеджер.
Используется для доступа к внешним обработкам.

Доступность:

Сервер, толстый клиент, внешнее соединение.
2. Franco 84 13.02.14 15:10 Сейчас в теме
(0)
Ошибся, наверное, в
ВнешниеОбработки.Создать("E:\execute.epf").Исполнить("Параметр.Дата ='20132131235959'",ЭтотОбъект)
20132131235959
21-ый месяц 2013-го года.
За идею спасибо!
Рэйв; +1 Ответить
4. ksvd 13.02.14 16:06 Сейчас в теме
Понял, выполнять только под толстым клиентом. Жалко.
И название функции в обработке тогда уже не ИсполнитьКод, а Исполнить
5. artbear 1583 19.02.14 10:56 Сейчас в теме
(0) Давно известный прием.
Например, автор "Инструментов разработчика" кучу лет назад выкладывал свою статью об этом
Для отправки сообщения требуется регистрация/авторизация