Параметры запуска 1с бсп
1. Как запустить фоновое задание из модуля внешней обработки используя БСП
После тщетных попыток запустить в фоне процедуру модуля объекта внешней обработки, я все-таки решил глубже копнуть все механизмы длительных операций БСП. Все процедуры выполнения кода в фоне из подсистемы "Длительные операции" работают на сервере. То есть все происходит так: берется внешняя обработка, хранящаяся в справочнике "ДополнительныеОтчетыИОбработки", разворачивается на сервере (вот тут ключевой момент) и из этого экземпляра обработки выполняются указанные процедуры / функции модуля объекта (см. процедуру "ЗапуститьФоновоеЗаданиеСКонтекстомКлиента" модуля "ДлительныеОперации" БСП 3.х). Если вы вызываете ту же самую обработку из "файл-открыть", то БСП тупо пытается запустить указанные методы из обработки на сервере, в то время как обработка находится на клиенте.
Выходом было создать копию внешней обработки на сервере и запустить процедуру ее (копии) модуля объекта в фоне. Для этого, при открытии формы я помещал обработку во временное хранилище и тут же создавал копию на сервере в временном файле. Имя файла на сервере хранил в реквизите формы.
Ну вот, собственно и все. Осталось только правильно вызвать процедуру из модуля объекта копии обработки на сервере.
Ниже приведенный способ, используемый мной, не является идеальным, но прекрасно работает и используется мной уже не один год.
Я думаю, что многим приходилось сталкиваться с тем, что на сервере надо было подтвердить разрешение на запуск com-соединения. И все выключали защиту от опасных действий в профиле пользователя, чего делать не рекомендуется. Я пошел другим путем. Создаю две экспортные процедуры в модуле объекта внешней обработки: одна - непосредственно функция, которая будет выполнять необходимые действия и другая, которая вызовет первую с отключенным контролем прав доступа профиля.
Выглядит это так:
То есть, я создал еще один экземпляр самой себя без контроля прав (не в безопасном режиме и с отключением предупреждений защиты от опасных действий).
Пример использования, созданный из обработки демонстрационной конфигурации БСП прилагается (создавалась на платформе 8.3.13.1513, совместима с любой платформой 8.3, которая поддерживает БСП 3.0 и старше)
Предупреждение. Нельзя использовать реквизиты и табличные части внешней обработке в процедурах/функциях, выполняемых в фоне. Данные реквизиты должны быть переданы непосредственно в вызываемую процедуру/функцию из модуля формы.
Привет всем! Продолжаем цикл статей по возможностям асинхронной работы платформы 1с в рамках конфигурации разработчика - Библиотеки стандартных подсистем (БСП).
В предыдущей статье мы рассмотрели базовый - рабочий процесс-функционал для запуска длительных операций, используя основную для этого функцию - ДлительныеОперации.ВыполнитьВФоне.
Согласно последним рекомендациям БСП (версия 3.1.3.303) предлагается использовать более современные функции для работы с длительными операциями - это ВыполнитьПроцедуру и ВыполнитьФункцию.
Но, а кто хочет научиться работать с функционалом длительных операций вообще в рамках БСП - прошу ознакомиться с первой частью моей статьи - Гарантированно рабочий пример использования длительных операций на БСП с отображением прогресса. [Часть 1] .
Итак, перейдем к рассмотрению функции БСП ВыполнитьПроцедуру:
Рабочий пример функционала БСП "ВыполнитьПроцедуру "
В данном разделе я привожу рабочий код внешней обработки для запуска метода "Выполнить процедуру". Будем "отлавливать" статус методом формы "выполнить процедуру" (без излишеств).
В общем виде "на входе" данная функция выглядит вот так (до 7 параметров):
а вот и код обработки:
Код внешней обработки с примером "ВыполнитьПроцедуру"Вышенаписанного кода достаточно. Все будет работать.
Структура выполняемой процедуры для длительной операции "ВыполнитьПроцедуру "
В данном разделе, я привожу пример процедуры для общего серверного модуля, чтобы код из раздела выше - отработал. Это - самая обычная процедура - фактически - это любая процедура из конфигурации (расширения):
Рабочий пример функционала БСП "ВыполнитьФункцию "
Теперь, рассмотрим еще одну функцию выполнения длительной операции "ВыполнитьФункцию". В общем виде она выглядит вот так - до 7-ми входящих параметров:
Структура выполняемой процедуры для длительной операции "ВыполнитьФункцию "
Функция в общем модуле будет выглядеть вот так (тоже "любая" функция из конфигурации или расширения):
Для примера использования данной функции - я возвращаю в ней количество элементов в массиве.
Все, мы рассмотрели базовое применение двух относительно новых методов библиотеки стандартных подсистем ВыполнитьПроцедуру и ВыполнитьФункцию. Переходим к выводам и итогам.
Выводы и итоги
В данной части материала о длительных операциях - мы рассмотрели новые и рекомендуемые методы БСП - "ВыполнитьПроцедуру" и "ВыполнитьФункцию". Рассмотрели как их запускать, какие параметры передавать, как отслеживать и получать результат выполнения. Надеюсь, что данный материал будет вам максимально полезен - методики современные, сэкономят вам время. Я постарался описать их наиболее просто и без излишеств.
Основной и очень существенный плюс, на мой взгляд, использования этих методов - возможность уже брать готовые функции и процедуры конфигурации (расширения) и запускать их в асинхронном режиме. Что говорить - БСП существенно развивается.
Спасибо, что дочитали данную статью до конца. В своей статье я использовал БСП версии 3.1.3.303 и платформу 1с 8.3.17.1549.
Другие материалы
Так же прошу ознакомиться с другими моими статьями по БСП и типовым конфигурациям:
Из документации к БСП:
РежимОтладки
Упрощает отладку кода. В частности:
● все длительные операции выполняются сразу, без запуска фонового задания (кроме отдельных операций, которые всегда должны выполняться в фоновом задании, например, обновление параметров работы программы конфигурации без учета расширений конфигурации);
● при разработке расширений конфигурации возможен запуск с установленными расширениями конфигурации, которые в данный момент открыты в конфигураторе (при условии, что версия конфигурации и версии расширений не менялись).
Соответственно, если ты свои выполняемые в фоне процедуры запускаешь через программных интерфейс базовой функциональности БСП, например, через функцию ВыполнитьВФоне (может применяться совместно с функцией ДлительныеОперацииКлиент.ОжидатьЗавершение), то наличие параметра "РежимОтладки" даст возможность отлаживать код без запуска фонового задания.
(22) :)
Изначально ТС поднял вопрос об их отключении обработкой на конкретный момент времени. Я и задумался. Вроде ж их никак не обойти, а значит - и не отключить.
А вообще в контексте темы при отладке очень бесит, когда пытаешься использовать такой удобный инструмент, как остановку по ошибке, но из-за мудаков, использующих эксепшны направо и налево для обработки стандартных ситуаций, это становится далеко не таким удобным.
(23) я думал ОтключитьОбработчикОжидания подойдет.
Синтаксис:
Тип: Строка.
Имя процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля, используемой в качестве обработчика ожидания.
Описание:
Отключает подключенный ранее при помощи процедуры ПодключитьОбработчикОжидания вызов процедуры через определенный интервал времени.
Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
Пример:
Есть конфигурация, которая облегчает работу разработчика, избавляя его от таких «тривиальных» работ – это «Библиотека стандартных подсистем» (БСП), которая включает в себя набор универсальных функциональных подсистем и фрагменты раздела «Администрирование», предназначенных для использования в прикладных решениях на платформе «1С:Предприятие». Библиотека не является законченным (с предметной точки зрения) прикладным решением, но при этом подсистемы библиотеки могут использоваться в конфигурации-потребителе как все вместе, так и по отдельности. И для этого в БСП входит специальный помощник внедрения, использование которого помогает существенно сэкономить время при разработке новой конфигурации.
Сам помощник выполнен в виде пошагового мастера, с помощью которого разработчик указывает нужные ему подсистемы, а мастер создаст заготовку, с которой можно работать в дальнейшем. По сути дела мы получаем заготовку для будущей конфигурации.
Запустим БСП (у нас редакция 2.3, версия 2.3.3.63), перейдем в раздел «Инструменты разработчика» U94; «Первое внедрение БСП»:
Здесь нам откроется «Помощник внедрения БСП». Сам помощник выглядит как пошаговый помощник, где на первом этапе мы выбираем подсистемы, которые будут нам нужны в разрабатываемой конфигурации. После этого нужно указать файл (в формате xml), в котором сохраним эти настройки.
После чего переходим ко второму этапу: указываем дополнительные параметры для каждой из выбранных подсистем.
После выбора всех параметров система проверит, все ли было корректно выбрано и предложит разные варианты отслеживания ошибок (Таблица внедрения подсистем или Отчет по внедрению БСП).
В статье кратко описана работа с «Помощником внедрения БСП», потому что этот инструмент не очень популярен. Чаще на практике разработчики действуют по такой схеме: на пустую конфигурацию устанавливают необходимые подсистемы БСП (здесь еще может помочь «Помощник внедрения БСП»), но обычно с БСП на новую пустую конфигурацию переносят все подсистемы.
Далее рассмотрим на примере, когда с БСП в «1С:Бухгалтерия предприятия» (БП) нужно перенести некую подсистему.
У нас есть две конфигурации: первая (основная) - со всеми подсистемами БСП, вторая (файла) - БП.
Далее порядок действий следующий:
1. Включить возможность редактирования основной конфигурации.
2. Вызвать меню Конфигурация - Сравнить, объединить с конфигурацией из файла.
3. Выбрать файл с расширением cf конфигурации БП.
4. На предложение постановки на поддержку ответить Да.
5. Далее в окне сравнения - снять все флажки (снять флажок с корневого элемента).
6. Выполнить Действия - Отметить по подсистемам.
7. Отметить подсистемы, которые отсутствуют в нашей основной конфигурации – взять из файла, но подсистемы, которых нет в конфигурации из файла, нужно оставить в основной конфигурации (по умолчания так и будет), далее нажать Установить.
8. Отметить к объединению свойства корневого элемента: Основные роли, Модуль управляемого приложения, Модуль сеанса, Модуль внешнего соединения, Модуль обычного приложения, Режим использования модальности, Режим использования синхронных вызовов расширений платформы и внешних компонент, Режим совместимости интерфейса, Режим совместимости. Нажать Выполнить.
9. В окне Настройка правил поддержки - Ок.
10. Обновить конфигурацию базы данных (F7).
11. Далее, скорее всего, появится следующая ошибка:
«… (объект входит в состав одноименного общего реквизита)» или «… : Использование определяемых типов в режиме совместимости Х.Х.Х. (к примеру, автор) и ниже недопустимо» ; «ОбщаяКартинка: Имя не уникально!»
12. Для объекта, который входит в состав одноименного общего реквизита – снять с поддержки, удалить объект и ссылки на него. Выполнить поиск ссылок на удаляемые объекты – удалить ссылки.
13. Поменяйте режим совместимости выше Х.Х.Х.
14. Обновить конфигурацию базы данных (F7). Далее, если возвращаетесь на пункт 11, выполнить пункти 12 и 13, потом 14.
В принципе это и все – «автоматическая» часть работы закончена. Начинается самый «интересный» этап работ: если Вы уже подумали, что конфигурация «взлетела», то, скорее всего, Вы сильно ошибаетесь.
Для начала проверяйте общие модули, включены ли подсистемы в командный интерфейс и прочее моменты. Когда все «как бы готово», приступайте к отладке.
Находите внедренную подсистему, и далее работаете так: если все хорошо, то Вас можно поздравить, если же нет – возвращаетесь в конфигуратор и удаляете код неиспользуемых подсистем либо добавляйте то, что нужно.
И так выполняете отладку до тех пор, пока не убедитесь в отсутствии ошибок.
Читайте также: