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

Отладка внешних обработок и печатных форм для 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. Folo:

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

  2. boxfon.ru:

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

  3. Basil:

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

  4. Алексей:

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

  5. Василий:

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

  6. Алексей:

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

    1. Мурат:

      Да они, всеми силами, сейчас EDT продвигают… так инструменты для отладки внешних форм есть.

  7. Валерий:

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

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

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

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

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

  8. Юрий:

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

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

  9. Дмитрий:

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

  10. Дмитрий:

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

  11. Дмитрий:

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

  12. unichkin:

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

  13. Семён:

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

  14. e85:

    Что то не работает 🙁

  15. гость:

    круто.спасибо.

  16. Татьяна:

    СПАСИБО ОГРОМНОЕ!! Уже мозг сломала, как отладить внешнюю обработку. Ни один способ, найденный в интернете, не помог! Кроме вашего!!!!!!!!!!,,,,,,,,, База: 1С 8.3 ЕРП УП2.

    1. Администратор:

      Пользуйтесь во благо

  17. Алексей:

    Большое спасибо, все работает.

  18. Владимир:

    Автору спасибо за информацию.
    По рекомендации Юрия и Валерия замутил расширение, отладка стала куда приятней.
    Спасибо, все очень помогли.

  19. Борис:

    Сделал расширение. Убрал безопасный режим.
    Нашел указанные функции и добавил их в расширение «Вместо»
    Текст функций полностью скопировал и отредактировал как тут написано.
    Запустилось.
    СПАСИБО!

  20. Натали:

    Сделала все как написано,но почему то при подключении обработки выходит сообщение-невозможно подключить обработку из файла.Техническая информация:Каталог не обнаружен «С:\….».Что не так сделала?

  21. Ромарио:

    Процедура ПриПолученииРегистрационныхДанных(Объект, РегистрационныеДанные, СтандартнаяОбработка) Экспорт
    Если ОбщегоНазначения.ПодсистемаСуществует(«СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса») Тогда
    МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль(«ДополнительныеОтчетыИОбработкиВМоделиСервиса»);
    МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ПриПолученииРегистрационныхДанных(Объект, РегистрационныеДанные, СтандартнаяОбработка);
    КонецЕсли;

    КонецПроцедуры
    У меня у одного текст процедуры выглядит так?

  22. Марина:

    Спасибо! Большое спасибо, все работает. Особенно радует, что «при изменении исходного кода обработки нет необходимости заменять файл обработки в справочнике «Дополнительные отчеты и обработки», потому что фактически происходит запуск и отладка обработки «c:\МояОбработка.epf»,»

  23. V:

    Спасибо помогло с внешними отчетами. Так как в основном все обработки которые сделаны для отладки внешних обработок работают с расширение .epf а мне надо было через отчет то есть через .erp И все получилось!

  24. Анна:

    Спасибо!

  25. Вячеслав:

    Спасибо огромное, друг!

  26. Вячеслав:

    Добрый день! Перепробовал способы, указанные в теме и коментах, прикольно, но как вариант. У меня есть в запасе еще один вариант, а именно: я не вношу никакие изменения ни в конфигурацию, ни в Дополнительную обработку. Есть такой общий модуль называется он ДополнительныеОтчетыИОбработки и в нем нужно ставить токи останова перед запуском обработки и в зависимости от обработки выбрать нужную Процедуру или функцию,
    в частности — для внешней Печатной формы нужно ставить в процедуре ПечатьПоВнешнемуИсточнику.

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