Как отладить клиентские процедуры формы без перезапуска приложения 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки в среде «1С:Предприятие 8» одной из самых трудозатратных операций является постоянный перезапуск сеанса «1С:Предприятие» для проверки небольших изменений в клиентском коде. Особенно остро эта проблема стоит при работе на медленных серверах или через удаленный рабочий стол (RDP), когда запуск конфигуратора и клиента занимает значительное время. В данной статье мы подробно разберем, как можно оптимизировать этот процесс и выполнять отладку клиентских процедур максимально оперативно.

Метод 1. Использование формы во внешней обработке

Это самый популярный и эффективный способ среди опытных разработчиков. Если вам необходимо многократно править логику клиентских процедур (обработчики кнопок, проверки заполнения на клиенте), перенос формы во внешнюю обработку позволяет видеть изменения мгновенно при каждом новом открытии. Рассмотрим по шагам, как это реализовать:

  1. Выгрузка формы: Сохраните текущую форму (или весь объект) как внешнюю обработку (файл .epf).
  2. Подмена контекста: Чтобы форма внешней обработки работала с данными реального объекта из базы, в модуле внешней обработки или в коде её вызова нужно предусмотреть передачу данных. Проанализируем использование метода КопироватьДанныеФормы().
  3. Запуск: Вместо того чтобы открывать форму из состава конфигурации, вы открываете файл внешней обработки через «Файл — Открыть» или программно.

Разберем пример кода для открытия формы внешней обработки с передачей данных существующего объекта:


ПараметрыФормы = Новый Структура("Ключ", СсылкаНаОбъект);
ИмяВнешнейФормы = "ВнешняяОбработка.МояОтладка.Форма.ФормаОбъекта";
ОткрытьФорму(ИмяВнешнейФормы, ПараметрыФормы);

Преимущество этого метода: Вы можете менять код модуля формы во внешней обработке в конфигураторе, сохранять файл (Ctrl+S) и тут же заново открывать форму в работающем клиенте без перезапуска сеанса. 1С будет каждый раз считывать актуальный код из файла.

Метод 2. Правильное подключение отладчика к текущему сеансу

Иногда проблема заключается не в изменении кода, а в том, что отладчик «не видит» клиентские процедуры. Выясним причину: часто это происходит из-за того, что сеанс не подключен к отладке автоматически. Разберем, как подключиться вручную:

  1. В режиме «1С:Предприятие» перейдите в меню Сервис — Параметры (или Настройки — Параметры).
  2. На вкладке «Отладка» убедитесь, что установлен флаг «Отладка в текущем сеансе разрешена».
  3. В Конфигураторе выберите меню Отладка — Подключение....
  4. В списке доступных предметов отладки найдите свой клиентский сеанс (тип «Клиент») и нажмите «Подключить».

Теперь точки останова, установленные в клиентских процедурах &НаКлиенте, будут срабатывать корректно.

Метод 3. Использование консолей кода и «Инструментов разработчика»

Существуют специализированные инструменты (например, «Инструменты разработчика» С. Старых), которые позволяют выполнять произвольный код прямо в контексте запущенного приложения. Это имитирует функционал 1С 7.7, где код можно было интерпретировать «на лету».

Проанализируем ситуацию: вам нужно проверить, как сработает метод формы, но вы не хотите его переписывать. Вы можете открыть Консоль кода и написать там:


Окна = ПолучитьОкна();
Для Каждого Окно Из Окна Цикл
    Если Окно.Основное Тогда Продолжить; КонецЕсли;
    Форма = Окно.Содержимое;
    // Здесь можно вызвать экспортный метод формы или изменить реквизит
    Форма.Объект.Комментарий = "Тест отладки без перезапуска";
КонецЦикла;

Это позволяет манипулировать состоянием открытых форм и тестировать гипотезы без внесения изменений в саму конфигурацию.

Метод 4. Динамическое изменение данных через «Вычислить выражение»

Если вы уже стоите на точке останова в серверной или другой клиентской процедуре, вы можете использовать окно «Вычислить выражение» (Shift+F9) не только для чтения, но и для записи. Посмотрим на пример: вам нужно изменить условие, чтобы зайти в определенную ветку кода Если ... Тогда.

Прямо в окне вычисления выражения напишите: ИмяПеременной = Истина. 1С выполнит это присваивание, и при продолжении выполнения (F5) алгоритм пойдет по нужному вам сценарию. Это избавляет от необходимости менять код и перезапускаться ради проверки одного условия.

Метод 5. Использование расширений конфигурации

Рассмотрим подробнее работу с расширениями. Хотя изменение структуры расширения иногда требует перезапуска, во многих случаях (особенно в последних версиях платформы 8.3) обновление кода в расширении происходит значительно быстрее, чем обновление основной конфигурации.

Вы можете вынести интересующую вас процедуру в расширение (используя аннотацию &Вместо), внести изменения и применить их. Система подхватит новый код гораздо оперативнее. Более того, использование механизма «Патчей» (hotfixes) позволяет вносить некоторые правки практически бесшовно.

Метод 6. Имитация функции «Выполнить» на клиенте

Если специфика вашей задачи требует постоянного тестирования разных алгоритмов на стороне клиента, вы можете временно добавить на форму текстовое поле и кнопку, которая будет запускать код из этого поля. Разберем пример реализации:


&НаКлиенте
Процедура ВыполнитьПроизвольныйКод(Команда)
    // ТекстКода - это реквизит формы (строка)
    Выполнить(ТекстКода); 
КонецПроцедуры

Важно: Функция Выполнить() на клиенте имеет свои ограничения (например, она не видит локальные переменные процедуры, из которой вызвана), но она прекрасно подходит для манипуляции реквизитами ЭтаФорма и Объект.

Резюме и рекомендации

Выяснив все доступные способы, мы рекомендуем следующий алгоритм действий для эффективной разработки:

Такой комплексный подход позволит вам сэкономить до 30-40% времени, которое обычно тратится на ожидание загрузки приложения 1С.

← На главную