В процессе разработки в 1С часто возникает задача создать внешнюю обработку, которая интегрируется в стандартные документы и помогает автоматизировать заполнение данных, например, загрузку товаров из Excel в табличную часть. Такие обработки обычно регистрируются в системе как команды заполнения объекта. Однако при их отладке разработчики сталкиваются с проблемой: как поставить точку останова и пошагово выполнить код, если обработка вызывается не напрямую, а из контекста документа? Рассмотрим несколько эффективных способов решения этой задачи.
Типичный шаблон дополнительной обработки для конфигураций на основе БСП содержит регистрационную информацию в ее модуле, указывающую системе, что это обработка для заполнения объектов:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
// ... прочие параметры
Возврат ПараметрыРегистрации;
КонецФункции
Именно из-за такого способа интеграции стандартный запуск отладки не работает. Проанализируем, как обойти это ограничение.
Это самый простой и быстрый метод, который не требует установки дополнительных инструментов. Его суть заключается в том, чтобы временно модифицировать форму обработки для имитации ее вызова из документа.
Разберем по шагам:
.epf) в Конфигураторе..epf вашей обработки. Убедитесь, что вы открываете именно тот файл, который открыт в Конфигураторе, иначе точки останова не сработают.Однако здесь возникает проблема, отмеченная в обсуждении: обработке для работы нужен объект документа, из которого она была "вызвана". Поскольку мы открыли ее напрямую, этого объекта нет. Решим эту задачу:
ОбъектОтладки. В качестве типа данных для этого реквизита укажите ссылку на тот тип документа, с которым работает ваша обработка (например, ДокументСсылка.ПоступлениеТоваровУслуг).Посмотрим на пример кода для кнопки:
Предположим, логика находится в экспортной процедуре. Чтобы быстрее получить каркас кода, можно использовать консоль кода с ИИ-помощником. Тогда код для кнопки будет таким:
&НаКлиенте
Процедура ВыполнитьОтладку(Команда)
// Проверяем, что документ для отладки выбран
Если НЕ ЗначениеЗаполнено(ОбъектОтладки) Тогда
Сообщить("Выберите документ для отладки!");
Возврат;
КонецЕсли;
// Вызываем основную процедуру, передавая ссылку на документ
// Возможно, вашей процедуре нужен не сам объект, а его форма или массив объектов.
// Адаптируйте вызов под вашу реализацию.
МойМодульНаСервере.ЗаполнитьТабличнуюЧасть(ОбъектОтладки);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТабличнуюЧасть(СсылкаНаДокумент)
// Здесь можно получить объект по ссылке и передать его дальше
ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
// ... вызов вашего основного кода отладки
// Например, МодульОбработки.ВыполнитьЗаполнение(ОбъектДокумента);
КонецПроцедуры
После завершения отладки не забудьте удалить временные реквизиты и элементы с формы.
Для конфигураций, основанных на Библиотеке стандартных подсистем (БСП), существует более изящный и продуктивный способ — использование специальных расширений для отладки.
Принцип работы:
Такое расширение встраивается в механизм вызова дополнительных отчетов и обработок. Оно добавляет в карточку дополнительной обработки в справочнике специальный флаг "Режим отладки" и поле для указания пути к файлу .epf на диске.
Когда вы из документа вызываете вашу обработку, расширение перехватывает этот вызов. Если режим отладки включен, система будет использовать не ту версию обработки, что сохранена в базе данных, а загрузит ее напрямую из указанного вами файла.
Преимущества этого метода:
Дополнительные отчеты и обработки не нужно.Подобные расширения можно найти на специализированных ресурсах, например, на Инфостарте, или разработать самостоятельно, если вы хорошо знакомы с механизмом расширений конфигурации.
Если значительная часть логики вашей обработки выполняется на сервере (в процедурах с директивой &НаСервере или в серверных общих модулях, которые она вызывает), вам может потребоваться включить отладку на сервере 1С.
Ключевые моменты:
.epf, указанный в настройках, доступен для чтения с сервера 1С. Часто проще всего разместить отлаживаемую обработку в общей сетевой папке.rphost.exe).-debug в строку запуска службы "Агент сервера 1С:Предприятия".Без этих настроек точки останова в серверном коде просто не будут срабатывать.
Иногда система может выполнять код дополнительных обработок в фоновых заданиях для оптимизации производительности. Отладчик по умолчанию не подключается к таким заданиям. Чтобы это исправить, в Конфигураторе зайдите в "Сервис" -> "Параметры" -> "Отладка". Убедитесь, что в поле "Автоматически подключать" для фоновых заданий установлено значение "Подключать". Это гарантирует, что отладчик "поймает" выполнение вашего кода, даже если он запущен в фоновом режиме.
Подведем итог. Выбор метода отладки зависит от ваших задач и удобства. Для разовой проверки подойдет простой метод с открытием файла и эмуляцией. Для постоянной и комфортной разработки интегрируемых обработок настоятельно рекомендуется использовать специализированное расширение — это сэкономит массу времени и нервов.