Фоновые задания 1С, примеры работы и параллельного запуска
В рамках выполнения проекта столкнулся с интересной задачей ускорения загрузки данных из других информационных баз. Задача загрузки данных предполагала выполнение к внешней базе несвязанных между собой запросов, результаты которых помещаются в одну таблицу значений. Когда на оптимизацию запроса рука уже не поднималась, приступил к ускорению загрузки с помощью распараллеливания процессов. Отмечу, что элементы кода в данном посте приведены для клиент-серверного варианта и укрупнено для общего понимания подхода.
Что у нас в 1с Предприятии 8.2 имеется для распараллеливания & это фоновые задачи. Метод, который будет вызываться в фоновой задаче, должен быть прописан в серверном общем модуле и быть экспортным. Естественно нам понадобиться в фоновую задачу передавать и забирать значения.
В моем случае передача значений в фоновую задачу происходила через параметры. Метод ЗагрузитьИзВИБ имеет два параметра это ВходнойПараметр и АдресВХранилище. ВходнойПараметр это структура, в которую сгружаются все данные, необходимые для проведения загрузки. АдресВХранилище это адрес во временном хранилище, по которому будет передан результат загрузки. Сам код метода фонового задания выглядит так:
Зачем нам в фоновую задачу передавать адрес во временном хранилище. Наша фоновая задача должна куда-то положить результат, причем так чтобы мы знали где его потом взять.
Для того чтобы запустить фоновые задачи выполняется следующий код:
Перед запуском фоновой задачи через ФоновыеЗадания.Выполнить() мы формируем массив параметров. Значения из массива параметров переходят в метод фонового задания в качестве параметров. В МассивЗапущенныхЗаданий хранятся все фоновые задачи, которые мы запустили. Теперь надо подождать их ожидания.
ФоновыеЗадания.ОжидатьЗавершения(МассивЗапущенныхЗаданий);
После того как все задачи были завершены, можем приступить к получению из них данных. Для этого мы проходим по всем адресам в хранилище, которые хранятся в массиве МассивАдресовВХранилище. После получения результата фонового задания перегоняем его в общую таблицу.
Вопрос определения оптимального количества потоков выходит за рамки данного поста. А после получения некоторых результатов на рабочих данных пока что выходит и за рамки моего сознания . Но если у вас есть идеи как посчитать нужное количество потоков, пишите в комментариях, с радостью почитаю.
Фоновые задания в 1С 8.3
Фоновые задания
Иногда требуется выполнить какую-нибудь длительную операцию без блокирования интерфейса. То есть пользователь нажал кнопку, запустилась какая-нибудь длительная процедура, а в этом время пользователь может делать что-нибудь другое в программе. Для этого можно использовать механизм фоновых заданий.
Фоновые задания запускаются асинхронно (без ожидания завершения), в отдельном потоке. Фоновые задания можно запустить только на сервере. Для примера, представим что есть некий список электронных адресов, на который нужно выполнить рассылку по электронной почте. В списке может быть много адресов, да и отправка одного письма выполняется какое-то время. Поэтому хотелось бы запустить рассылку и продолжить дальше работать с программой.
Чтобы запустить фоновое задание используется метод Выполнить менеджера фоновых заданий. Первым параметром передается имя общего модуля и имя метода. Указанный метод должен находиться в общем модуле и быть экспортным.
В результате будет запущено фоновое задание, которое выполнит метод ВыполнитьРассылку из общего модуля МодульФоновыхЗаданий. Во время выполнения фонового задания интерфейс пользователя не будет заблокирован.
Если сейчас трижды запустить одно фоновое задание, то оно будет запущено три раза и три раза выполнит одно и то же действие. Чтобы избежать повторного запуска фонового задания, если оно уже было запущено можно использовать Ключ фонового задания. Ключ передается третьим параметром в метод Выполнить:
В результате при первом выполнении данного кода будет запущено фоновое задание с ключом «Рассылка». Если не дождавшись выполнения текущего фонового задания попробовать запустить его еще раз, то будет выброшено исключение «Задание с таким значением ключа уже выполняется». Если указать другое значение ключа, то оба фоновых задания будут выполняться одновременно.
Если у фоновых заданий с одним значением ключа не совпадают методы для выполнения, то такие задания могут быть запущены одновременно.
Стоит отметить, что в качестве метода для фонового задания можно использовать как процедуру, так и функцию. Возвращаемый результат функции будет проигнорирован. В качестве метода фонового задания нельзя использовать методы глобальных общих модулей.
Параметры фонового задания
При запуске фонового задания можно передать параметры в метод общего модуля. Например, добавим в процедуру ВыполнитьРассылку два параметра:
При запуске фонового задания вторым параметром нужно перадать массив параметров. Первый элемент массива будет передан в первый параметр, второй — во второй и т.д.
Если количество параметров не будет совпадать, то фоновое задание не будет выполнено.
Фоновые задания в файловом и клиент-серверном варианте
Механизм выполнения фоновых заданий отличается в файловом и клиент-серверном варианте.
В файловом варианте фоновые задания выполняются на том клиентском приложении, которое его запустило. Одновременно может выполняться только одно фоновое задание, остальные фоновые задания встают в очередь.
В клиент-серверном варианте фоновые задания выполняются планировщиком заданий, который находится в менеджере кластера. Планировщик заданий подбирает наименее загруженный рабочий процесс сервера 1С и выполняет фоновое задание на нем.
И в файловом и клиент-серверном варианте фоновое задание это отдельный системный сеанс, который выполняется от имени того пользователя, кто создал задание.
Фоновое задание с ожиданием результата
Если требуется дождаться результата выполнения фонового задания, то можно воспользоваться тем, что метод Выполнить возвращает объект Фоновое задание. А у этого объекта есть метод ОжидатьЗавершенияВыполнения, который остановит поток выполнения, пока не изменится состояние фонового задания. Фоновое задание может быть в четырех состояниях:
После изменения состояния фонового задания метод ОжидатьЗавершенияВыполнения вернет обновленное фоновое задание, у которого можно анализировать свойство Состояние, чтобы узнать результат выполнения:
Метод Выполнить вернул фоновое задание, состояние которого было равно Активно. Состояние автоматически не обновляется. Для проверки изменения состояния фонового задания нужно заново получить фоновое задание. В данном примере оно было получено методом ОжидатьЗавершенияВыполнения.
Пауза через фоновое задание
В метод ОжидатьЗавершенияВыполнения параметром можно передать количество секунд. Выполнение кода продолжится или по истечении этого времени или сразу после изменения состояния фонового задания. Можно воспользоваться данным методом для возможности оставить выполнение кода на указанное количество секунд. В общий модуль добавим следующую процедуру:
Параметром принимаем количество секунд для паузы, затем определяем чей это сеанс. Если клиентский, то запускаем фоновое задание и ждем его завершения. Если это сеанс фонового задания, то просто ждем его завершения.
Вызов паузы на 5 секунд:
Преимущество такого метода в том, что на время паузы не загружается процессор.
Оповещение о выполнении фонового задания
Иногда требуется не просто запустить выполнение фонового задания, а оповестить пользователя о результатах выполнения. Для этого можно использовать следующий алгоритм действий:
Здесь был использован метод ПодключитьОбработчикОжидания, который вызывает процедуру, указанную в первом параметре через время, указанное во втором параметре. Затем вызов процедуры был отменен через метод ОтключитьОбработчикОжидания.
Отмена выполнения фонового задания
Для отмены фонового задания можно использовать метод Отменить самого фонового задания:
Сообщения из фонового задания
Фоновое задание выполняется на сервере, поэтому если в нем использовать сообщения пользователю, то их никто не увидит. Однако у фонового задания есть метод ПолучитьСообщенияПользователю, который позволяет получить все сообщения из фонового задания. Для примера добавим в общий модуль следующую процедуру:
Выполним ее через фонового задание с получением всех сообщений и выведем полученные сообщения на экран:
Через сообщения можно организовать получение прогресса выполнения фонового задания. Добавим в общий модуль следующие процедуры:
И запустим фоновое задание на выполнение, с периодическим получением сообщений:
В результате в процессе выполнения фонового задания можно будет увидеть окно состояния с прогрессом выполнения:
Многопоточность через фоновые задания
С помощью фоновых заданий можно выполнить какую-то обработку в несколько потоков. Например, нужно во всем справочнике товаров увеличить цену на 10%. Можно разбить все товары на несколько частей и каждую часть обработать в отдельном потоке:
Здесь мы использовали метод ОжидатьЗавершения, но уже не у самого фонового задания, а у менеджера фоновых заданий. Параметром передали массив тех фоновых заданий, завершение которых нужно дождаться. У менеджера фоновых заданий тоже есть метод ОжидатьЗавершенияВыполнения, в который помимо массива заданий можно передать таймаут, аналогично одноименному методу у фонового задания. Даже если в методе ОжидатьЗавершенияВыполнения не указывать таймаут, то он в любом случае вернет массив всех обновленных фоновых заданий, после изменения статуса хотя бы у одного задания. Так как нам нужно дождаться завершения всех заданий, то был использован метод ОжидатьЗавершения.
Стоит отметить, что в одном фоновом задании можно запустить другое фоновое задание. То есть можно было запустить одно фоновое задание, в нем распараллелить выполнение на четыре фоновых задания, дождаться их выполнения и оповестить пользователя о завершении.
В силу ограничений выполнения фоновых заданий в файловом варианте многопоточную обработку данных можно реализовать только в клиент-серверном варианте.
Получить фоновые задания
Метод ПолучитьФоновыеЗадания позволяет получить список всех фоновых заданий, сохраненных в базе данных. Выполненные фоновые задания хранятся в течении суток, но не более 1000 заданий. Соответственно метод ПолучитьФоновыеЗадания вернет как текущие фоновые задания (выполняются в данный момент), так и завершившиеся в течении суток задания.
Мобильное приложение регламентные задания
Все перепробовал фоновые задания, ОбработчикОжидания. Ничего не работает при неактивном приложении.
В общем ничего не сработало, HELP.
(14) см (11). Локальные и push уведомления уже изучены и испытаны, они не запускают приложение когда оно не активно.
А решение я уже нашел через обработчик СредстваГеопозиционирования и правильный перекомпил платформы)). Там не все так просто, вот интересные материалы: https://habrahabr.ru/post/271505/, https://www.raywenderlich.com/29948/backgrounding-for-ios
Если все получится, напишу решение.
В общем на ios все работает при следующем алгоритме:
1. В xcode при установке мобильной платформы нужно отметить backgrounds mode в ON и галку Location updates (и Voice over IP тоже можно, пригодится). Подробнее по вышеприведенным ссылкам. Там еще много интересного.
2. После этого ПодключитьОбработчикИзмененияМестоположения уже будет работать при не активном приложении, но ограниченное время около
20 минут. Данное ограничение у меня решилось подключением обычного обработчика ПодключитьОбработчикОжидания с интервалом
10 минут в котором выполняется ОтключитьОбработчикИзмененияМестоположения и снова ПодключитьОбработчикИзмененияМестоположения.
3. Также в настройках ios нужно отметить, что наше приложение может получать геопозицию «всегда».
При данном алгоритме приложение отлично работает в фоне, получает координаты, записывает в базу, запускаются фоновые задания, отправляет данные через Web-сервис, даже интерфейс окон обновляет. Все при выключенном телефоне.
Буду адаптировать под android обязательно, как только достану где-нибудь телефон с адройдом. В ближайшие дни.
PS Странно как то, я прям первооткрыватель. Не может быть чтобы до меня никто не решал данную задачу.
Обзор новых возможностей мобильной платформы 1С:Предприятие 8.3.9
Пока это тестовый релиз, но он позволяет опробовать новые возможности. И, естественно, на реальных проектах рекомендуем использовать тестовые релизы с максимальной осторожностью
В этой статье мы рассмотрим, какой полезный функционал был добавлен в новый релиз, – а новых возможностей появилось немало.
Самой главной «фишкой» 8.3.9 для мобильной платформы стала возможность использовать внешние компоненты.
Сама 1С про это писала так:
Для мобильной платформы мы реализовали механизм внешних компонент. Он позволяет вам создавать внешние компоненты по технологии Native API аналогично тому, как это делается в платформе для персональных компьютеров. Конечно, есть некоторые особенности, связанные с мобильными операционными системами. Но в целом всё очень похоже.
Но давайте обо всем по порядку.
Сборщик мобильных приложений
С выходом нового релиза платформы обновился и сборщик мобильных приложений. Актуальная версия – 2.0.3.23. Что изменилось?
Что не изменилось? Баг при тесте квитанций в модуле PurchasesService, ищите по «puchaseTime», и замените на «purchaseTime».
Работа с файлами
Появилась конструкция ДиалогВыбораФайла. Как мы ее ждали Теперь не нужно писать много кода, чтобы можно было адекватно выбрать файл.
Также добавлен интерактив выбора файла в функции:
НАКОНЕЦ! Теперь можно работать со схемой content. Ранее многие обращали внимание, что внешние приложения иногда требовали такой формат файла или сами его возвращали.
В двух словах – что такое content-провайдер. Приложения не могут общаться внутренними путями. Например, вы передали в программу для редактирования фото путь к файлу, который лежит во временных файлах 1С, и внешняя программа ничего не могла сделать, так как у нее просто не было доступа. Вот в таких случаях можно использовать content-провайдер.
Итак, где его можно использовать:
Добавлена новая функция КаталогБиблиотекиМобильногоУстройства(), которая отвечает за быстрый доступ к каталогам (картинки, видео, загрузки и т.д.).
Добавлена функция обработки представления файлов Файл.ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства(). Имеет смысл использовать ее, когда надо показать имя файла, который был получен через схему content, так как имена, используемые в этих схемах, далеки от тех, которые используются в представлении прямого пути (обычный стиль Windows). Т.е. в них вообще может и не быть как такового имени файла.
Вот так выглядит диалог выбора файла:
Вверху указывается полный путь к файлу/папке. Далее идут уже иконки быстрого перехода.
Телефония
Для Android теперь можно отследить факт входящего звонка.
Например, это можно использовать для CRM: звонит клиент – а в приложении сразу показываются его долги, заказы, статусы и прочее.
Работает так: подключается обработчик, и при факте звонка в него приходит уведомление в виде даты звонка, номера телефона и прочее.
При этом принимать или отклонять звонки – нельзя.
Аудио
Теперь можно более детально работать со звуком – воспроизводить, останавливать, получать длительность. Особенно удобно, если на телефоне стоит запись звонков. В этом случае можно написать плеер для прослушивания разговора повторно. Т.е. позвонил клиент менеджеру, надиктовал требуемые товары, потом менеджер включает проигрывание и вводит заказ клиента.
Кроме этого – теперь можно воспроизводить текст при помощи встроенного синтезатора речи.
Отчеты
Реализована поддержка компоновки данных, теперь при разработке будет удобно писать код, а не ставить постоянно проверку, чтобы на стационарной обрабатывало через схему, а на мобильной – по-иному. Жаль, что недоступен интерактив, так что все отборы и т.д. – по-прежнему нужно писать вручную.
Формы
Теперь добавлена возможность работать с разными интерфейсными возможностями платформы, то есть. с расстоянием, формой, цветом и т. д., в основном это касается кнопок.
Теперь кнопки можно сделать вот такими:
Статус интернет-соединения
Наконец-то добавлен новый функционал в мобильную платформу, который позволяет получить тип соединения – ИнформацияОбИнтернетСоединении.
Мало того, теперь еще можно подключить и обработчик изменения. А вот получить варианты сети можно в двух представлениях:
Работа с JSON
Это то, чего многие очень долго ждали. Так как все веб-сервисы в интернете работают именно с JSON. Плюс – объем JSON меньше XML.
SSL сертификаты
Теперь все работает как в стационарной. Отличие в основном затрагивает только самоподписанные сертификаты, где ранее мы вынуждены были добавлять сертификат выдающего центра в само устройство, что было не очень удобно. Теперь можно просто сказать платформе – не проверять эту информацию. НО! Это небезопасно!
AdMob для iOS
Ранее 1С поддерживала баннеры в iOS из сети iAd, но, так как Apple неожиданно закрыла эту сеть 01.07.2016, 1С в iOS теперь так же, как и в Android, использует AdMob – сервис рекламы Google. Что намного удобней.
Напоминаем, что сейчас готовится к выходу новый курс, который будет посвящен монетизации мобильных приложений.
Внешние компоненты
Один из самых ожидаемых инструментов. Но, к сожалению, чтобы написать что-то интересное про него, необходимо глубоко его проанализировать. Пока можно сказать только одно: поддерживается только технология Native API, и пока непонятно, можно ли передавать контекст приложения, так как без него вся эта технология будет весьма ограниченной.
Из принципиальных изменений – это всё.
От себя добавлю, что стабильность платформы значительно возросла. На одном из моих проектов используется около 150 устройств, из которых 50 – идентичные, закуплены одной партией. И на 5 из них платформа постоянно беспричинно падала в любом месте. Теперь она падает только 1 устройстве.
Не обошлось и без багов. В частности, если вы попробуете запустить конфигурацию «Тестирование возможностей» из полного курса по мобильной платформе, то увидите вот такую ошибку:
Она возникает из-за того, что в общей форме httpСервисы в элементах формы у элемента «Группа8», стоит параметр ВыравниваниеЭлементовИЗаголовков в «Элементы право, заголовки лево», надо его заменить на «Авто». При этом – 8.3.8 отрабатывает штатно.
Об авторе
Регламентные и фоновые задания для клиент-серверного варианта, обычное приложение
Переработанная обработка управляемого режима. За основу взята обработка из CRM Стандарт.
Выполнение заданий по расписанию регламентных заданий конфигурации. Работа в обычном приложении, 8.1, 8.2 (режим совместимости с 8.1). Версии почти ничем не отличаются.
UPD 10.07.2014: Исправлена ошибка конфигурации, когда ни одного фонового задания еще не было выполнено.
Обработка позволяет выполнять регламентные задания конфигурации по расписанию в файловом и клиент-серверном вариантах, в том числе и в фоновом режиме.
Для фоновых заданий доступен отбор:
2) выполнено с ошибкой
— по регламентному заданию
Скачать файлы
Специальные предложения
Перегонять из УФ в обычное, то что уже есть много лет ))) («КонсольЗаданий» с ИТС не видели?)
Обновление 09.07.14 12:19
Код открыт Не указано
См. также
Конвертация любых адресов, написанных в свободной форме, к ФИАС Промо
Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал «ДА!», выкладываю данную обработку.
30.06.2020 7143 66 XilDen 15
Управление платформенными обработками (расширение для типовых)
Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить «Активные пользователи» или доработать «Конструктор запросов».
07.10.2021 2950 5 SeiOkami 23
Работа с картами в 1С на примере бесплатной библиотеки Leaflet
Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.
31.03.2021 9895 28 Parsec1C 11
Универсальная обработка переноса данных из основной конфигурации в расширение
Обработка предназначена для разработчиков, для тех случаев, когда ранее дописанный функционал, перенесен в расширение и появляется необходимость перенести данные из объектов основной конфигурации в объекты расширения. Перенос осуществляется настройкой соответствия объектов основной конфигурации объектам расширения.
05.10.2020 9956 64 biz-intel 71
Удаление и/или копирование сохраненных в 1С настроек (например настроек печати табличных форм) Промо
Иногда нужно удалить сохраненную в 1С «покореженную» настройку или скопировать «удачную» другому пользователю.
01.09.2012 66370 1378 AnryMc 46
Улучшенная обработка универсального обмена данными в формате XML (УФ)
Улучшенная обработка «Универсальный обмен данными» с полноценными возможностями СКД для выборки данных (не только для отборов).
23.06.2020 12420 131 Lem0n 1
Панель #Расширение объекта: Редактор, Права, Поиск, Сторно, Обмен
Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками.
01.05.2020 14954 111 sapervodichka 1
Работа с файлами (обычная и управляемая форма)
Нужно загрузить файл с клиента на сервер или же, наоборот, файл загрузить с сервера на клиент, а впридачу все это на web-клиенте, да еще и асинхронно? Нет ничего проще, читай далее, как это сделать!
10.06.2019 40814 219 Xershi 77
Групповая корректировка записей регистров (Управляемое приложение) v 2.1 Промо
Обработка предназначена для групповой корректировки записей регистров Накопления, Сведений и Бухгалтерии. Разработана специально для Управляемого приложения.
06.09.2013 68401 315 kser87 59
Электронная таблица средствами 1С (Версия 2.0)
Функционал электронной таблицы для программ на платформе 1С реализован на основе табличных документов. Функционал реализован в виде обработки. Большую часть формы обработки занимают листы (закладки) с табличными документами, которые выполняет роль электронной таблицы. Листы могут быть добавлены, удалены или переименованы. Ограничение по количеству листов определяется возможностью платформы. В формулах электронной таблицы можно использовать любые языковые конструкции, процедуры и функции 1С, ссылки на другие ячейки электронной таблицы расположенные в том числе и на других листах. Допустимо обращаться к ячейкам электронной таблицы по имени именованной области. В случае использования в формулах электронной таблицы данных из самой таблицы пересчет зависимых ячеек с формулами производится автоматически. Электронную таблицу можно сохранить в файл.
23.04.2019 23456 77 user706545_kseg1971 40
Удобная консоль регламентных и фоновых заданий
Аналог обработки БСП «РегламентныеИФоновыеЗадания». Не требует наличия библиотек, может использоваться в качестве внешней обработки. В отличие от обработки БСП предоставляет больше информации о свойствах регламентных и фоновых заданий, а также об ошибках и сообщениях для пользователей, возникших во время их выполнения. Позволяет управлять регламентными (создание, удаление, настройка расписания, ручной запуск) и фоновыми (прерывание) заданиями.
06.02.2019 21775 211 Alxby 20
Редактор объектов информационной базы 8.3
Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.57 от 09.10.2021
23.01.2019 42669 475 ROL32 50
Установка предопределенных элементов: просмотр, исправление и поиск ошибок (задвоенных и отсутствующих) Промо
Простая обработка для просмотра и установки значений предопределенных элементов. Позволяет заменить значение предопределенного элемента с одного элемента справочника на другой, удалить предопределенный элемент (снять пометку предопределенности), установить пометку переопределенного элемента. Проверяет предопределенные данные на наличие задвоений и отсутствующих. Работает со справочниками, планами счетов, планами видов характеристик, планами видов расчетов.
06.10.2014 169452 2757 ekaruk 170