Правильная реализация регламентных заданий на основе дополнительных обработок

02.10.25

База данных - Инструменты администратора БД

Оптимизация работы с дополнительными обработками.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Правильная реализация регламентных заданий на основе дополнительных обработок
.epf 7,03Kb
3 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

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



 

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

 

 

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

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

Модуль формы (только для отладки, сама форма опциональна):

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	РеквизитФормыВЗначение("Объект").ВыполнитьКоманду("ПримерКомандыПоРасписанию");
	
КонецПроцедуры

#КонецОбласти

 

Модуль объекта:
 

#Область ПрограммныйИнтерфейс

Функция СведенияОВнешнейОбработке() Экспорт
	
	ИмяОбработки = Метаданные().Имя;
	Синоним = Метаданные().Синоним;
	Синоним = ?(ЗначениеЗаполнено(Синоним), Синоним, ОбщегоНазначенияБПКлиентСервер.СинонимИзИмени(ИмяОбработки));
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	ПараметрыРегистрации.Наименование = Синоним;
	ПараметрыРегистрации.Версия = "1.0";
	
	ТаблицаКоманд = ПараметрыРегистрации.Команды;
	
	Команда = ТаблицаКоманд.Добавить();
	Команда.Идентификатор = "ПримерКомандыПоРасписанию";
	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	Команда.Представление = ОбщегоНазначенияБПКлиентСервер.СинонимИзИмени(Команда.Идентификатор);
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

Функция ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды = Неопределено) Экспорт
	
	Если ЭтаКомандаВыполняется(ИдентификаторКоманды) Тогда
		
		Возврат Неопределено;
		
	КонецЕсли;
	
	ОбщегоНазначения.ВыполнитьМетодОбъекта(ЭтотОбъект, ИдентификаторКоманды, ПараметрыКоманды);
	
КонецФункции

Процедура ПримерКомандыПоРасписанию() Экспорт

	ИнтернетПоддержкаПользователей.Пауза(60);

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ЭтаКомандаВыполняется(ИдентификаторКоманды)

	СведенияОВнешнейОбработке = СведенияОВнешнейОбработке();
	Команда = СведенияОВнешнейОбработке.Команды.Найти(ИдентификаторКоманды, "Идентификатор");
	НаименованиеФоновогоЗадания = ПредставлениеЗадания(Команда, СведенияОВнешнейОбработке);
	ТекущееФоновоеЗадание = ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание();
	
	ОтборФоновыхЗаданий = Новый Структура;
	ОтборФоновыхЗаданий.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
	ОтборФоновыхЗаданий.Вставить("Наименование", НаименованиеФоновогоЗадания);
	АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборФоновыхЗаданий);
	УдалитьТекущееФоновоеЗадание(АктивныеФоновыеЗадания, ТекущееФоновоеЗадание);
	
	Возврат АктивныеФоновыеЗадания.Количество() > 0;
	
КонецФункции

Процедура УдалитьТекущееФоновоеЗадание(АктивныеФоновыеЗадания, ТекущееФоновоеЗадание)

	Если ТекущееФоновоеЗадание = Неопределено Тогда
		
		Возврат;
		
	КонецЕсли;
	
	КоличествоЭлементовКоллекции = АктивныеФоновыеЗадания.Количество();
	
	Для ОбратныйИндекс = 1 По КоличествоЭлементовКоллекции Цикл
		
		Индекс = КоличествоЭлементовКоллекции - ОбратныйИндекс;
		
		Если АктивныеФоновыеЗадания[Индекс].УникальныйИдентификатор = ТекущееФоновоеЗадание.УникальныйИдентификатор Тогда
			
			АктивныеФоновыеЗадания.Удалить(Индекс);
			
		КонецЕсли;
		
	КонецЦикла;

КонецПроцедуры

// '[ВидОбъекта]: [НаименованиеОбъекта] / Команда: [ПредставлениеКоманды]'
Функция ПредставлениеЗадания(Команда, СведенияОВнешнейОбработке)
	
	Возврат (
		СокрЛП(ДополнительныеОтчетыИОбработки.ПолучитьВидОбработкиПоСтроковомуПредставлениюВида(
			СведенияОВнешнейОбработке.Вид))
		+ ": "
		+ СокрЛП(СведенияОВнешнейОбработке.Наименование)
		+ " / "
		+ НСтр("ru = 'Команда'")
		+ ": "
		+ СокрЛП(Команда.Представление));
		
