1с обработка регламентные и фоновые задания. Регламентные и фоновые задания

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

Развернутую инструкцию на примере Вы найдете далее.

Что такое регламентные и фоновые задания в 1С

  • Регламентные задания — это специальный механизм 1С предприятия 8.3, предназначенный для выполнения определенного действия по заданному расписанию.
  • Фоновое задание — объекты, порождаемые регламентным заданием, которые непосредственно выполняет заложенное действие без участия пользователя или программиста 1С 8.2.

Механизм регламентных и фоновых заданий работает в клиент-серверном режиме работы (SQL), благодаря функционалу СУБД. Если у вас файловая БД, то задание тоже можно настроить, но немного по другому принципу.

Настройка фоновых заданий в клиент-серверном режиме работы 1С

Для начала создадим новый объект метаданных — регламентное задание. Я назову свое задание «ЗагрузкаКурсовВалют». Рассмотрим палитру свойств данного объекта конфигурации:

Получите 267 видеоуроков по 1С бесплатно:

  • Имя метода — путь к процедуре, которая будет выполняться в фоновом задании по заданному расписанию. Процедура должна находиться в общем модуле. Рекомендуется не использовать типовые , а создать свой. Не забудьте, что фоновые задания исполняются на сервере!
  • Использование — признак использования регламентного задания.
  • Предопределенное — указывает, является ли регламентное задание предопределенным. Если хотите чтобы регламентное задание заработало сразу после помещения в БД, укажите этот признак. В противном случае вам необходимо будет использовать обработку «Консоль заданий» или вызывать запуск задания программно.
  • Количество повторов при аварийном завершении задания — сколько раз выполнен перезапуск фонового задания, если оно было выполнено с ошибкой.
  • Интервал повтора при аварийном завершении задания — с какой периодичностью будет выполнен перезапуск фонового задания, если оно было выполнено с ошибкой.

И самая интересная настройка — Расписание:

Тут настраивается интервал запуска процедуры, указанного в поле «Имя метода». Допустим я настроил

Внимание! Не забудьте отключить блокировку выполнения регламентных и фоновых заданий на уровне СУБД!

Сделать это можно в утилите администрирования клиент-серверного варианта либо при создания новой БД:

Настройка регламентных заданий в файловом режиме работы 1С

В файловом режиме настройка таких заданий несколько труднее. Для такого задания должна быть запущена отдельная сессия программы 1С. Зачастую это решается заведением «технического» пользователя, чей сеанс всегда запущен.

В файловом режиме инициализация регламентного задания происходит при запуске метода «ВыполнитьОбработкуЗаданий()».

Для определенного пользователя можно настроить запуск этого метод, используя другой метод —

ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>).

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

ПодключитьОбработчикОжидания, 3600 ) ;

Двухминутное видео, в котором показано, как настроить регламентное задание в конфигураторе 1С:

Регламентные задания в 1С предназначены для выполнения определенных процедур по расписанию, с некоторой периодичностью.

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

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

Создание регламентного задания

Регламентные задания — объект метаданных конфигурации 1С. Находится в группе Общие. Рассмотрим параметры и свойства регламентных заданий.

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

Ключ — позволяет создать несколько регламентных заданий одного типа. Например, выполнение синхронизации данных между несколькими информационными базами может быть реализовано с помощью одного объекта метаданных РегламентноеЗадание , при этом самих регламентных заданий будет создано несколько (по количеству баз для обмена). Различаться эти регламентные задания будут с помощью свойства Ключ. Одновременно может выполняться только одно задание с одинаковым ключом.

Использование — флаг, показывающий, включено ли регламентное задание.

Предопределенное — здесь можно провести аналогию с предопределенными элементами справочника. Предопределенные элементы создаются в конфигураторе и применяются пользователями в работе. Обычные элементы пользователь создает сам. С регламентными заданиями точно так же: если оно предопределенное, то оно существует и может выполняться по расписанию сразу после создания в конфигураторе. Если же флаг Предопределенное не установлен, то пользователю нужно самому создать одно или несколько регламентных заданий данного типа (например, через Консоль заданий ).

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

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

