Отладка внешних обработок для 1с БСП

Отладка дополнительных обработок, подключаемых через механизм Библиотеки Стандартных Подсистем (БСП) к типовым конфигурациям 1с, представляет серьезную проблему для разработчика.
Одним из известных вариантов решения данной проблемы является использование специальной обработки-стартера, которая передаст в отлаживаемую обработку нужные параметры и осуществит её запуск. В данной статье я хочу предложить другой подход к решению этой проблемы.
В предыдущих версиях конфигураций 1с так же существовал механизм подключения внешних обработок (на смену которому и пришел механизм БСП), в процессе работы создавался временный файл на диске содержащий обработку, поэтому была возможность открыть его в конфигураторе для отладки. Но в БСП такой подход к отладке не срабатывает, это связано с тем что БСП подключает дополнительную внешнюю обработку с помощью метода объекта ВнешниеОбработкиМенеджер Подключить(<Путь>, <Имя>, <БезопасныйРежим>), Где Путь – это адрес во временном хранилище. Таким образом сама внешняя обработка в процессе работы 1с предприятия не существует в виде файла на диске, поэтому и открыть её в конфигураторе для отладки невозможно.

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

  1. Любой уважающий себя программист, ведет разработку и отладку в тестовой базе.
    Поэтому сделайте ФАЙЛОВУЮ копию базы 1с, если вы используете типовую конфигурацию то вполне подойдет демо-база, которая поставляется вместе с любой типовой конфигурацией 1с.
  2. Включите возможность изменения конфигурации “Конфигурация-Поддержка-Настройка поддержки…-Включить возможность изменения” Для общего модуля ДополнительныеОтчетыИОбработки включите режим “Объект поставщика редактируется с сохранением поддержки”
  3. В модуль ДополнительныеОтчетыИОбработки вносим следующие изменения:
    Функция ПодключитьВнешнююОбработку(Ссылка) Экспорт
    ...
    // Было:
    // ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , 
    //    БезопасныйРежим);
    // Стало:
    ИмяОбработки = Менеджер.Создать("c:\МояОбработка.epf", Ложь);
    ИмяОбработки = "ИмяМоейОбработки"; // ИМЯ(!) Внешней обработки, 
    которую Вы отлаживаете, как оно задано в конфигураторе
    ...
    
    Процедура ПриПолученииРегистрационныхДанных(Объект, РегистрационныеДанные,
         ПараметрыРегистрации, РезультатРегистрации)
    ...
    // Было:
    // ВнешнийОбъект = Менеджер.Создать(РезультатРегистрации.ИмяОбъекта);
    // Стало:
    ВнешнийОбъект = Менеджер.Создать("c:\МояОбработка.epf", Ложь);
    ...

  4. Открываем в отладчике обработку “c:\МояОбработка.epf” ставим точки останова, можно ставить их как в модуле объекта обработки – в СведенияОВнешнейОбработке(), Печать() и т.д., так и в модуле формы, если обработка имеет форму и использует команду “ОткрытиеФормы”
  5. Запускам 1с в режиме предприятия, добавляем обработку в справочник “Дополнительные отчеты и обработки”, если точка останова была поставлена в функции СведенияОВнешнейОбработке(), то она тут же должна сработать. Вот и всё, теперь можно отлаживать обработку в штатном режиме.
  6. Внимание! Если точка останова не сработала то в связи с особенностью некоторых релизов платформы 8.3.6, для отладки необходимо в первую очередь поставить точку останова на строке СведенияОВнешнейОбработке = ВнешнийОбъект.СведенияОВнешнейОбработке(); процедуры ПриПолученииРегистрационныхДанных(…) модуля ДополнительныеОтчетыИОбработки. Затем в режиме предприятия регистрируем внешнюю обработку(либо заменяем файл, уже зарегистрированной обработки). Когда сработает точка останова необходимо нажать “Шагнуть в(F11)”, откроется модуль обработки, а если модуль уже был открыт, то его КОПИЯ(!). Именно этот модуль и нужно отлаживать в обычном порядке, ставить точки останова и т.д.
  7. Обратите внимание, что при изменении исходного кода обработки нет необходимости заменять файл обработки в справочнике “Дополнительные отчеты и обработки”, потому что фактически происходит запуск и отладка обработки “c:\МояОбработка.epf”, а не обработки из элемента справочника “Дополнительные отчеты и обработки”. Это существенно сокращает и упрощает процесс отладки.
  8. Отмечу, что с помощью описанной технологии можно отлаживать внешние обработки ЛЮБОГО вида:
    “ДополнительнаяОбработка”, “ДополнительныйОтчет”, “ЗаполнениеОбъекта”, “Отчет”, “ПечатнаяФорма”,”СозданиеСвязанныхОбъектов”, содержащие ЛЮБЫЕ команды: “ОткрытиеФормы”, “ВызовКлиентскогоМетода”, “ВызовСерверногоМетода”
  9. Возможные проблемы: время от времени точки останова перестают срабатывать, это происходит потому что по непонятным причинам отключается режим отладки, зайдите в “Отладка-Подключение…” и заново подключите отладку, либо перезапустите 1с предприятие в режиме отладки.
  10. P.S. Разумеется в рабочую базу никаких изменений вносить не нужно! Просто подключите к ней уже отлаженную внешнюю обработку.

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

Комментарии:

  1. e85 пишет:

    Что то не работает :(

  2. Семён пишет:

    (6) – довольно удачное решение.
    Одно только не понятно – нафига это добавлено в БСП и не используется так, как написано ? Где отладка, Карл ?))

  3. unichkin пишет:

    https://infostart.ru/public/573461/ – так гораздо удобнее, и в конфе ничего править не надо

  4. Дмитрий пишет:

    Спасибо огромное!
    Очень помогло в разработке.
    Описанный в самом раннем комментарии алгоритм не сработал.

  5. Дмитрий пишет:

    Спасибо огромное!
    Очень помогло в разработке.
    Описанный Folo в 9 алгоритм не сработал.

  6. Дмитрий пишет:

    Спасибо огромное!
    Очень помогло в разработке.
    (8) – не сработало.

  7. Юрий пишет:

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

    Отдельное спасибо Folo. Замечательный метод для быстрой отладки на рабочей базе

  8. Валерий пишет:

    Доброго времени суток всем.
    Спасибо автору.

    В тему свои “5-копеек”.
    После некоторой модификации метод становится более универсальным
    Изменения вносились только в общем модуле “ДополнительныеОтчетыИОбработки”
    Если Ссылка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки Тогда

    АдресДанныхОбработки = ПоместитьВоВременноеХранилище(Ссылка.ХранилищеОбработки.Получить());
    ДвоичныеДанныеОбработки = ПолучитьИзВременногоХранилища(АдресДанныхОбработки);
    ИмяФайлаОбработки = КаталогВременныхФайлов() + Ссылка.ИмяФайла;
    ДвоичныеДанныеОбработки.Записать(ИмяФайлаОбработки);

    ИмяОбработки = Менеджер.Создать(ИмяФайлаОбработки, Ложь);
    ИмяОбработки = Ссылка.ИмяОбъекта;

    Иначе
    ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим);
    КонецЕсли;

  9. Алексей пишет:

    Крутейшая круть. Уже давно отказался писать обработки и внешние формы под БСП, так как себе дороже, денег с гулькин нос, а долбатни на неделю, хорошо было когда клиенты с обычными конфами в очередь стояли. Теперь же все перешли на БП 3.0.Мое мнение что Фирма 1С последние года делает все возможное чтобы программисты 1С либо остались без хлеба (без механизма отладки), либо ушли из отрасли.

  10. Василий пишет:

    Folo, у меня не получилось через F11. Пришлось сделать как писал автор статьи

  11. Алексей пишет:

    Автору РЕСПЕКТ! и УВАЖУХА! убил кучу времени чтобы просто попасть отладчиком во внешнюю форму. Все способы кроме этого НЕ работают. Обработки стартеры заточены под УТ и Бухгалтерию 3.0. Ни одна не работает в КА 2.0.

  12. Basil пишет:

    Спасибо за статью. Все получилось при использовании пункта 6. Начиная с конфигурации 8.6.3 все ранее использованные методы отладки перестали работать. Неужели в БСП нет официальных методов отладки, а не через заднее крыльцо?

  13. boxfon.ru пишет:

    И почему то в эту процедуру захода нет. Вижу, что те глобальные процедуры, которые вызываются из нее – в общих модулях – трейсяться, но сама внешняя обработка вообще не открывается и по точкам остановам внутри нее – остановок нет.

  14. Folo пишет:

    Достаточно в модуле внешней обработки вызвать какую нибудь мелкую и безобидную функцию из общего модуля, например ОбщегоНазначения.ЭтоССылка(…)
    Точку останова можно поставить в ней и далее по F11 снова попасть в отлаживаемую обработку. Ничего добавлять в конфу не надо и отлаживать можно на рабочей а не на файловой копии.

Оставить комментарий