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

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

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

Основной способ: сохранение обработки как внешней

Самое простое и эффективное решение проблемы — вынести разрабатываемую обработку во внешний файл с расширением .epf. Проанализируем, как правильно организовать этот процесс по шагам:

  1. В дереве метаданных Конфигуратора находим нужную обработку, нажимаем по ней правой кнопкой мыши и выбираем пункт Сохранить как внешнюю обработку, отчет....
  2. Сохраняем файл .epf в удобный каталог на диске.
  3. Открываем полученный файл в Конфигураторе через меню Файл — Открыть и вносим в него необходимые доработки.
  4. В запущенном сеансе 1С:Предприятия открываем файл обработки через стандартное меню Файл — Открыть.
  5. После внесения правок в Конфигураторе достаточно закрыть форму обработки в режиме 1С:Предприятия, сохранить файл по нажатию сочетания клавиш Ctrl + S в Конфигураторе и заново открыть обработку в 1С:Предприятии. Перезапускать весь сеанс базы больше не требуется.
  6. После того как весь алгоритм полностью отлажен и протестирован, переносим код и формы обратно во встроенную обработку конфигурации (или заменяем ее через контекстное меню Заменить на внешнюю обработку...).

Ограничение: отсутствие модуля менеджера во внешних обработках

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

Выясним, как обойти это ограничение на этапе отладки:

  1. Все серверные функции и процедуры, которые планируется разместить в модуле менеджера, временно переносим в МодульОбъекта внешней обработки и объявляем их с ключевым словом Экспорт.
  2. В модулях форм вызываем эти методы через объект обработки:
    
    &НаСервере
    Процедура ВыполнитьДействиеНаСервере()
        ОбъектОбработки = РеквизитФормыВЗначение("Объект");
        ОбъектОбработки.МойЭкспортныйАлгоритм();
    КонецПроцедуры
    
  3. После окончания отладки переносим процедуры обратно в модуль менеджера встроенного объекта конфигурации и заменяем вызовы на Обработки.ИмяОбработки.МойЭкспортныйАлгоритм().

Обход блокировки файла с помощью обработки-«запускатора»

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

Разберем механизм работы такого подхода:

  1. Создается простая служебная внешняя обработка с кнопкой Запустить.
  2. В обработчике кнопки пишется код, который считывает тестируемый файл .epf в двоичные данные, сохраняет его во временный файл и программно подключает с помощью метода ВнешниеОбработки.Подключить():
    
    &НаКлиенте
    Процедура ЗапуститьОбработку(Команда)
        ПутьКФайлу = "C:\Dev\МояОбработка.epf";
        ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
        ВременныйФайл = ПолучитьИмяВременногоФайла("epf");
        ДвоичныеДанные.Записать(ВременныйФайл);
        
        ИмяПодключеннойОбработки = ВнешниеОбработки.Подключить(ВременныйФайл, , Ложь);
        ОткрытьФорму("ВнешняяОбработка." + ИмяПодключеннойОбработки + ".Форма");
    КонецПроцедуры
    
  3. Поскольку открывается копия из временного каталога, основной файл в рабочей папке остается свободным от блокировок операционной системы. Разработчик может сохранять код в Конфигураторе в любой момент и нажимать кнопку повторного запуска в запускаторе.

Настройка точек останова во внешних обработках

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

  1. Строгое совпадение путей к файлу. Файл внешней обработки должен быть открыт в Конфигураторе и в 1С:Предприятии по абсолютно одинаковому пути. Если в одном месте используется сетевой путь вида \\server\share\file.epf, а в другом — подключенный диск Z:\file.epf, отладчик не сможет сопоставить исполняемый модуль с открытым в редакторе текстом.
  2. Включение серверной отладки. Для остановки в процедурах с директивой &НаСервере на сервере 1С:Предприятия должен быть активирован режим отладки (параметр запуска службы -debug). При работе в файловой базе отладка доступна по умолчанию.
  3. Подключение фоновых заданий. Если выполнение логики обработки вынесено в длительную операцию, в Конфигураторе в меню Отладка — Подключение... на вкладке Автоматическое подключение необходимо включить флаг Фоновые задания.
  4. Безопасный режим. При открытии обработки через механизмы БСП безопасный режим может накладывать ограничения на выполнение системных команд и вызовов внешних библиотек. Для беспрепятственной отладки обработку следует запускать без безопасного режима.

Альтернативные инструменты: расширения конфигурации и консоли кода

Посмотрим на другие варианты ускорения тестирования функционала, если вариант с внешним файлом не подходит:

  1. Расширения конфигурации. Если требуется доработать процедуру документа или справочника (где использование внешней обработки затруднено), функционал можно вынести в расширение. Применение расширения происходит быстрее полного обновления базы и не требует реструктуризации таблиц базы данных.
  2. Консоль кода. Для проверки небольших запросов, математических расчетов или структуры коллекций удобно использовать консоли выполнения кода. Они выполняют введенный фрагмент кода прямо в интерфейсе через встроенный метод Выполнить(), полностью избавляя от необходимости что-либо компилировать или перезапускать.
← На главную