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

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

Работа с внешними обработками в современных конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как ЗУП 3.1, ERP или КА 2, часто вызывает затруднения у разработчиков в части отладки. Основная сложность заключается в том, что система при выполнении команды из справочника «Дополнительные отчеты и обработки» копирует код обработки во временное хранилище или во временный файл, из-за чего точки останова в вашем исходном .epf файле просто не срабатывают.

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

Способ 1: Использование отладочной формы и ручной запуск

Самый простой и надежный метод — это адаптация обработки для возможности её запуска как обычного файла через меню «Файл — Открыть». Рассмотрим подробнее, как это реализовать. Нам необходимо имитировать поведение БСП, которая при вызове обработки передает ей параметры и массив объектов назначения.

Разберем по шагам, что нужно сделать в модуле объекта и форме вашей обработки:

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

Проанализируем пример кода в модуле объекта:


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

    Для Каждого ТекущийОбъект Из ОбъектыНазначения Цикл
        ЗаполнитьТабличнуюЧасть(ТекущийОбъект);
    КонецЦикла;

КонецПроцедуры

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

Теперь в модуле формы создадим команду «Запустить отладку», которая будет вызывать процедуру модуля объекта:


&НаСервере
Процедура КомандаОтладкаНаСервере()
    ОбъектОбработка = РеквизитФормыВЗначение("Объект");
    
    МассивСсылок = Новый Массив;
    МассивСсылок.Добавить(Объект.СсылкаНаОбъект);
    
    // Имитируем вызов БСП
    ОбъектОбработка.ВыполнитьКоманду("ЗаполнитьТЧ", МассивСсылок);
    
    // Если нужно вернуть данные в форму документа (если документ открыт)
    // потребуется дополнительная логика оповещения форм.
КонецПроцедуры

Способ 2: Метод программной подмены (Redirect)

Этот метод считается наиболее профессиональным среди опытных разработчиков 1С. Суть заключается в том, что в справочник «Дополнительные отчеты и обработки» загружается «пустышка», которая лишь перенаправляет вызов на файл, лежащий на вашем диске. Таким образом, вам не нужно каждый раз перезагружать обработку в базу при изменении кода.

Разберем, как это работает. В процедуре ВыполнитьКоманду основной обработки, зарегистрированной в системе, мы пишем следующий код:


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

Важный момент: при таком подходе точка останова должна стоять в файле C:\Debug\MyProcessing.epf. Когда система вызовет ВнешниеОбработки.Создать(), Конфигуратор поймет, что этот файл открыт, и активирует отладку.

Способ 3: Отладка через временные файлы сеанса

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

  1. Запустите сеанс 1С:Предприятие в режиме отладки.
  2. Выполните команду заполнения табличной части (ваша обработка должна запуститься).
  3. Не закрывая сеанс, перейдите в каталог временных файлов (обычно это %TEMP% или Local/Temp).
  4. Найдите файл с расширением .epf и странным именем (например, v8_2345_12.epf). Ориентируйтесь по времени изменения файла.
  5. Откройте этот файл в Конфигураторе и поставьте точку останова.
  6. Снова запустите выполнение обработки в 1С. Точка останова сработает!

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

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

Часто программисты сталкиваются с тем, что всё настроено верно, но отладка "не цепляется". Проанализируем технические настройки, которые необходимы для корректной работы в ЗУП 3.1 (особенно в клиент-серверном варианте):

Способ 5: Применение расширений для сложной логики

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

В расширении вы можете создать команду, которая будет отображаться в меню «Заполнение» документа так же, как и внешняя обработка. Однако код расширения является частью конфигурации. Это означает, что:

Посмотрим на пример структуры команды в расширении:


&НаСервере
Процедура Расш1_ЗаполнитьПоАлгоритму(ИмяКоманды, ПараметрыКоманды)
    ДокументОбъект = ПараметрыКоманды.Источник.Объект;
    // Здесь ваша логика
    // Точка останова сработает мгновенно!
КонецПроцедуры

Заключение

Мы проанализировали основные стратегии отладки внешних обработок в ЗУП 3.1. Для быстрой правки "на лету" лучше всего подходит метод подмены файла на диске (Способ 2). Для разовых исправлений в незнакомой базе — поиск временного файла в каталоге TEMP (Способ 3). Если же вы только начинаете разработку, заложите в архитектуру обработки отладочную форму (Способ 1), что сэкономит вам массу времени в будущем.

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

← На главную