В процессе разработки в среде «1С:Предприятие 8» одной из самых трудозатратных операций является постоянный перезапуск сеанса «1С:Предприятие» для проверки небольших изменений в клиентском коде. Особенно остро эта проблема стоит при работе на медленных серверах или через удаленный рабочий стол (RDP), когда запуск конфигуратора и клиента занимает значительное время. В данной статье мы подробно разберем, как можно оптимизировать этот процесс и выполнять отладку клиентских процедур максимально оперативно.
Это самый популярный и эффективный способ среди опытных разработчиков. Если вам необходимо многократно править логику клиентских процедур (обработчики кнопок, проверки заполнения на клиенте), перенос формы во внешнюю обработку позволяет видеть изменения мгновенно при каждом новом открытии. Рассмотрим по шагам, как это реализовать:
КопироватьДанныеФормы().Разберем пример кода для открытия формы внешней обработки с передачей данных существующего объекта:
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаОбъект);
ИмяВнешнейФормы = "ВнешняяОбработка.МояОтладка.Форма.ФормаОбъекта";
ОткрытьФорму(ИмяВнешнейФормы, ПараметрыФормы);
Преимущество этого метода: Вы можете менять код модуля формы во внешней обработке в конфигураторе, сохранять файл (Ctrl+S) и тут же заново открывать форму в работающем клиенте без перезапуска сеанса. 1С будет каждый раз считывать актуальный код из файла.
Иногда проблема заключается не в изменении кода, а в том, что отладчик «не видит» клиентские процедуры. Выясним причину: часто это происходит из-за того, что сеанс не подключен к отладке автоматически. Разберем, как подключиться вручную:
Теперь точки останова, установленные в клиентских процедурах &НаКлиенте, будут срабатывать корректно.
Существуют специализированные инструменты (например, «Инструменты разработчика» С. Старых), которые позволяют выполнять произвольный код прямо в контексте запущенного приложения. Это имитирует функционал 1С 7.7, где код можно было интерпретировать «на лету».
Проанализируем ситуацию: вам нужно проверить, как сработает метод формы, но вы не хотите его переписывать. Вы можете открыть Консоль кода и написать там:
Окна = ПолучитьОкна();
Для Каждого Окно Из Окна Цикл
Если Окно.Основное Тогда Продолжить; КонецЕсли;
Форма = Окно.Содержимое;
// Здесь можно вызвать экспортный метод формы или изменить реквизит
Форма.Объект.Комментарий = "Тест отладки без перезапуска";
КонецЦикла;
Это позволяет манипулировать состоянием открытых форм и тестировать гипотезы без внесения изменений в саму конфигурацию.
Если вы уже стоите на точке останова в серверной или другой клиентской процедуре, вы можете использовать окно «Вычислить выражение» (Shift+F9) не только для чтения, но и для записи. Посмотрим на пример: вам нужно изменить условие, чтобы зайти в определенную ветку кода Если ... Тогда.
Прямо в окне вычисления выражения напишите: ИмяПеременной = Истина. 1С выполнит это присваивание, и при продолжении выполнения (F5) алгоритм пойдет по нужному вам сценарию. Это избавляет от необходимости менять код и перезапускаться ради проверки одного условия.
Рассмотрим подробнее работу с расширениями. Хотя изменение структуры расширения иногда требует перезапуска, во многих случаях (особенно в последних версиях платформы 8.3) обновление кода в расширении происходит значительно быстрее, чем обновление основной конфигурации.
Вы можете вынести интересующую вас процедуру в расширение (используя аннотацию &Вместо), внести изменения и применить их. Система подхватит новый код гораздо оперативнее. Более того, использование механизма «Патчей» (hotfixes) позволяет вносить некоторые правки практически бесшовно.
Если специфика вашей задачи требует постоянного тестирования разных алгоритмов на стороне клиента, вы можете временно добавить на форму текстовое поле и кнопку, которая будет запускать код из этого поля. Разберем пример реализации:
&НаКлиенте
Процедура ВыполнитьПроизвольныйКод(Команда)
// ТекстКода - это реквизит формы (строка)
Выполнить(ТекстКода);
КонецПроцедуры
Важно: Функция Выполнить() на клиенте имеет свои ограничения (например, она не видит локальные переменные процедуры, из которой вызвана), но она прекрасно подходит для манипуляции реквизитами ЭтаФорма и Объект.
Выяснив все доступные способы, мы рекомендуем следующий алгоритм действий для эффективной разработки:
Такой комплексный подход позволит вам сэкономить до 30-40% времени, которое обычно тратится на ожидание загрузки приложения 1С.