Методика разработки внешних печатных форм с возможностью отладки интерактивных команд печати

24.03.25

Разработка - БСП (Библиотека стандартных подсистем)

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

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

Вы сохранили из справочника ДополнительныеОтчетыИОбработки печатную форму в файл на диск, открыли её в конфигураторе, поставили точку останова в экспортной процедуре Печать() модуля объекта внешней обработки и запустили формирование печатной формы из соответствующего документа. Печатная форма сформировалась, но конфигуратор точку останова не поймал. Почему так произошло? 

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

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

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

 

Что обычно с этим делают

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

• Создание формы внешней обработки, в которой размещается реквизит под ссылку на объект печати и команда для вызова экспортной процедуры Печать() модуля объекта обработки. Внешняя обработка открывается через файл-открыть, в форме выбирается целевой объект и вызывается команда печати. При этом без проблем происходит попадание в отладку.

Плюсы: Простая реализация.  

Минусы: При каждом внесении изменений в обработку требуется открывать её заново. Если вы не отключили у своего пользователя защиту от опасных действий, то при каждом открытии новой версии обработки будет выводиться предупреждение системы безопасности.
 

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

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

Минусы: Нужно включать возможность изменения конфигурации. Неприменимо к базовым конфигурациям. 
 

• То же самое, но в виде расширения.

Плюсы: Те же самые.

Минусы: Неприменимо к базовым конфигурациям. Неприменимо к конфигурациям с режимом совместимости, в котором нет поддержки расширений.
 

• Подключение к справочнику ДополнительныеОтчетыИОбработки различных вариаций технических печатных форм, которые работают как прокладки для трансляции входящих параметров процедуры Печать() в такую же процедуру отлаживаемой печатной формы, создаваемой из файла с заранее известным расположением.

Плюсы: Не требуется доработка конфигурации. Не требуется перезапуск при внесении изменений в отлаживаемую обработку. Работает в базовых версиях.

Минусы: Путь к отлаживаемому файлу обычно нужно писать прямо в коде технической обработки.

 

Концепция моей методики отладки

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

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

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

 

Где хранить путь к каталогу отладки

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


 

Реализация методики

Без лишних слов - листинг модуля внешней печатной формы:

 
СведенияОВнешнейОбработке
 
Печать
 
ОтладкаПодключаемойОбработки
 
СформироватьПечатнуюФорму

 

Листинг формы настроек отладки: 

 
 Модуль формы

 

Как это выглядит в работе на примере демо-базы ЗУП 3.1

 

Что в итоге?

Добавления в обработку всего одной весьма нехитрой функции и одной формы для удобства указания пути к каталогу отладки оказалось достаточно, чтобы закрыть вопрос о том, как интерактивно отлаживать внешнюю печатную форму без использования дополнительных инструментов и различных сомнительных решений. Интересно, раньше такое кто-нибудь предлагал провернуть? Наверняка я не первый, кто использовал такой приём.

 

А что там с недостатками?

Куда уж без них. Иногда платформа включает оптимизацию и при программном создании внешней обработки из файла, который только что был выгружен из справочника, возвращает подключенную ранее обработку с адресом временного хранилища в используемом имени файла. Такое происходит не всегда, но когда происходит, то приводит к невозможности отладки. Чтобы обойти проблему, достаточно внести любое изменение в выгруженную в каталог отладки обработку и выполнить интерактивную команду печати ещё раз.

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

 

Заключение

Вот такие вот дела, ребята. Ставьте плюсы, делитесь с коллегами, пишите свои мысли и предложения по развитию такого подхода к отладке.

См. также

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

1800 руб.

21.11.2024    4948    20    15    

24

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Добавим метки в новый документ средствами БСП.

10.02.2025    4611    John_d    24    

49

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Расскажу, как использовать полезный функционал - инструментарий разработчика «1С:Библиотека стандартных подсистем» (БСП) в своих объектах метаданных. Статья будет полезна как шпаргалка при написании собственных объектов метаданных.

27.12.2024    5018    PROSTO-1C    16    

49

БСП (Библиотека стандартных подсистем) Программист Бесплатно (free)

Синтакс-помощник БСП - справочник по Библиотеке Стандартных Подсистем, профессиональный инструмент разработчика с интуитивно понятным интерфейсом. Читайте в статье как использовать все возможности справочника и сделать работу с БСП более комфортной и эффективной.

11.12.2024    4744    gorenski    0    

8

БСП (Библиотека стандартных подсистем) Менеджеры внешних отчетов Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом Абонемент ($m)

За последние лет 5 несколько раз сталкиваюсь с проблемой на разных проектах (в конфигурациях 1С:ERP, 1С:ERP УХ и многих других, основанных на БСП), когда много пользователей (около 30 тысяч) в информационной базе, время добавления доступа для пользователей занимает значительное время. Открытие списка занимает от 10 до 15 секунд, и каждое изменение списка еще примерно столько же.

1 стартмани

10.12.2024    1300    Iaskeliainen    2    

8

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Некоторые нюансы, если вы захотите создавать свои расширения. Доработка отчета "Связанные документы" для отражения документов расширения. Печатные формы с шаблоном Word.

20.11.2024    4038    milkers    3    

14

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

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

24.10.2024    2430    PROSTO-1C    0    

19
Оставьте свое сообщение