Как отладить внешнюю обработку для заполнения табличной части документа?

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

В процессе разработки в 1С часто возникает задача создать внешнюю обработку, которая интегрируется в стандартные документы и помогает автоматизировать заполнение данных, например, загрузку товаров из Excel в табличную часть. Такие обработки обычно регистрируются в системе как команды заполнения объекта. Однако при их отладке разработчики сталкиваются с проблемой: как поставить точку останова и пошагово выполнить код, если обработка вызывается не напрямую, а из контекста документа? Рассмотрим несколько эффективных способов решения этой задачи.

Типичный шаблон дополнительной обработки для конфигураций на основе БСП содержит регистрационную информацию в ее модуле, указывающую системе, что это обработка для заполнения объектов:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
    // ... прочие параметры
    Возврат ПараметрыРегистрации;
КонецФункции

Именно из-за такого способа интеграции стандартный запуск отладки не работает. Проанализируем, как обойти это ограничение.

Способ 1: Отладка через прямое открытие файла с эмуляцией контекста

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

Разберем по шагам:

  1. Откройте вашу внешнюю обработку (файл с расширением .epf) в Конфигураторе.
  2. Запустите сеанс 1С в режиме отладки (через меню "Отладка" -> "Начать отладку" или клавишей F5).
  3. В открывшемся приложении перейдите в меню "Файл" -> "Открыть" и выберите тот же самый файл .epf вашей обработки. Убедитесь, что вы открываете именно тот файл, который открыт в Конфигураторе, иначе точки останова не сработают.
  4. Теперь вы можете ставить точки останова в коде обработки.

Однако здесь возникает проблема, отмеченная в обсуждении: обработке для работы нужен объект документа, из которого она была "вызвана". Поскольку мы открыли ее напрямую, этого объекта нет. Решим эту задачу:

  1. Добавим временные элементы на форму. В Конфигураторе откройте основную форму вашей обработки. Добавьте на нее новый реквизит, например, с именем ОбъектОтладки. В качестве типа данных для этого реквизита укажите ссылку на тот тип документа, с которым работает ваша обработка (например, ДокументСсылка.ПоступлениеТоваровУслуг).
  2. Выведите поле на форму. Перетащите созданный реквизит на форму, чтобы в режиме предприятия можно было выбрать конкретный документ.
  3. Создайте кнопку для запуска. Добавьте на форму временную кнопку, например, "Выполнить отладку". В обработчике нажатия этой кнопки напишите код, который будет вызывать основную экспортную процедуру вашей обработки, передавая в нее выбранный документ.

Посмотрим на пример кода для кнопки:

Предположим, логика находится в экспортной процедуре. Чтобы быстрее получить каркас кода, можно использовать консоль кода с ИИ-помощником. Тогда код для кнопки будет таким:


&НаКлиенте
Процедура ВыполнитьОтладку(Команда)
    // Проверяем, что документ для отладки выбран
    Если НЕ ЗначениеЗаполнено(ОбъектОтладки) Тогда
        Сообщить("Выберите документ для отладки!");
        Возврат;
    КонецЕсли;

    // Вызываем основную процедуру, передавая ссылку на документ
    // Возможно, вашей процедуре нужен не сам объект, а его форма или массив объектов.
    // Адаптируйте вызов под вашу реализацию.
    МойМодульНаСервере.ЗаполнитьТабличнуюЧасть(ОбъектОтладки);
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьТабличнуюЧасть(СсылкаНаДокумент)
    // Здесь можно получить объект по ссылке и передать его дальше
    ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();

    // ... вызов вашего основного кода отладки
    // Например, МодульОбработки.ВыполнитьЗаполнение(ОбъектДокумента);
КонецПроцедуры

После завершения отладки не забудьте удалить временные реквизиты и элементы с формы.

Способ 2: Использование расширений для комфортной отладки

Для конфигураций, основанных на Библиотеке стандартных подсистем (БСП), существует более изящный и продуктивный способ — использование специальных расширений для отладки.

Принцип работы:

Такое расширение встраивается в механизм вызова дополнительных отчетов и обработок. Оно добавляет в карточку дополнительной обработки в справочнике специальный флаг "Режим отладки" и поле для указания пути к файлу .epf на диске.

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

Преимущества этого метода:

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

Способ 3: Настройка серверной отладки

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

Ключевые моменты:

  1. Доступность файла. Если вы используете метод с расширением (Способ 2), убедитесь, что путь к файлу .epf, указанный в настройках, доступен для чтения с сервера 1С. Часто проще всего разместить отлаживаемую обработку в общей сетевой папке.
  2. Подключение отладчика. В Конфигураторе через меню "Отладка" -> "Подключение..." необходимо подключиться не только к своему клиентскому сеансу, но и к серверным процессам (rphost.exe).
  3. Настройки сервера 1С. На самом сервере 1С должен быть разрешен режим отладки. Обычно это делается добавлением ключа -debug в строку запуска службы "Агент сервера 1С:Предприятия".

Без этих настроек точки останова в серверном коде просто не будут срабатывать.

Дополнительный совет: режим отладки и фоновые задания

Иногда система может выполнять код дополнительных обработок в фоновых заданиях для оптимизации производительности. Отладчик по умолчанию не подключается к таким заданиям. Чтобы это исправить, в Конфигураторе зайдите в "Сервис" -> "Параметры" -> "Отладка". Убедитесь, что в поле "Автоматически подключать" для фоновых заданий установлено значение "Подключать". Это гарантирует, что отладчик "поймает" выполнение вашего кода, даже если он запущен в фоновом режиме.

Подведем итог. Выбор метода отладки зависит от ваших задач и удобства. Для разовой проверки подойдет простой метод с открытием файла и эмуляцией. Для постоянной и комфортной разработки интегрируемых обработок настоятельно рекомендуется использовать специализированное расширение — это сэкономит массу времени и нервов.

← На главную