Имя: Пароль:
1C
 
Вопрос по регламентному заданию
0 1сПупс
 
18.05.26
09:14
Коллеги, доброго дня!
Есть УТ типовая, последний релиз.
Подскажите как сделать чтобы в клиент серверной базе регламентное задание выполнялось последовательно?(пока не окончено, не запускалось еще раз)

А то бывает такая ситуация: задание запущено по расписанию, выполняется, пользователь запускает вручную и создаются дубли объектов.
1 Kongo2019
 
18.05.26
09:18
(0) Можно через константы, например, отслеживать - работает или нет.
2 Fish
 
гуру
18.05.26
09:29
(0) Надо, чтобы регламентное задание не создавало дублей. Иначе два пользователя запустят его - и будут те же грабли. Ну или константу взводить.
3 Fish
 
гуру
18.05.26
09:30
+(2) Но константа - вещь ненадёжная. Если регламентное упадет с ошибкой или будет какой-то  сбой - она останется включенной. Надо это тоже предусмотреть.
4 PuhUfa
 
18.05.26
09:32
(0)
БСП. ДлительныеОперации.ЗаданиеВыполнено
// Проверяет состояние фонового задания по переданному идентификатору
// Возвращаемое значение:
//  Булево - состояние выполнения задания.
//  Структура:
//   * Статус      - Строка - "Выполняется", если задание еще не завершилось;
//                            "Выполнено", если задание было успешно выполнено;
//                            "Ошибка", если задание завершено с ошибкой;
//                            "Отменено", если задание отменено пользователем или администратором.
5 Климов Сергей
 
18.05.26
09:36
1C:Напарник для разработки

09:34
Чтобы узнать, выполняется ли сейчас определённое регламентное задание, можно использовать свойства и методы объекта РегламентноеЗадание в 1С.

Анализ задачи:

Нам нужно получить информацию о текущем состоянии регламентного задания.
Для этого мы будем использовать метод ПолучитьРегламентноеЗадание() и свойство Выполняется.
Планирование и кодирование:

Получить UUID регламентного задания, которое мы хотим проверить.
Использовать метод РегламентныеЗадания.ПолучитьРегламентноеЗадание(UUID) для получения объекта регламентного задания.
Проверить свойство Выполняется полученного объекта.
Кодирование:

Напишем функцию, которая принимает UUID регламентного задания и возвращает Истина, если задание выполняется, и Ложь в противном случае.

Функция РегламентноеЗаданиеВыполняется(UUIDЗадания) Экспорт
    РегламентноеЗадание = РегламентныеЗадания.ПолучитьРегламентноеЗадание(UUIDЗадания);
    Если РегламентноеЗадание <> Неопределено Тогда
        Возврат РегламентноеЗадание.Выполняется;
    Иначе
        // Можно записать в журнал регистрации, что задание не найдено
        // ЗаписьЖурналаРегистрации("Ошибка", УровеньЖурналаРегистрации.Ошибка, , , "Регламентное задание с UUID " + UUIDЗадания + " не найдено");
        Возврат Ложь; // Или можно бросить исключение, в зависимости от логики приложения
    КонецЕсли;
КонецФункции
Пример использования:
Чтобы использовать эту функцию, вам нужно знать UUID регламентного задания. UUID можно получить из свойства УникальныйИдентификатор объекта РегламентноеЗадание, например, в обработчике события ПриСозданииНаСервере формы списка регламентных заданий.

&НаКлиенте
Процедура ПроверитьСтатусРегламентногоЗадания(UUIDЗадания)
    Если РегламентноеЗаданиеВыполняется(UUIDЗадания) Тогда
        Сообщить("Регламентное задание выполняется");
    Иначе
        Сообщить("Регламентное задание не выполняется");
    КонецЕсли;
КонецПроцедуры
Важные моменты:

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

(с) 1С:Напарник для разработки
https://portalchat.1c.ai/conversation
6 PuhUfa
 
18.05.26
09:39
(0) >>и создаются дубли объектов.
И почему в регламентном задании нет проверки при создании нового объекта. Есть он уже или нет?
Ошибка? Это не ошибка, это системная функция.