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