КонецФункции

#КонецОбласти


Внедрялось и тестировалось на платформе 8.3.25.1374.

Вступайте в нашу телеграмм-группу Инфостарт

бсп дополнительные обработки шаблон оптимизация регламентные фоновые задания команды

См. также

Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    28058    102    46    

107

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14640 руб.

29.04.2020    52355    142    164    

97

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

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

6000 руб.

15.04.2026    3782    9    0    

23

SALE! 10%

Инструменты администратора БД Роли и права Системный администратор Разработчик Пользователь 1С 8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 17.04.2026, версия 1.4.1, работает в 1С:ФРЕШ!

23180 20862 руб.

06.12.2023    24603    83    14    

116

Инструменты администратора БД Корректировка данных Мониторинг Учет документов 1С 8.3 1С:Управление торговлей 10 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

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

6100 руб.

11.06.2026    911    2    0    

4

Инструменты администратора БД Системный администратор 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

5490 руб.

10.11.2015    66658    104    59    

86
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. glek 119 03.10.25 07:32 Сейчас в теме
Хорошая идея.
rozer; RustIG; +2 – Ответить
4. vasilev2015 2863 03.10.25 15:17 Сейчас в теме
(1) Идея НЕ хорошая, потому что не исключает одновременное выполнение заданий, например при одновременном запуске. Для надежности лучше использовать команду Заблокировать(). Объектные блокировки в 1С предназначены для обеспечения конкурентного доступа пользователей к объектам базы данных — например, конкретному элементу справочника, конкретному документу.
5. janit 46 03.10.25 17:36 Сейчас в теме
(4)
(1) Идея НЕ хорошая, потому что не исключает одновременное выполнение заданий, например при одновременном запуске. Для надежности лучше использовать команду Заблокировать(). Объектные блокировки в 1С предназначены для обеспечения конкурентного доступа пользователей к объектам базы данных — например, конкретному элементу справочника, конкретному документу.


Мне кажется, вы говорите о разных слоях сценариев.
1. Никто не мешает вам дополнительно к проверке запуска фоновых заданий добавить блокировки.
2. Не всегда фоновые задания что-то записывают, в некоторых сценариях это может быть работа с внешними сервисами.
6. vasilev2015 2863 03.10.25 19:59 Сейчас в теме
(5) Для того, чтобы предотвратить ситуацию, "когда всё новые и новые экземпляры фоновых заданий стартуют, не дожидаясь завершения предыдущих фоновых заданий по регламентному заданию", применяйте объектную блокировку. Например, блокируйте избранный элемент справочника "Внешние отчеты и обработки" до конца работы задания. Это предотвратит повторный запуск. После блокировки ничего записывать не нужно. Поиск по наименованию ненадежен, не дает полной гарантии.
8. janit 46 05.10.25 11:46 Сейчас в теме
(6)
ты задания. Это предотвратит повторный запуск. После блокировки ничего записывать не нужно. Поиск по наименованию ненадежен, не дает полной гарантии

Интересная идея, спасибо.

Пока вижу два нюанса:
1) При обновлении обработки необходимо завершать фоновое
2) Данное решение неприменимо для обработок, с более чем одной командой по расписанию
7. qwinter 686 05.10.25 10:03 Сейчас в теме
(5)
Мне кажется, вы говорите о разных слоях сценариев
Вы прям уверены в непрерывности использования конкретного сценария на всем протяжении периода поддержки? Особенно если дорабатывать будет другой программист?
9. janit 46 05.10.25 11:47 Сейчас в теме
(7)
рерывности использования конкретного сцена

Нет, я имел в виду, что эти подходы совместимы, а не взаимоисключающие друг друга
2. RustIG 1990 03.10.25 08:09 Сейчас в теме
АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборФоновыхЗаданий);
УдалитьТекущееФоновоеЗадание(АктивныеФоновыеЗадания, ТекущееФоновоеЗадание);

Возврат АктивныеФоновыеЗадания.Количество() > 0;

Насколько быстро /медленно выполняется этот код?
пока команда будет считывать сведения из базы, ситуация может измениться
serg-lom89; +1 – Ответить
3. janit 46 03.10.25 10:00 Сейчас в теме
(2) На рабочей базе довольно быстро, но у меня не высоконагруженный сервер
Прикрепленные файлы:
Для отправки сообщения требуется регистрация/авторизация