Программная работа с регламентными заданиями

В данных примерах будем рассматривать работу с обычными, не предопределенными, регламентными заданиями.

Программное создание регламентного задания

//Создаем задание
"ИмяРегдаментногоЗадания" ) ;

//Устанавливаем ключ регламентного задания (не обязательно)
Задание. Ключ = "КлючЗадания" ;

//Включаем регламентное задание
Задание. Использование = Истина ;

//Записываем регламентное задание
Задание. Записать() ;

Программное получение регламентного задания для изменения параметров

В этом примере предположим, что существует только одно регламентное задание данного типа. Если заданий несколько, то, зная , нетрудно внести в код соответствующие изменения.


"ИмяРегламентногоЗадания" ] ) ) ;


Если Задания. Количество() > 0 Тогда
Задание= Задания[ 0 ] ;


Иначе
Задание = РегламентныеЗадания. СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания" ) ;

КонецЕсли ;

//Регламентное задание находится в переменной Задание. Можно изменять его параметры.

Вызов диалога изменения расписания регламентного задания

Для работы с расписанием регламентного задания существует особый тип диалога. Все еще предполагаем, что у нас есть только одно регламентное задание данного типа.

//Получаем массив с регламентными заданиями нужного типа
Задания= РегламентныеЗадания. ПолучитьРегламентныеЗадания(новый Структура("Метаданные" , Метаданные. РегламентныеЗадания[ "ИмяРегламентногоЗадания" ] ) ) ;

//Если задание существует, то по условию оно одно
Если Задания. Количество() > 0 Тогда
Задание= Задания[ 0 ] ;

//Если задания нет, создадим его
Иначе
Задание = РегламентныеЗадания. СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания" ) ;

КонецЕсли ;

Расписание= Задание. Расписание;

//Создаем диалог изменения расписания регламентного задания
ДиалогРедактирования= Новый ДиалогРасписанияРегламентногоЗадания (Расписание) ;

//Показываем диалог пользователю и обрабатываем изменения расписания
Если ДиалогРедактирования. ОткрытьМодально() Тогда
Задание. Расписание = ДиалогРедактирования. Расписание;
Задание. Записать() ;
КонецЕсли ;

Периодическая очистка регистров (например, регистра сведений «Версии объектов» в конфигурации УПП), выполнение расчетов по расписанию, допроведение документов в определенное время – вот далеко не полный список действий, которые можно реализовать с помощью регламентных заданий 1С.

Создание задания

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

Регламентное задание незаменимо:

  1. Если в поставленной задаче в качестве одного из условий присутствует необходимость периодического выполнения определенного алгоритма;
  2. Если код должен выполняться независимо от действий операторов и пользователей базы;
  3. Если запуск исполняемой процедуры не зависит от внешних событий, происходящих с объектами информационной базы.

Для его создания необходимо зайти в информационную базу в режиме «Конфигуратор». Далее находим в дереве конфигурации ветку «Регламентные задания», они находятся на закладке «Общие» и нажимаем кнопку «Добавить» (Рис.1)

Давайте подробнее разберем окно его свойств (Рис.2) :
Рис.2

  1. Имя, синоним и комментарий – правила и принципы заполнения этих полей аналогичны для всех объектов конфигурации и описывать их еще раз нет необходимости;
  2. Имя метода – процедура общего модуля, которая максимально точно описывает необходимый алгоритм (нажатие на кнопку выбора открывает доступные процедуры, представление которых состоит из имени общего модуля и наименования процедуры в различных колонках таблицы);
  3. Ключ – определяет не столько уникальность регламентного задания, сколько уникальность фонового процесса, запущенного на основании задания, имеет ограничение по длине;
  4. Расписание – описанию этого элемента мы посвятим отдельный абзац нашей статьи;
  5. Использование – установка данного флажка определяет активность задания, ИСТИНА означает, что задание будет запускаться и выполняться по расписанию;
  6. Предопределенное – если у элемента установлена эта галочка, эти задания нельзя удалить, их создание происходит автоматически при сохранении конфигурации в базу;
  7. Количество повторов – если в процессе выполнения возникла исключительная ситуация, оно будет перезапущено, чтобы не возникла бесконечная зацикленность, программа ограничивает количество перезапусков;
  8. Интервал повтора – время в секундах между повторными запусками аварийно завершенных заданий.

Давайте более подробно рассмотрим расписание.

Расписание регламентного задания

Рис.3

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

Закладка «Общие»:

  • Дата начала выполнения задания;
  • Дата окончания обработки;
  • Периодичность повторения задания.

Если не указаны даты на этой закладке, то никакого ограничения по срокам выполнения для задания не будет установлено.

Закладка «Дневное» (Рис.4)
Рис.4

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

Закладки «Дневные» и «Недельные» содержат информацию для соответствующих периодов.

Особенности функционирования

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

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

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

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

Кроме того в стандартных поставках 1С появилась возможность управления плановыми работами напрямую из программы, не заходя в «Конфигуратор». В конфигурации «ЗУП», версии 3.1.3.223, открыть форму управления можно из меню Администрирование->Обслуживание->Регламентные операции->Регламентные и фоновые задания (Рис.5)
Рис.5

Открывшаяся форма имеет интуитивно понятный интерфейс и позволяет:


Можно также запустить выполнение задачи непосредственно из формы.

». В ней мы рассмотрим новые возможности, которые не касаются интерфейса системы, но существенным образом расширяют предоставляемый функционал платформы «1С:Предприятие 8».

Применимость

В статье рассматривается платформа «1С:Предприятие» версии 8.3.4.437. Вся функциональность, описанная в статье, актуализирована до редакции 8.3.11.

Прочие новшества в «1С:Предприятие 8.3»

Продолжим знакомиться с новшествами платформы «1С:Предприятие 8.3».

Фоновые и регламентные задания в файловой информационной базе

Во многих типовых конфигурациях на платформе 8.2 существовала константа, в которой указывался пользователь, под которым выполнялись задания в файловом варианте.

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

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

Это могло быть особенно критично при работе с такими конфигурациями, как “Комплексная автоматизация” или “Управление производственным предприятием” , в которых регламентные задания играют довольно важную роль.

Если ЭтоФайловаяИБ Тогда
=
Константы.ПользовательДляВыполненияРегламентныхЗаданийВФайловомВарианте.Получить ();
Если глЗначениеПеременной (“глТекущийПользователь” ) =
ПользовательДляВыполненияРеглЗаданий Тогда
// с интервалом секунд вызываем процедуру работы с регламентными заданиями
ПоддержкаРегламентныхЗаданиеДляФайловойВерсии ();
ИнтервалДляОпроса =
Константы.ИнтервалДляОпросаРегламентныхЗаданийВФайловомВарианте.Получить ();
Если ИнтервалДляОпроса = Неопределено
ИЛИ ИнтервалДляОпроса = 0 Тогда
ИнтервалДляОпроса = 60 ;
КонецЕсли ;
ПодключитьОбработчикОжидания (“ПоддержкаРегламентныхЗаданиеДляФайловойВерсии” ,
ИнтервалДляОпроса );
КонецЕсли ;
КонецЕсли ;

В платформе 8.3 реализована работа фоновых и регламентных заданий в файловой информационной базе без использования вызова метода глобального контекста ВыполнитьОбработкуЗаданий() .

Фоновые и регламентные задания выполняются непосредственно в одном из клиентских приложений (тонкий, толстый клиент) или расширением веб-сервера.

Фоновое задание, запущенное каким-либо сеансом, выполняется тем же клиентским приложением, которое его инициировало.

Фоновые задания выполняются последовательно, т.е. на одном клиентском приложении в один момент времени может выполняться только одно фоновое задание (в том числе и регламентное).

Регламентные задания выполняются только одним клиентским приложением. Для управления запуском регламентных заданий предназначен ключ командной строки /AllowExecuteScheduledJobs .

Регламентные задания выполняются первым по порядку запуска клиентским приложением, которому не запрещено выполнение регламентных заданий (для запрещения сеанс должен быть запущен с параметром командной строки /AllowExecuteScheduledJobs -Off ).

Когда этот сеанс завершается, выполнение переходит к какому-либо из оставшихся запущенными сеансов.

Если в строке запуска клиентского приложения явно указана необходимость запуска регламентных заданий (в командной строке указано /AllowExecuteScheduledJobs -Force ), то регламентные задания начинают выполняться на нем, независимо от наличия других сеансов.

Обработка регламентных заданий происходит один раз в 60 секунд.

Заметим, что регламентные задания прикладного решения (в файловом варианте) начинали выполняться не ранее, чем через 1 минуту после запуска клиентского приложения. Начиная с редакции 8.3.8 это время увеличили вдвое, и поэтому регламентные задания начинают выполняться максимум через 2 минуты после запуска клиента (в файловом варианте).

Такое решение обусловлено уменьшением задержки при старте приложения. Кроме того, в релизе 8.3.7 была добавлена возможность быстрого определения того, что текущий сеанс является сеансом фонового задания. Это реализовано за счет нового метода глобального контекста ПолучитьТекущийСеансИнформационнойБазы(), а также нового метода у сеанса информационной базы ПолучитьФоновоеЗадание() .

Ниже показан код, который иллюстрирует вышеописанное:

Для увеличения нажмите на изображение.

Вычисление контрольных сумм

В платформе появились механизмы для вычисления контрольных сумм данных.

Напомним, что контрольная сумма (хеш) – это некоторое значение, рассчитанное по набору данных путём применения определённого алгоритма и используемое для проверки целостности данных при их передаче или хранении.

Хеши могут использоваться для проверки идентичности данных (например, необходимо удостовериться, что при передаче файла он не был поврежден; проверить, были ли внесены изменения в файл, и если да, то загрузить его в базу повторно).

Для этого в платформе был реализован объект ХешированиеДанных , доступный на сервере, в толстом клиенте, внешнем соединении, а также на сервере мобильного приложения.

Данный объект имеет два метода: Добавить() и ДобавитьФайл() , которые обновляют хеш-сумму с учетом данных, переданных в параметрах.

Платформа 8.3.4.437 поддерживает вычисление следующих хеш-функций: CRC32 , MD5 , SHA1 , SHA256 . Но функции SHA1 и SHA256 не поддерживаются на мобильной платформе.

Рассмотрим простой пример. Предполагается, что на сервере в каталоге программы есть файл “ragent.exe ”. Необходимо рассчитать MD5 -сумму для этого файла.

Для этого создадим внешнюю обработку, на форме которой разместим команду Рассчитать . Обработчик содержит следующий код:

&НаКлиенте
Процедура Рассчитать (Команда )
Результат = РассчитатьНаСервере ();
Сообщить (Строка (Результат ));
КонецПроцедуры
&НаСервере
Функция РассчитатьНаСервере ()
Хеш = Новый ХешированиеДанных (ХешФункция .MD5 );
Хеш.ДобавитьФайл (КаталогПрограммы () + “ragent.exe” );
Возврат Хеш.ХешСумма ;
КонецФункции

В платформе редакции 8.3.10+ в методе Добавить() объекта ХешированиеДанных стало возможным использовать поток двоичных данных, что значительно упростило их использование в решении различных прикладных задач по обновлению хеш-сумм.

Работа с защищенными версиями протоколов SMTP/POP3

В платформе 8.3 появилась возможность использовать защищенные версии протоколов SMTP/POP3 (встречаются термины SMTPS/POP3S или SSLSMTP/SSLPOP3 ).

Для объекта ИнтернетПочтовыйПрофиль реализованы новые свойства:

  • ИспользоватьSSLSMTP ;
  • ИспользоватьSSLPOP3 ;
  • ТолькоЗащищеннаяАутентификацияSMTP ;
  • ТолькоЗащищеннаяАутентификацияPOP3 .

Свойства АутентификацияSMTP и АутентификацияPOP3 объекта ИнтернетПочтовыйПрофиль , а также перечисления СпособSMTPАутентификации и СпособPOP3Аутентификации использовать не рекомендуется – они поддерживаются для совместимости.

Использование защищенного протокола SMTPS дает возможность отправлять почту из , пользуясь почтовым ящиком Google .

Рассмотрим пример. На форме расположим поля для ввода темы письма и адреса получателя, а для ввода текста письма – поле форматированного документа.

Для увеличения нажмите на изображение.

При нажатии на кнопку Отправить будет выполняться следующий код:

&НаКлиенте
Процедура Отправить (Команда ) Почта = Новый ИнтернетПочта ; Профиль = Новый ИнтернетПочтовыйПрофиль ;
Профиль.АдресСервераSMTP = “smtp.googlemail.com” ;
Профиль.ПользовательSMTP = “[email protected]” ;
Профиль.ПарольSMTP = “PASSWORD” ;
Профиль.ИспользоватьSSLSMTP = Истина ;
Профиль.ПортSMTP = 465 ; Попытка
Почта.Подключиться (Профиль );
Исключение
Сообщить (ОписаниеОшибки ());
Возврат ;
КонецПопытки ; ПочтовоеСообщениеТекст = “” ;
Вложения = Новый Структура ;
Текст.ПолучитьHTML (ПочтовоеСообщениеТекст , Вложения ); ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение ;
ПочтовоеСообщение.Получатели.Добавить (Кому );
ПочтовоеСообщение.Тема = Тема ;
ПочтовоеСообщение.Тексты.Добавить (ПочтовоеСообщениеТекст ,
ТипТекстаПочтовогоСообщения.HTML ); Почта.Послать (ПочтовоеСообщение ); Почта.Отключиться ();
КонецПроцедуры

Заметим, что в нашем примере в случае, если SMTP-сервер не смог отправить электронное сообщение адресату (-ам), то метод Почта.Послать(ПочтовоеСообщение) генерировал исключение. Это вызывало у разработчиков определенные неудобства, т.к. была не очевидна причина генерации исключения.

В редакции 8.3.9 данное поведение изменилось, и теперь метод Послать() возвращает соответствие, ключом которого является адресат, а значением – диагностика от почтового сервера. Это позволяет точно определить причины неудачной отправки почтового сообщения каждому из адресатов. В режиме совместимости с версией 8.3.8 поведение не изменилось.

Двусторонняя печать

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

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

Во встроенном языке появились системные перечисления:

  • ТипДвустороннейПечати (Нет, ПереворотВверх, ПереворотВлево);
  • (Авто, ЗеркальноСверху, ЗеркальноСлева, НеИспользовать).

А у объектов ТабличныйДокумент и ГрафическаяСхема появились свойства ДвусторонняяПечать и ЧередованиеРасположенияСтраниц , при помощи которых можно изменять расположение напечатанных страниц.

В редакции платформы 8.3.9 у системного перечисления ТипДвустороннейПечати добавилось новое значение ИспользоватьНастройкиПринтера . Выбор данного значения позволил использовать настройки принтера при печати документов системы. В режиме совместимости с версией 8.3.8 поведение не изменилось и соответствующие настройки принтера игнорируются.

Диалог публикации информационной базы на веб-сервере сделан более функциональным. Теперь публикация из конфигуратора позволяет задавать все параметры файла default.vrd .

Для диалога публикации веб-клиента и Web-сервисов через конфигуратор реализована:

  • возможность управления доступностью Web-сервисов по умолчанию (атрибут pointEnableCommon элемента ws );
  • возможность управления исполнением фоновых заданий в файловом варианте (атрибут allowexecutescheduledjobs элемента ws ).

Если флажок “Публиковать Web-сервисы по умолчанию” на закладке “Основные” установлен, то при обновлении публикации выбранные Web-сервисы будут опубликованы автоматически.

В противном случае Web-сервисы будут отмечены как непубликуемые. Этому флажку соответствует атрибут pointEnableCommon элемента ws в файле default.vrd , предназначенном для настройки веб-клиента и Web-сервисов.

Атрибут pointEnableCommon элемента ws отвечает за возможность использования в данной информационной базе Web-сервисов, которые опубликованы без явного указания разрешения использования (атрибут enable элемента point ).

Если атрибут имеет значение true , то все Web-сервисы, для которых явно не указано значение атрибута enable элемента point , будут разрешены для использования.

В противном случае использование таких Web-сервисов будет запрещено.

Настройка “Фоновые задания в файловом режиме” соответствует атрибуту allowexecutescheduledjobs элемента ws в файле default.vrd .

Атрибут allowexecutescheduledjobs управляет возможностью исполнения регламентных заданий расширением веб-сервера для файлового варианта информационной базы.

Атрибут может принимать следующие значения:

  • off – в этом случае расширение веб-сервера не будет выполнять регламентные задания. Выполнять регламентные задания будет клиентское приложение (если таковое существует), которое подключается к информационной базе напрямую, без использования веб-сервера.
  • force – в этом случае расширение веб-сервера будет выполнять регламентные задания.
    Если значение этого атрибута не задано, то регламентные задания будет выполнять то приложение, с помощью которого будет осуществлено первое подключение к информационной базе.

Окно публикации на веб-сервисе в актуальном релизе платформы стало еще более удобным и эргономичным. Теперь параметры, описывающие OpenID-аутентификацию, вынесены на отдельную вкладку.

Нумерация объектов информационной базы

В платформе 8.3 переработан механизм автоматической нумерации объектов информационной базы. Контроль уникальности номера или кода (в том числе и полученного в результате автоматической генерации номера или кода) всегда производится во время записи объекта.

В текст сообщения о нарушении уникальности номера или кода добавлено указание, какой номер или код не уникален.

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

Агрегатные функции языка выражений системы компоновки данных

В языке выражений системы компоновки данных реализованы новые агрегатные функции:

  • Каждый();
  • Любой();
  • СтандартноеОтклонениеГенеральнойСовокупности();
  • СтандартноеОтклонениеВыборки();
  • ДисперсияВыборки();
  • ДисперсияГенеральнойСовокупности();
  • КовариацияГенеральнойСовокупности();
  • КовариацияВыборки();
  • Корреляция();
  • РегрессияНаклон();
  • РегрессияОтрезок();
  • РегрессияКоличество();
  • РегрессияR2();
  • РегрессияСреднееX();
  • РегрессияСреднееY();
  • РегрессияСреднееSXX();
  • РегрессияСреднееSYY();
  • РегрессияСреднееSXY().

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

Для увеличения нажмите на изображение.

Как видно по рисунку, в выпадающем списке нет новых функций, однако если ввести их вручную, то сообщения об ошибке не будет, а отчет будет сформирован:

Также представляет интерес новая функция КлассификацияABC() . Результатом работы функции будет номер класса, начиная с 1 (1 соответствует классу А, 2 – классу B, 3 – классу C и т.д.).

Продемонстрируем работу этой функции. Создадим новый внешний отчет “Классификация товаров” на основе запроса:

