Перезапуск внешней обработки/отчета УФ
Не прошло и 5-и лет. А нет, прошло:) Как снова захотелось перезапускать внешнюю обработку по кнопочке Ф5.
Ранее попытка была тут v8: Как на сервере получить объект созданной внешней обработки по уникальному ид
Написал себе. Мож кому еще пригодится. На отчетах не тестил, в промышленной эксплуатации тоже еще не опробовал. Так что не пинайте.
В модуль управляемой формы добавляем следующий текст и в режиме предприятия жмакаем Ф5 для перезапуска.
&НаКлиенте
Процедура РезетУФ(п1=Неопределено,п2=Неопределено,п3=Неопределено,п4=Неопределено) Экспорт
тзп1 = ТипЗнч(п1);
Если тзп1 = Тип("Булево") Тогда //Разместился файл
ПолучитьФорму(?(СтрЗаканчиваетсяНа(п3,".epf"),"ВнешняяОбработка","ВнешнийОтчет")+"."+РезетУФНаСервере(п2,п3)+".Форма",Новый Структура("ИспользуемоеИмяФайла",п3),,Истина).Открыть();
Закрыть();
ИначеЕсли тзп1 = Тип("КомандаФормы") Тогда
НачатьПомещениеФайла(Новый ОписаниеОповещения("РезетУФ",ЭтаФорма),,РезетУФНаСервере(""),Ложь);
КонецЕсли;
КонецПроцедуры
Функция РезетУФНаСервере(п1=Неопределено,п2=Неопределено)
рез = Неопределено;
Если п1=Неопределено и п2=Неопределено Тогда //Добавим кнопку
ЗаполнитьЗначенияСвойств(ЭтаФорма.Команды.Добавить("РезетУФ"),Новый Структура("Действие,Подсказка","РезетУФ",РезетУФНаСервере("")));
ЗаполнитьЗначенияСвойств(ЭтаФорма.Элементы.Добавить("кнРезетУФ",Тип("КнопкаФормы"),ЭтаФорма.КоманднаяПанель),Новый Структура("ТолькоВоВсехДействиях,СочетаниеКлавиш,ИмяКоманды",Истина,Новый СочетаниеКлавиш(Клавиша.F5),"РезетУФ"));
ИначеЕсли п1<>Неопределено и п2<>Неопределено Тогда //Подключим обработку или отчет
Файл = Новый Файл(п2);
ЗащитаОтОпасныхДействий = Новый ОписаниеЗащитыОтОпасныхДействий;
ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
рез = ?(СтрЗаканчиваетсяНа(п2,".epf"),ВнешниеОбработки,ВнешниеОтчеты).Подключить(п1,Файл.ИмяБезРасширения,Ложь,ЗащитаОтОпасныхДействий);
ИначеЕсли п1<>Неопределено и п2=Неопределено Тогда //Определим имя файла
Если Не ЭтаФорма.Параметры.Свойство("ИспользуемоеИмяФайла",рез) Тогда
рез = НРег(РеквизитФормыВЗначение("Объект").ИспользуемоеИмяФайла);
Если СтрНачинаетсяС(рез,"e1cib") Тогда
рез = Команды.РезетУФ.Подсказка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат рез;
КонецФункции
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
РезетУФНаСервере();
КонецПроцедуры
Как программно перезапустить обработку 1с
Для запуска и отладки внешней обработки вы можете использовать один из имеющихся в рабочей области проектов конфигурации, либо можете создать новый проект специально для этой цели.
В этом примере мы рассмотрим оба сценария отладки.
Если внешняя обработка предназначена для работы с конкретной конфигурацией или вы хотите отлаживать обработку на определенных данных, содержащихся в информационной базе, то сначала вам нужно импортировать конфигурацию из этой базы в 1C:EDT — подробнее. После этого вы можете перейти к пункту 5.
Если же в вашей рабочей области нет ни одного проекта и внешняя обработка может быть запущена с любой конфигурацией, то вы можете воспользоваться следующими шагами.
Перезапуск внешней обработки/отчета УФ
Не прошло и 5-и лет. А нет, прошло:) Как снова захотелось перезапускать внешнюю обработку по кнопочке Ф5.
Ранее попытка была тут v8: Как на сервере получить объект созданной внешней обработки по уникальному ид
Написал себе. Мож кому еще пригодится. На отчетах не тестил, в промышленной эксплуатации тоже еще не опробовал. Так что не пинайте.
В модуль управляемой формы добавляем следующий текст и в режиме предприятия жмакаем Ф5 для перезапуска.
&НаКлиенте
Процедура РезетУФ(п1=Неопределено,п2=Неопределено,п3=Неопределено,п4=Неопределено) Экспорт
тзп1 = ТипЗнч(п1);
Если тзп1 = Тип("Булево") Тогда //Разместился файл
ПолучитьФорму(?(СтрЗаканчиваетсяНа(п3,".epf"),"ВнешняяОбработка","ВнешнийОтчет")+"."+РезетУФНаСервере(п2,п3)+".Форма",Новый Структура("ИспользуемоеИмяФайла",п3),,Истина).Открыть();
Закрыть();
ИначеЕсли тзп1 = Тип("КомандаФормы") Тогда
НачатьПомещениеФайла(Новый ОписаниеОповещения("РезетУФ",ЭтаФорма),,РезетУФНаСервере(""),Ложь);
КонецЕсли;
КонецПроцедуры
Функция РезетУФНаСервере(п1=Неопределено,п2=Неопределено)
рез = Неопределено;
Если п1=Неопределено и п2=Неопределено Тогда //Добавим кнопку
ЗаполнитьЗначенияСвойств(ЭтаФорма.Команды.Добавить("РезетУФ"),Новый Структура("Действие,Подсказка","РезетУФ",РезетУФНаСервере("")));
ЗаполнитьЗначенияСвойств(ЭтаФорма.Элементы.Добавить("кнРезетУФ",Тип("КнопкаФормы"),ЭтаФорма.КоманднаяПанель),Новый Структура("ТолькоВоВсехДействиях,СочетаниеКлавиш,ИмяКоманды",Истина,Новый СочетаниеКлавиш(Клавиша.F5),"РезетУФ"));
ИначеЕсли п1<>Неопределено и п2<>Неопределено Тогда //Подключим обработку или отчет
Файл = Новый Файл(п2);
ЗащитаОтОпасныхДействий = Новый ОписаниеЗащитыОтОпасныхДействий;
ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
рез = ?(СтрЗаканчиваетсяНа(п2,".epf"),ВнешниеОбработки,ВнешниеОтчеты).Подключить(п1,Файл.ИмяБезРасширения,Ложь,ЗащитаОтОпасныхДействий);
ИначеЕсли п1<>Неопределено и п2=Неопределено Тогда //Определим имя файла
Если Не ЭтаФорма.Параметры.Свойство("ИспользуемоеИмяФайла",рез) Тогда
рез = НРег(РеквизитФормыВЗначение("Объект").ИспользуемоеИмяФайла);
Если СтрНачинаетсяС(рез,"e1cib") Тогда
рез = Команды.РезетУФ.Подсказка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат рез;
КонецФункции
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
РезетУФНаСервере();
КонецПроцедуры
Перезапуск обработки или отчета с сохранением введенных данных (Обычные формы) !
Приведенная ниже функция перезапускает внешнюю обработку или отчет с сохранением введенных на форме данных. Таких как:
- Реквизиты
- Табличные части
- Таблицы значений
- Дерево значений
- Отбор компоновщикаСКД
- Выбранные поля компоновщикаСКД
- Список значений
Обработку легко дорабатывать и связывать с другим функционалом, например, перед перезапуском открывать форму, где можно выбрать, что перезаполнить, но это уже другие заморочки.
Практически везде пишут только код перезапуска. Пользуйтесь на здоровье.
Специальные предложения











- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
Я правильно ее использую? В форме ПриОткрытии запускаю это процедуру?
Блин, сам не догадался, и уже после увидел сообщение.
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
Просмотры 10962
Загрузки 0
Рейтинг 37
Создание 18.09.15 00:54
Обновление 18.09.15 00:54
№ Публикации 399893
Тип файла Нет файла
Конфигурация Конфигурации 1cv8
Операционная система Windows
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Не указано

См. также
Программные перечисления, ч.2: приемы кэширования при разработке Промо
Все знают, что такое кэш, и зачем он нужен. Но в 1С разработчик обычно использует кэширование только на уровне конфигурации, а в какой-нибудь обработке скорее ломает голову над запросом — как получить все данные за один заход. Хочется рассказать о том, как можно добиться хороших результатов с стратегией "разделяй и властвуй".
30.10.2017 30257 unichkin 18
Система контроля ведения учета [БСП]
В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.
18.07.2022 3577 quazare 8
[БСП] Выводим qr-код в печатную форму счета для оплаты в мобильном приложении банка или платежном терминале
Используя БСП выведем qr-код в печатную форму счета.
29.06.2022 2991 John_d 7
Выгрузка данных в Excel с добавлением формул (нюансы формирования формул)
Итак, я здесь описываю выгрузку отчета в Excel с добавлением пустых колонок для заполнения внутри самого Excel + колонки с формулами для выполнения расчетов на базе выгруженного и введенного руками в Excel. На самом деле публикация появилась по причине моих проблем, возникших при написании формул. Все остальное вроде штатно, но вдруг кому пригодится.
30.05.2022 1839 Zlohobbit 5
Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо
Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.
11.07.2007 58899 tormozit 52
Хитрости СКД. Часть 3
Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.
28.05.2022 5665 milkers 11
Базовые принципы работы с регламентными заданиями подсистем БСП
В очередной публикации рассмотрим некоторые базовые приемы работы с регламентными заданиями в рамках библиотеки стандартных подсистем
22.05.2022 5193 quazare 24
Модули общего назначения — готовые полезные функции и процедуры конфигураций на БСП
В данной статье я рассматриваю несколько полезных "классических" функций и процедур для работы с данными, которые уже встроены в БСП и готовы к использованию.
25.04.2022 7356 quazare 11
Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо
Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки
10.09.2017 56111 tormozit 79
Вывод табличных документов с разной ориентацией страниц в один pdf файл
Привожу код для вывода нескольких табличных документов c разной ориентацией страниц в один файл pdf.
06.04.2022 2031 sdjoker 5
Полезный код для программистов 1С (часть 3). Подготовка печатных форм + подсистема Управление печатью (БСП)
Мы все любим 1С, не так ли? Вот дает 1С прекрасный механизм возможности модификации макетов печатных форм в БСП. А из всех рекомендаций это получение макета и заполнение параметров областей. И вы спросите: "А что не так. ты печатные формы накодить не можешь без указаний сверху?". Да вот в том то и дело, что я могу все. А вот пользователям от такого механизма пользы 0, если из всех доступных изменений остаются только шрифты, да текст произвольный накинуть. А ведь можно больше, надо только соблюдать несколько правил при подготовке печатных форм.
07.03.2022 7149 vandalsvq 0
Убираем параметры из отбора СКД
Заметка о некоторых технических нюансах параметров данных и отборов СКД.
17.02.2022 4191 Yashazz 28
Универсальные функции с примерами использования Промо
14 универсальных функций, с примерами использования — для обычного и управляемого интерфейса
26.02.2016 45127 unichkin 48
Конвертируем печатную форму pdf в картинку (jpg, gif, png и прочие) на сервере
Была поставлена интересная задача конвертировать печатную форму в файл картинку. По условию задачи клиенту на почту нужно присылать только файл картинку (jpg, gif).
22.12.2021 4719 John_d 25
Несколько простых приемов для удобной работы в конфигураторе
Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С — в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.
12.11.2021 11016 acces969 95
Простейший способ учета изменений управляемых форм объектов 1С
Описание методологии, позволяющей контролировать список изменений форм + вспомогательные функции программного изменения форм. Пригодятся при внесении изменений в расширениях, если есть необходимость видеть и контролировать все сделанные с формой изменения.
02.11.2021 1813 avalakh 12
Выполнение произвольного кода в фоновых заданиях Промо
Если надо быстро провести 100`000 документов.
13.01.2016 26113 unichkin 13
Функции для преобразования справочников и документов в соответствие и обратно
Функции для преобразования справочников и документов в соответствие и обратно. Предназначены для передачи данных между одинаковыми и не очень конфигурациями или как очередной вариант сохранения (архивирования) объектов перед редактированием с последующим восстановлением.
01.11.2021 1566 avalakh 5
Программно свернуть/развернуть узел динамического списка (с основной таблицей). Жирная точка над всеми "i".
Какой пользователь не мечтал поменьше тыркать кнопкой? Особенно в малюсенькие +/- в "древесных" динамических списках. Если вас тоже озадачили, чтобы, при выборе узла дерева сами развернулись все его вложенные элементы , а при выборе другого узла — так же автоматом свернулась ранее развернутая ветка (причем эти узлы могут находится в разных "отношениях" друг с другом). То вам — сюда.
08.10.2021 3119 e-9 13
Взаимодействие с api Честный знак (Молочная продукция)
Обзор основных примеров взаимодействия с Честным знаком по api для нетиповых конфигураций.
30.08.2021 11022 user5300 64
Ускорение отладки управляемых форм Промо
Ускорение отладки управляемых форм в больших неповоротливых конфигурациях, когда заказчик просит что-то и сам не знает, что из этого получится.
23.05.2015 15611 moolex 5
Из Word в табличный документ
Быстро и просто: текст, списки, таблицы. Готовый код
18.08.2021 3329 Yashazz 6
Префиксация объектов — полезный типовой функционал БСП
В данной публикации предлагаю рассмотреть основные типовые возможности библиотеки стандартных подсистем (БСП), касаемые префиксации объектов конфигураций.
21.06.2021 9030 quazare 4
Своя функция &Вместо &ИзменениеИКонтроль
Как добавить контроль в расширения, если не доверяешь аннотации &ИзменениеИКонтроль.
06.06.2021 13418 AntonProgma 171
УстановитьСсылкуНового() как ход оптимизации! Промо
Для себя открыл новую возможность применения данного метода в типовых конфигурациях. Особенность чрезвычайно интересная при загрузке справочников.
22.10.2014 61949 logarifm 85
Предотвращение многократного вызова "ПриПолученииДанных" во время поиска в табличном поле в обычных формах
Долго искал решение: как при выводе строк заполнить значениями колонки, которые созданы программно, чтобы, не было тормозов при стандартном поиске. И с минимальными изменениями (легко контролируемыми, при обновлении).
07.04.2021 3113 Vlad_CK 9
Добавление печатей на PDF документ 1С + ActiveX
Наложение информации на PDF документ из 1С.
30.12.2020 2446 7183847 0
Генератор QR кодов для 1С без компонент через HTTP API
Самый простой, на мой взгляд, способ получить QR код для 1СV8. Без внешних компонент, как говорится, бесплатно, без смс и регистрации))
17.12.2020 8115 shell_maxim 28
[8.2] Глобальные переменные в контексте сервера (управляемое приложение) Промо
Можно ли в 8.2 на сервере хранить ссылку на объект внешней компоненты? Можно! Рассмотрим на примере. Эта статья — отчет на вопрос в http://infostart.ru/forum/forum14/topic29689/
09.12.2009 39238 Душелов 34
Сохранение настроек
Делюсь еще одним не самым очевидным способом хранения настроек в базах на БСП без доработки конфигурации. Весь код в статье.
22.11.2020 8077 ixijixi 8
Сохранение настроенного запроса набора данных СКД
Как сохранить запрос набора данных СКД в том виде, каким он будет выполнен системой для открытия в консоли запросов с диска ИТС.
09.11.2020 2199 Serge R 0
Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)
Пример рекурсивной функции, при помощи которой в табличный документ можно выводить верхний или нижний колонтитулы с произвольным содержимым, а также делать повтор шапки таблицы (или таблиц, если их несколько).
07.10.2020 10867 ellavs 6
Проверка заполненности реквизитов через подписку на событие Промо
Навеяло от. http://infostart.ru/public/203664/ но с другого бока. Пришли пингвины, заявили. (а база перекурочена предшественниками как черепаха богом) хотим чтоб если есть в документе такой то реквизит, чтоб он всегда был заполнен. или же никогда там не выбирались группы и перечислили наименования справочников при ссылке на которые не должно быть пустот. И что? Я рыжий сидеть дня два прсматривать каждый из почти двух сотен доков? Потому и уродились три подписки на события. Описание в тексте Выбор групп проверяется на событие ПередЗаписью а проверка реквизитов на событии ОбработкаПроверкиЗаполнения
16.10.2013 14664 ser6702 7
Лайфхаки для разработчиков 1С. Часть 1
Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое. В этой статье публикуем первую часть.
Автоматический перезапуск службы агента сервера 1С — скрипт + расписание
Добрый день. Поступила заявка от 1С-ников, что необходимо ночью перезапускать службу агента сервера 1С на 8-ке. Как многим известно, что данную службу просто так нельзя «перезапустить», иначе зависшие сессии так и остаются «висеть», ее необходимо сначала остановить, а после снова запустить. Порывшись немного в интернете, пересмотрев кучу скриптов — собрал из многообразия один, не большой, полностью рабочий, уже оттестировал его на серверах, теперь выкладываю на ваше обозрение и пользование.
Скрипт перезапуска службы агента сервера 1С
Собственно сам скрипт:
- Первым делом отключаем уведомления о выполнении, пусть это все работает в фоновом режиме
- Далее указываем где будет хранится наш лог-файл, куда будет писаться дата и время запуска и остановки службы (можно не писать лог, но на всякий случай пусть будет)
- Пишем в Лог дату и время начала остановки
- Останавливаем службу агента сервера, в моем случае она называется так — 1C:Enterprise 8.3 Server Agent (1640) и пишем ее статус в лог файл (ниже приведу пример что в логе появляется)
- Далее делаем задержку в 15 секунд, чтобы дождаться, пока служба останавливается (пинг равен примерно 1 секунде, первый проходит моментально, поэтому делаем время в секундах +1)
- Опять записываем в лог дату в время
- Запускаем службу обратно
- Делаем задержку в 5 минут, если служба не остановилась за 15 секунд, то она не запустится естественно, что то видимо зависло сильно и будем ждать 5 минут.
- Далее проверяем, запустилась ли служба и работает ли она? Если не работает, то выполняем ее повторный старт.
- Завершаем работу с cmd.
Пример лог файла:
12.10.2017 0:00:00,10
Служба «Агент сервера 1С:Предприятия 8.3 (1640)» останавливается.
Служба «Агент сервера 1С:Предприятия 8.3 (1640)» успешно остановлена.
12.10.2017 0:00:15,33
Служба «Агент сервера 1С:Предприятия 8.3 (1640)» запускается.
Служба «Агент сервера 1С:Предприятия 8.3 (1640)» успешно запущена.
12.10.2017 1:00:00,15
Служба «Агент сервера 1С:Предприятия 8.3 (1640)» останавливается.
Служба «Агент сервера 1С:Предприятия 8.3 (1640)» успешно остановлена.
12.10.2017 1:00:15,37
Служба «Агент сервера 1С:Предприятия 8.3 (1640)» запускается.
Служба «Агент сервера 1С:Предприятия 8.3 (1640)» успешно запущена.
Настройка выполнения *.bat по расписанию
Для начала идем в «Пуск -> панель управления -> Администрирование» и запускаем там «Планировщик заданий«.
Выбираем пункт «Создать задачу«:
На вкладке «Общие» задаем имя задания, его описание и пользователя, от которого оно будет выполняться. По умолчанию там будет пользователь, под которым вы вошли в данный момент в систему.
Далее идем в закладку Триггеры и настраиваем, когда нам надо запускать задачу. В моем случае это ежедневно выполнять в 00:00 и повторять ее каждый час в течении 7 часов.
Далее идем во вкладку Действия и создаем действие на выполнения скрипта.
Все, на этом все готово. Как можем увидеть в журнале, задача с такими параметрами успешно выполняется и ровно то время, которое у нас задано в скрипте:
Программный запуск зарегистрированной внешней обработки или отчёта
Если у вас в базе имеются зарегистрированные внешние обработки или отчёты, то иногда может возникнуть необходимость запускать их программно. Например, открыть внешний отчёт при нажатии на кнопку в интерфейсе пользователя.
Предлагаю универсальную процедуру для открытия внешних обработок/отчетов по коду элемента справочника ВнешниеОбработки.
Данную процедуру можно поместить в общий модуль и вызывать при необходимости из любого модуля конфигурации.
Механизм заданий
Механизм заданий предназначен для выполнения какой-либо прикладной функциональности по расписанию или асинхронно.
Механизм заданий решает следующие задачи:
- возможность определения регламентных процедур на этапе конфигурирования системы;
- выполнение заданных действий по расписанию;
- выполнение вызова заданной процедуры или функции асинхронно, т. е. без ожидания ее завершения;
- отслеживание хода выполнения определенного задания и получение его статуса завершения (значения, указывающего успешность или неуспешность его выполнения);
- получение списка текущих заданий;
- возможность ожидания завершения одного или нескольких заданий;
- управление заданиями (возможность отмены, блокировка выполнения и др.).
Механизм заданий состоит из следующих компонентов:
- метаданных регламентных заданий,
- регламентных заданий,
- фоновых заданий,
- планировщика заданий.
Регламентные задания предназначены для выполнения прикладных задач по расписанию. Регламентные задания хранятся в информационной базе и создаются на основе метаданных, определяемых в конфигурации. Метаданные регламентного задания содержат такую информацию, как наименование, метод, использование и т. д.
Регламентное задание имеет расписание, которое определяет, в какие моменты времени нужно выполнять связанный с регламентным заданием метод. Расписание, как правило, задается в информационной базе, но может быть задано и на этапе конфигурирования (например, для предопределенных регламентных заданий).
Фоновые задания предназначены для выполнения прикладных задач асинхронно, реализуются средствами встроенного языка.
Планировщик заданий используется для планирования выполнения регламентных заданий. Для каждого регламентного задания планировщик периодически проверяет, соответствует ли текущая дата и время расписанию регламентного задания. Если соответствует, планировщик назначает такое задание на выполнение. Для этого по данному регламентному заданию планировщик создает фоновое задание, которое и выполняет реальную обработку.
18.2. Фоновые задания
18.2.1. Общая информация
Фоновые задания удобно использовать для выполнения сложных вычислений, когда результат вычисления может быть получен через продолжительное время. Механизм заданий имеет средства для выполнения таких вычислений асинхронно.
С фоновым заданием связан метод, который вызывается при выполнении фонового задания. В качестве метода фонового задания может выступать любая процедура или функция не глобального общего модуля, которую можно вызвать на сервере. Параметрами фонового задания могут быть любые значения, которые разрешено передавать на сервер. Параметры фонового задания должны в точности соответствовать параметрам той процедуры или функции, которую оно вызывает. Параметры фонового задания, в сериализованном виде, не могут превышать размер в 1 Гбайт. Если размер сериализованных параметров фонового задания превышает значение 1 Гбайт ‑ формируется исключение. Если методом фонового задания является функция, то ее возвращаемое значение игнорируется.
Фоновое задание может иметь ключ ‑ любое прикладное значение. Ключ вводит ограничение на запуск фоновых заданий ‑ в единицу времени может выполняться только одно фоновое задание с определенным значением ключа и заданным именем метода фонового задания (имя метода состоит из имени модуля и имени процедуры или функции). Ключ позволяет группировать фоновые задания, имеющие одинаковые методы, по определенному прикладному признаку с тем, чтобы в рамках одной группы выполнялось не более одного фонового задания.
Создание и управление фоновыми заданиями выполняются программно из любого соединения. Создавать фоновое задание разрешено любому пользователю. При этом оно выполняется от имени того пользователя, который его создал. Получать задания, а также ожидать их завершения разрешено из любого соединения пользователю с административными правами либо пользователю, который создал эти фоновые задания.
Фоновое задание является чисто сеансовым объектом, но не принадлежит какому-либо пользовательскому сеансу. Для каждого задания создается специальный системный сеанс, выполняющийся от имени того пользователя, который выполнил вызов. Фоновые задания не имеют сохраняемого состояния.
Фоновое задание может порождать другие фоновые задания. В клиент-серверном варианте это позволяет распараллеливать сложные вычисления по рабочим процессам кластера, что может значительно ускорить процесс вычисления в целом. Распараллеливание реализуется порождением нескольких дочерних фоновых заданий с ожиданием завершения каждого из них в основном фоновом задании.
Фоновое задание имеет возможность помещать данные во временное хранилище вызывающего сеанса (см. здесь). Это может быть использовано, например, для передачи в вызывающий сеанс сформированного отчета или подготовленных для обработки данных. Передача данных из вызывающего сеанса в сеанс фонового задания невозможна.
Запуск фонового задания выполняется следующим образом:
- Выполняются служебные действия:
- Фиксируется факт запуска фонового задания в журнале регистрации;
- Устанавливаются параметры соединения с внешними источниками данных ;
- Устанавливается режим интерфейса и т. д.
- В модуле сеанса выполняется обработчик события УстановкаПараметровСеанса ;
- Выполняется собственно фоновое задание.
Завершившиеся успешно или аварийно фоновые задания хранятся в течение суток, а потом удаляются. История выполнения фоновых и регламентных заданий имеет следующие особенности:
● История хранится для каждой информационной базы;
● Хранится история выполнения:
● Фоновых заданий ‑ не более 1 000 заданий.
● Регламентных заданий ‑ не более 1 000 заданий. При этом система пытается хранить не менее 3 последних запусков для каждого различного регламентного задания. При превышении общего ограничения в 1 000 запусков, система будет пытаться обеспечить хранение 2 последних запусков для каждого регламентного задания, а потом 1.
● Системных фоновых заданий ‑ не более 1 000 запусков. В данном разделе речь идет о фоновых заданиях, которые инициируются системой для выполнения каких-либо действий (выполнение отчетов, поиск и т. д.).
18.2.2. Работа с фоновыми заданиями из встроенного языка
ПРИМЕЧАНИЕ. Примеры, приведенные в данном разделе, не являются законченными. Они предназначены только для демонстрации способов работы с фоновыми заданиями.
Управление фоновыми заданиями выполняется с помощью менеджера фоновых заданий (ФоновыеЗадания). С помощью менеджера фоновых заданий предоставляется возможность:
● Выполнить фоновое задание с передачей параметров (метод ФоновыеЗадания.Выполнить()). После запуска фонового задания возвращается объект, описывающий запущенное фоновое задание (ФоновоеЗадание).
● Получить список фоновых заданий, соответствующих некоторому отбору (метод ФоновыеЗадания.ПолучитьФоновыеЗадания()) или найти фоновое задание по уникальному идентификатору фонового задания (ФоновыеЗадания.НайтиПоУникальномуИдентификатору()).
● Ожидать завершение одного (ФоновоеЗадание.ОжидатьЗавершенияВыполнения()) или нескольких (метод ФоновыеЗадания.ОжидатьЗавершенияВыполнения()) ранее запущенных фоновых заданий с указанием времени ожидания.
Более подробно рассмотрим все этапы.
Для запуска фонового задания необходима экспортируемая процедура или функция, описанная в не глобальном общем модуле, который доступен на сервере. Параметры вызываемого метода необходимо перечислить в специальном массиве параметров. При этом порядок следования параметров в методе должен в точности соответствовать порядку элементов массива: самый левый параметр соответствует элементу массива с индексом 0. Все значения параметров фонового задания должны поддерживать сериализацию. Затем передается ключ и описание запускаемого фонового задания. Ключ используется для обеспечения уникальности запускаемого фонового задания.
В качестве фонового задания будет использоваться экспортный метод общего модуля с именем ВыгрузитьДанные(), расположенный в серверном общем модуле ОбщийМодульФоновые:
Для запуска фонового задания необходимо выполнить следующее:
В качестве параметра ОписаниеДанных будет передано значение переменной ВыгружаемыеДанные, в качестве значения параметра ПутьКФайлу будет передана строка c:\temp\data.dat. Для запускаемого фонового задания будет установлен ключ уникальности ВыгрузкаДанных и некоторое описание.
При запуске не выполняется ожидания завершения работы фонового задания. Вместо этого, после создания специального сеанса работы фонового задания и запуска метода фонового задания на выполнение, управление вернется в вызываемый код. При этом в качестве возвращаемого значения метода ФоновыеЗадания.Выполнить() будет получен объект, описывающий запущенное фоновое задание (типа ФоновоеЗадание). Этот объект будет помещен в переменную ЗаданиеВыгрузки.
С помощью описания фонового задания можно получить идентификатор фонового задания, который используется для поиска фонового задания (свойство УникальныйИдентификаторобъекта ФоновоеЗадание). При проверке состояния фонового задания (с помощью свойства фонового задания Состояние) следует помнить, что это состояние фиксируется на момент создания объекта ФоновоеЗадание и в дальнейшем не обновляется. Для проверки состояния необходимо перед каждой проверкой получать описание для проверяемого фонового задания:
При необходимости, работу конкретного экземпляра фонового задания можно прервать с помощью метода ФоновоеЗадание.Отменить(). При этом следует помнить, что после прерывания фонового задания необходимо реализовать «сборку мусора». Например, удалить временные файлы, которые могло порождать прерываемое фоновое задание.
После запуска фонового задания может потребоваться периодически проверять статус выполнения задания. Для этого предназначен метод ФоновоеЗадание.ОжидатьЗавершенияВыполнения(). В качестве параметра метода передается время, в течение которого ожидается изменение состояния фонового задания. В любом случае, не позднее, чем указанный таймаут, метод завершает свою работу и формирует объект ФоновоеЗадание, который описывает текущее состояние фонового задания (включая свойство Состояние).
Таким образом, ожидание завершения работы фонового задания можно выполнить следующим образом:
В примере таймаут установлен в 10 секунд (параметр метода ОжидатьЗавершенияВыполнения()). Если за 10 секунд фоновое задание не завершило свою работу ‑ цикл ожидания завершения будет продолжен. Если фоновое задание перестало выполняться (перестало быть активным), то конкретная причина завершения будет понятна по анализу свойства ФоновоеЗадание.Состояние.
Следует отметить, что ожидать завершения работы можно не только для одного фонового задания. У менеджера фоновых заданий существует аналогичный метод (ФоновыеЗадания.ОжидатьЗавершенияВыполнения()). Разница заключается в том, что в качестве параметра метода передается массив объектов ФоновоеЗадание, завершение которых необходимо отслеживать.
Фоновое задание в процессе своей работы может формировать сообщения пользователю (с помощью объекта СообщениеПользователю). Эти сообщения могут быть получены с помощью метода ФоновоеЗадание.ПолучитьСообщенияПользователю(). Сообщения можно получать как во время работы фонового задания, так и после завершения работы задания.
18.2.3. Фоновое задание и расширения
При старте фонового задания в сеансе фонового задания будут подключены те расширения, которые были подключены в родительском сеансе. В тоже время имеется возможность запустить фоновое задание таким образом, чтобы в сеансе фонового задания были подключены все расширения, зарегистрированные для текущей информационной базы и текущего набора разделителей. Для этого следует использовать метод РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(). Однако, в некоторых сценариях может потребоваться запускать фоновое задание совсем без расширений конфигурации. Для этого следует использовать метод РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеБезРасширений().
18.3. Регламентные задания
Регламентные задания используются, когда необходимо выполнить определенные периодические или однократные действия в соответствии с расписанием.
Регламентные задания хранятся в информационной базе и создаются на основе метаданных регламентного задания, определенных в конфигурации. Метаданные задают такие параметры регламентного задания, как вызываемый метод, наименование, ключ, возможность использования, признак предопределенности и др. При создании регламентного задания дополнительно можно указать расписание (может быть указано в метаданных), значения параметров метода, имя пользователя, от имени которого должно выполняться регламентное задание, и др.
Создание и управление регламентными заданиями выполняется с помощью встроенного языка из любого соединения и разрешены только пользователям, имеющим административные права.
ПРИМЕЧАНИЕ. При работе в файловом варианте создавать и редактировать регламентные задания возможно без запуска планировщика заданий.
С регламентным заданием связан метод, который вызывается при выполнении регламентного задания. В качестве метода регламентного задания может выступать любая процедура или функция неглобального общего модуля, которую можно вызвать на сервере. Параметрами регламентного задания могут быть любые значения, которые разрешено передавать на сервер. Параметры регламентного задания должны в точности соответствовать параметрам той процедуры или функции, которую оно вызывает. Если методом регламентного задания является функция, то ее возвращаемое значение игнорируется.
Регламентное задание может иметь ключ ‑ любое прикладное значение. Ключ вводит ограничение на запуск регламентных заданий, т. к. в единицу времени среди регламентных заданий, связанных с одним и тем же объектом метаданных, может выполняться только одно регламентное задание с определенным значением ключа. Ключ позволяет группировать регламентные задания, связанные с одним и тем же объектом метаданных, по определенному прикладному признаку с тем, чтобы в рамках одной группы выполнялось не более одного регламентного задания.
При конфигурировании можно определить предопределенные регламентные задания. Предопределенные регламентные задания ничем не отличаются от обычных регламентных заданий, за исключением того, что их нельзя явно создавать и удалять. Если в метаданных регламентного задания установлен признак предопределенного регламентного задания, то при обновлении конфигурации в информационной базе автоматически будет создано предопределенное регламентное задание. Если признак предопределенности снят, то при обновлении конфигурации в информационной базе автоматически будет удалено предопределенное регламентное задание. Начальные значения свойств предопределенного регламентного задания (например, расписание) устанавливаются в метаданных. В дальнейшем при работе приложения их можно менять через соответствующие методы встроенного языка. Изменение свойств уже созданного предопределенного регламентного задания в метаданных не окажет влияния на реальные параметры этого задания в информационной базе. Предопределенные регламентные задания не имеют параметров.
Расписание регламентного задания определяет, в какие моменты времени регламентное задание должно быть запущено. Расписание позволяет:
● задавать дату и время начала и окончания выполнения задания;
● дни недели и месяцы, по которым нужно выполнять регламентное задание и др. (см. описание встроенного языка).
Примеры расписаний регламентных заданий:
| Расписание | Значения параметров |
| Каждый час, только один день | ПериодПовтораДней = 0ПериодПовтораВТечениеДня = 3600 |
| Каждый день один раз в день | ПериодПовтораДней = 1ПериодПовтораВТечениеДня = 0 |
| Один день, один раз | ПериодПовтораДней = 0 |
| Через день один раз в день | ПериодПовтораДней = 2 |
| Каждый час с 01.00 до 07.00 каждый день | ПериодПовтораДней = 1ПериодПовтораВТечениеДня = 3600ВремяНачала = 01.00ВремяКонца = 07.00 |
| Каждую субботу и воскресенье в 09.00 | ПериодПовтораДней = 1ДниНедели = 6, 7ВремяНачала = 09.00 |
| Каждый день одну неделю, неделя пропуска | ПериодПовтораДней = 1ПериодНедель = 2 |
| В 01.00 один раз | ВремяНачала = 01.00 |
| Последнее число каждого месяца в 9.00 | ПериодПовтораДней = 1ДеньВМесяце = -1ВремяНачала = 09.00 |
| Пятое число каждого месяца в 9.00 | ПериодПовтораДней = 1ДеньВМесяце = 5ВремяНачала = 09.00 |
| Вторая среда каждого месяца в 9.00 | ПериодПовтораДней = 1ДеньНеделиВМесяце = 2ДниНедели = 3ВремяНачала = 09.00 |
Можно проверять, выполняется ли задание для заданной даты (метод ТребуетсяВыполнение() объекта РасписаниеРегламентныхЗаданий). Регламентные задания всегда выполняются от имени определенного пользователя. Если пользователь регламентного задания не указан, то выполнение происходит с правами, которые определяются набором ролей, указанных в свойстве конфигурации ОсновныеРоли. В том случае, если в этом свойстве не указано ни одной роли, выполнение происходит без ограничения прав доступа.
Выполнение регламентных заданий происходит с использованием фоновых заданий. Когда планировщик определяет, что регламентное задание должно быть запущено, то автоматически на основе данного регламентного задания создается фоновое задание, которое и выполняет всю дальнейшую обработку. Если данное регламентное задание уже выполняется, то оно не будет запущено повторно, вне зависимости от его расписания.
Регламентные задания имеют возможность перезапуска. Это особенно актуально, когда метод регламентного задания должен быть гарантированно выполнен. Перезапуск регламентного задания осуществляется в том случае, когда оно завершено аварийно, либо когда рабочий процесс (в клиент-серверном варианте) или клиентский процесс (в файловом варианте), на котором выполнялось регламентное задание, завершен аварийно. В регламентном задании можно указать, сколько раз нужно его перезапускать (свойство Количество повторов при аварийном завершении), а также интервал между перезапусками (свойство Интервал повтора при аварийном завершении). После выполнения заданного количества перезапусков, попытки запуска прекращаются до момента, когда наступит очередное время старта регламентного задания (в соответствии с расписанием). При этом счетчик количества повторов сбрасывается и при аварийном завершении регламентного задания, процесс перезапуска начинается сначала.
При реализации метода перезапускаемого регламентного задания нужно учитывать, что при перезапуске его выполнение будет начато с начала, а не продолжено с момента аварийного завершения.
18.4. Особенности выполнения фоновых заданий в файловом и клиент-серверном вариантах
Механизмы выполнения фоновых заданий в файловом и клиент-серверном вариантах различаются.
18.4.1.1. Файловый вариант
Фоновые и регламентные задания выполняются клиентскими приложениями или расширением веб-сервера. Фоновые задания выполняются на том клиентском приложении, которое инициировало запуск фонового задания. Фоновые задания исполняются последовательно, т. е. на одном клиентском приложении не может одновременно выполняться два фоновых задания. В случае работы через веб-сервер, для каждой информационной базы, доступ к которой осуществляется через этот веб-сервер, организовано последовательное выполнение фоновых и регламентных заданий.
Поведение фоновых и регламентных заданий в файловом варианте имеет следующие особенности:
● Информация о фоновых заданиях, вызванных с помощью методов языка или выполняющих отчеты, доступна только в том клиентском приложении, которое их выполняло. Информация не сохраняется после завершения работы клиентского приложения.
● Информация о фоновых заданиях, инициированных регламентными заданиями, доступна на всех клиентских приложениях и сохраняется между запусками.
● Регламентные задания выполняются только одним клиентским приложением. Имеется возможность запретить запуск регламентных заданий определенным клиентским приложением или указать, что какое-либо клиентское приложение принудительно назначается исполнителем регламентных заданий. Такое управление осуществляется с помощью:
● Параметра командной строки /AllowExecuteScheduledJobs для толстого и тонкого клиентских приложений.
● Атрибута allowexecutescheduledjobs элемента point файла публикации default.vrd (см. здесь) в случае публикации информационной базы на веб-сервере.
● Регламентные задания выполняются первым, по порядку запуска, клиентским приложением, у которого не указан запрет выполнения регламентных заданий. После завершения сеанса этого клиентского приложения, выполнение переходит к какому-либо из оставшихся запущенными клиентских приложений. Если запускается клиентское приложение с явным указанием на необходимость исполнения регламентных заданий, то регламентные задания начинают выполняться этим клиентским приложением, независимо от наличия других клиентских приложений (включая расширения веб-сервера).
● Регламентные задания выполняются расширением веб-сервера до тех пор, пока расширение веб-сервера обслуживает хотя бы один клиентский сеанс.
● Регламентные задания обрабатываются один раз в 60 секунд.
● Инициализация планировщика фоновых заданий выполняется через 60 секунд после старта клиентского приложения или после попытки запустить первое фоновое задание. До момента запуска планировщика фоновых заданий в синхронном режиме выполняются следующие операции: поиск в динамическом списке, построение отчетов и поиск для ввода по строке.
● Инициализация механизма планировщика регламентных заданий выполняется через 60 секунд после запуска механизма планировщика фоновых заданий. Следовательно, регламентные задания прикладного решения начинают выполняться максимум через 120 секунд после запуска клиентского приложения.
● Выполняется принудительное завершение фоновых заданий, которые не завершились в течение 30 секунд после завершения работы клиентского приложения. В журнале регистрации в этом случае фиксируется событие Фоновое задание. Принудительное завершение (_$Job$_.Terminate).
● Не поддерживается работа регламентных заданий в файловом варианте информационной базы в сеансе, который получен с использованием automation-сервера «1С:Предприятия» или COM-соединения. Если в таком сеансе создаются фоновые задания, они размещаются в очереь, но запуск таких заданий выполнен не будет.
18.4.1.2. Клиент-серверный вариант
В клиент-серверном варианте для выполнения фоновых заданий используется планировщик заданий, который физически находится в менеджере кластера. Планировщик получает наименее загруженный рабочий процесс для всех поставленных в очередь на выполнение фоновых заданий и использует его для выполнения соответствующего фонового задания. Рабочий процесс выполняет задание и уведомляет планировщик о результатах выполнения.
В клиент-серверном варианте имеется возможность блокирования выполнения регламентных заданий. Блокирование выполнения регламентных заданий происходит в следующих случаях:
● На информационную базу установлена явная блокировка регламентных заданий. Блокировка может быть установлена через консоль кластера.
● На информационную базу установлена блокировка начала сеансов. Блокировка может быть установлена через консоль кластера.
● Из встроенного языка вызван метод УстановитьМонопольныйРежим() с параметром Истина.
● В некоторых других случаях (например, при обновлении конфигурации базы данных).
18.5. Создание метаданных регламентного задания
Перед тем как создать регламентное задание в информационной базе с помощью встроенного языка, необходимо создать для него объект конфигурации.
Для создания объекта конфигурации регламентного задания в ветке Общие дерева конфигурации для ветки Регламентные задания нужно выполнить команду Добавить.
Регламентное задание обладает рядом свойств, которые описаны ниже.
Имя метода ‑ указывается имя метода регламентного задания.
Ключ ‑ указывается произвольное строковое значение, которое будет использовано в качестве ключа регламентного задания.
Расписание ‑ указывается расписание регламентного задания. Для формирования расписания следует перейти по ссылке Открыть и в открывшейся форме расписания установить нужные значения.
На закладке Общее указывается дата начала и завершения задания и режим повтора.
Рис. 462. Общее расписание
На закладке Дневное указывается дневное расписание задания.
Рис. 463. Дневное расписание
В расписании можно указать:
● время начала и окончания задания;
● время завершения задания, после которого оно будет принудительно завершено;
● период повтора задания;
● продолжительность паузы между повторами;
Допускается указание произвольного сочетания условий.
На закладке Недельное указывается недельное расписание задания.
Рис. 464. Недельное расписание
Нужно установить флажки по тем дням недели, по которым задание будет выполняться. Если требуется повторять задание, указать интервал повтора в неделях. Например, задание выполняется через 2 недели, значение повтора ‑ 2.
В том случае, задано недельное расписание и значение свойства Повторять каждые больше 1, то при определении границ недели будет учитываться свойство Первый день недели, заданный в региональных настройках информационной базы (подробнее см. здесь).
На закладке Месячное указывается месячное расписание задания.
Рис. 465. Месячное расписание
Нужно установить флажки по тем месяцам, в которых задание будет выполняться. При необходимости можно указать конкретный день (месяца или недели) выполнения с начала месяца/недели или конца.
Использование ‑ если установлено, то задание будет выполняться согласно расписанию.
Предопределенное ‑ если установлено, то задание является предопределенным.
Количество повторов при аварийном завершении ‑ указывает количество повторов при аварийном завершении.
Интервал повтора при аварийном завершении ‑ указывает интервал повтора при аварийном завершении.
Пример создания фонового задания «Обновление индекса полнотекстового поиска»:
Пример создания регламентного задания «Восстановление последовательностей»: