Как отладить внешнюю печатную форму или обработку в 1С?

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

Разработка внешних печатных форм (ВПФ) — стандартная задача для разработчика 1С, но она часто превращается в головную боль, когда дело доходит до поиска ошибок. Чтобы сократить время на поиск опечаток еще до запуска, рекомендуется использовать статический анализатор кода проектов. Проблема же самой отладки заключается в том, что механизмы Библиотеки стандартных подсистем (БСП) запускают внешнюю обработку не напрямую, а из временного хранилища или через фоновое задание. В результате обычные точки останова в модуле обработки просто игнорируются платформой. В этой статье мы подробно разберем, как «заставить» отладчик зайти внутрь внешней печатной формы, проанализируем настройки сервера и рассмотрим программные хитрости.

Метод 1. Настройка сервера и режима отладки

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

  1. Флаг -debug: Убедимся, что служба сервера 1С запущена с параметром -debug. Без этого сервер игнорирует любые попытки подключения отладчика.
  2. Протокол отладки: В современных версиях платформы (8.3.7 и выше) рекомендуется использовать HTTP-отладку. Перейдем в «Сервис — Параметры — Отладка» и выберем соответствующий протокол. Это значительно стабильнее работает в условиях сложных сетей.
  3. Автоматическое подключение: Откроем меню «Отладка — Подключение». Нажмем кнопку «Настройка» и установим флажки для автоматического подключения к фоновым заданиям. Для тех, кто хочет максимально автоматизировать подготовку окружения, существует помощник отладки (mini Vanessa), который значительно экономит время при частых перезапусках.

Метод 2. Использование параметра запуска «РежимОтладки»

Рассмотрим очень простой, но эффективный способ, который часто игнорируют. В 1С существует специальный параметр запуска РежимОтладки. Когда этот режим включен, БСП меняет свое поведение: выполнение кода, которое обычно уходит в фоновое задание, начинает исполняться в основном потоке.

Для включения этого режима добавим в дополнительные параметры запуска (в окне выбора информационных баз) следующую строку:

/C РежимОтладки

Выясним причину, почему это помогает: когда система видит этот параметр, функция ОбщегоНазначения.РежимОтладки() возвращает Истина, и механизмы длительных операций отключаются. Чтобы лучше разобраться в архитектуре этого процесса, изучите, как работают длительные операции в БСП 3.1.8. Это позволяет отладчику не терять контекст исполнения при переходе от общей формы к серверному коду печати.

Метод 3. Подмена обработки локальным файлом (Дедовский способ)

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

Чтобы решить эту проблему, мы можем временно модифицировать общий модуль БСП ДополнительныеОтчетыИОбработки, чтобы система брала код не из базы, а из вашего конкретного файла на диске. В процессе написания такого расширения вам очень поможет справочник по методам БСП с примерами использования. Разберем пример кода, который можно внедрить через расширение (используя аннотацию &Вместо):


Функция СОГ_ПодключитьВнешнююОбработку(Ссылка) Экспорт
    // Проверка корректности ссылки
    Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда
        Возврат Неопределено;
    КонецЕсли;

    // Укажем путь к нашему файлу, который мы редактируем в Конфигураторе
    ПутьКФайлуДляОтладки = "C:\MyDevelopments\MyPrintForm.epf"; 
    
    ФайлНаДиске = Новый Файл(ПутьКФайлуДляОтладки);
    Если ФайлНаДиске.Существует() Тогда
        // Система создаст объект напрямую из файла, и точки останова сработают!
        ИмяОбработки = ВнешниеОбработки.Подключить(ПутьКФайлуДляОтладки, , Ложь);
        Возврат ИмяОбработки;
    КонецЕсли;

    // Если файла нет, возвращаемся к стандартному механизму
    Возврат ПродолжитьВызов(Ссылка);
КонецФункции

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

Метод 4. Программная остановка («Зацикливание»)

Если нам нужно «поймать» выполнение в среде, где мы не можем менять общие модули, воспользуемся методом принудительной остановки. Посмотрим на пример: в самом начале процедуры Печать в модуле объекта внешней обработки вставим следующий код:


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПеременнаяДляВыхода = Ложь;
    Пока НЕ ПеременнаяДляВыхода Цикл
        // Здесь выполнение зациклится.
        // В это время идем в Конфигуратор -> Отладка -> Подключение
        // Ищем серверный сеанс или фоновое задание и подключаемся к нему.
    КонецЦикла;
    
    // После подключения в Табло (Shift+F9) меняем значение:
    // ПеременнаяДляВыхода = Истина
    // И продолжаем идти по шагам F10 / F11
    
КонецПроцедуры

Рассмотрим подробнее, что происходит: процесс «зависает» на сервере, что дает нам неограниченное время, чтобы найти нужный сеанс в списке подключений отладчика. Это особенно полезно при отладке регламентных заданий или сложных фоновых процессов в клиент-серверном режиме.

Метод 5. Использование специализированных обработок

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

Разберем алгоритм работы с такими инструментами:

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

Метод 6. Безопасный режим и защита от опасных действий

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

Для целей отладки рекомендуется:

Метод 7. Отладка через «Остановку по ошибке»

Если точка останова упорно не желает работать, можно применить «грубую силу». Вставим в код строчку, вызывающую заведомую ошибку, например: А = 1/0;. В конфигураторе включим опцию «Отладка — Останавливаться по ошибке». Когда выполнение дойдет до этой строки, платформа принудительно откроет модуль временного файла. Чтобы в финальном коде не осталось подобных «сюрпризов» и некорректных вызовов, используйте анализ конфигураций, расширений, отчетов и обработок на наличие ошибок (версия 5).

Важное примечание: После того как отладчик откроет этот временный файл (например, с именем v8_XXXX_XX.epf), не закрывайте его. Вы можете расставить в нем новые точки останова, и они будут работать до тех пор, пока сеанс не будет завершен или файл не будет удален системой.

Резюме

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

← На главную