ВЫБРАТЬ
РасходТовараТовары.Товар ,
РасходТовараТовары.Количество
ИЗ
Документ.РасходТовара.Товары КАК РасходТовараТовары

Определим новое вычисляемое поле Класс :

Для увеличения нажмите на изображение.

Произведем настройку ресурсов следующим образом:

Для увеличения нажмите на изображение.

В пользовательском режиме отчет выглядит следующим образом:

В заключение отметим, что от редакции к редакции в платформе 1С 8.3 механизм СКД постоянно улучшается и дорабатывается, и в рамках нашей “новичковой” статьи данные изменения привести в полном виде не представляется возможным. Да это и кажется излишним, т.к., работая на актуальной версии платформы, вы всегда можете воспользоваться различными справочными системами для помощи с разбором того или иного аспекта работы данного механизма.

Кроме того, не забывайте и про наш отдельный курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных , который до атома разбирает все тонкости и подводные камни при работе с данным механизмом. Посмотрите сами демо и .

Итак, давайте подведем промежуточные итоги. До этого момента мы познакомились и с новыми возможностями интерфейса «Такси» и управляемых форм, а также с некоторыми ранее не предоставляемыми возможностями самой платформы. Теперь настало время посмотреть, какие удобные возможности стали доступны и разработчику в конфигураторе.

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

Недавно я разместил статью: пришло время это автоматизировать:

Регламентные и фоновые задания

Механизм заданий предназначен для выполнения какой-либо прикладной или функциональности по расписанию или асинхронно.

Механизм заданий решает следующие задачи:

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

Механизм заданий состоит из следующих компонентов:

  • Метаданных регламентных заданий;
  • Регламентных заданий;
  • Фоновых заданий;
  • Планировщика заданий.

Фоновые задания & предназначены для выполнения прикладных задач асинхронно. Фоновые задания реализуются средствами встроенного языка.

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

Регламентное задание имеет расписание, которое определяет, в какие моменты времени нужно выполнять связанный с регламентным заданием метод. Расписание, как правило, задается в информационной базе, но может быть задано и на этапе конфигурирования (например, для предопределенных регламентных заданий).

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

С описанием, думаю, хватит - приступим к реализации:

Создание регламентного задания

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

Использование – признак использования регламентного задания.

Предопределенное – указывает, является ли регламентное задание предопределенным.

Если хотите что бы регламентное задание заработало сразу после помещения в БД, укажите признак Предопределенное . В противном случае вам необходимо будет использовать обработку “Консоль заданий” или вызывать запуск задания программно.

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

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

Настройка расписания

Расписание выполнения задания:

Каждый час, только один день ПериодПовтораДней = 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

Особенности выполнения фоновых заданий файловом и клиент-серверном вариантах

Механизмы выполнения фоновых заданий в файловом и клиент-серверном вариантах различаются.

В файловом варианте необходимо создать выделенный клиентский процесс, который будет заниматься выполнением фоновых заданий. Для этого в клиентском процессе должна периодически вызываться функция глобального контекста ВыполнитьОбработкуЗаданий. Только один клиентский процесс на информационную базу должен выполнять обработку фоновых заданий (и, соответственно, вызывать данную функцию). Если клиентского процесса для обработки фоновых заданий не создано, то при программном доступе к механизму заданий будет выдана ошибка «Менеджер заданий не активен». Не рекомендуется клиентский процесс, выполняющий обработку фоновых заданий, использовать для других функций.

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

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

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

  • На информационную базу установлена явная блокировка регламентных заданий. Блокировка может быть установлена через консоль кластера;
  • На информационную базу установлена блокировка соединения. Блокировка может быть установлена через консоль кластера;
  • Из встроенного языка вызван метод УстановитьМонопольныйРежим() с параметром Истина;
  • В некоторых других случаях (например, при обновлении конфигурации базы данных).

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