Заказы на доработку 1С (сервис удаленной работы) Неназначенных незавершенных заказов: Форум ПРАВИЛА 5 ВОЙНА с РОССИЕЙ Хранилище База знаний Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С Обратная связь Поиск Здравствуйте, гость ( Вход | Зарегистрироваться ) Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 » Программисту » Программирование в 1С Предприятие 8.3 Реализовать автоматическое выполнение задач для данного исполнителя VLADAL 16.04.19, 12:55 Конфгурация на БСП 3.0.2, платформа 8.3.13. Есть бизнес-процесс с "линейной" картой. Уменьшено: 60% от [ 322 на Оратор 523 ] — нажмите для просмотра полного изображения Группа: Местный Сообщений: 365 Из: Slovensko Спасибо сказали: 73 раз Рейтинг: 61 По "пожеланиям телезрителей" нужно автоматически закрывать задачу, если этот пользователь (адресат исполнения) в данном бизнеспроцессе уже закрывал задачу положительно. В моем случае "локальный директор", "финансовый" и "исполнительный" - одно и то же лицо и нужно упростить, автоматизировать зак последующих задач. Что есть: при интерактивном закрытии задачи формируется следующая, в которую нужно зайти и нажать кнопку Согласовать, и так три (на карте три последние точки маршрута). Что я дописал: В отладчике я вижу, что точки бизнес-процесса продвигаются, задача меняется, выполняется, но в конце маршрута вываливается с ош Цитата Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменен или удалена)! Естественно, ссылка одна и та же, да и открыта интерактивно. Делал это программно. Получил ссылку на текущую задачу, вызвал метод ВыполнитьЗадачу(), в отладчике прослеживаю все этапы и н последнем шаге получаю ошибку о невозможности закрыть задачу, так как она уже была выполнена. Как это сделать правильно? В обработчике точки маршрута ВыполнитьПриСозданииЗадач пишу свой код: //////////////////////////////////////////////////////////////////////////////// // Обработчики событий элементов карты маршрута. Процедура ВыполнитьПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ) : НомерИтерации = НомерИтерации + 1; Записать(); // Устанавливаем реквизиты адресации и доп. реквизиты для каждой задачи. Для каждого Задача Из ФормируемыеЗадачи Цикл Если ТочкаМаршрутаБизнесПроцесса.Имя = "СогласованиеФинансовыйКонтролер" Тогда Задача.РольИсполнителя = Справочники.РолиИсполнителей.ФинансовыйКонтролер; ... // Определить. был ли этот исполнитель в предыдущих точках маршрута Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | | | ЗадачаИсполнителя.Ссылка КАК Ссылка, ЗадачаИсполнителя.БизнесПроцесс КАК БизнесПроцесс, ЗадачаИсполнителя.Выполнена КАК Выполнена, | ЗадачаИсполнителя.ГруппаИсполнителейЗадач КАК ГруппаИсполнителейЗадач, ... Запрос.УстановитьПараметр("ОсновнойОбъектАдресации", Задача.ОсновнойОбъектАдресации); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Задача.ГруппаИсполнителейЗадач = Выборка.ГруппаИсполнителейЗадач; Задача.Исполнитель = Выборка.Исполнитель; Задача.ДополнительныйОбъектАдресации = Выборка.ДополнительныйОбъектАдресации; //-- сделал и так, но все равно последняя задача рубится с ошибкой, что она выполнена и вся транзакция откатывается н Если Не Задача.Выполнена Тогда Задача.ВыполнитьЗадачу(); КонецЕсли; //-- вызывал и типовой модуль, но он тоже валится... //БизнесПроцессыИЗадачиВызовСервера.ВыполнитьЗадачу(Задача.Ссылка, Истина); КонецЕсли; Сообщение отредактировал Vofka - 16.04.19, 14:47 Ответить VLADAL Цитировать выделе 16.04.19, 18:51 Сделал эксперимент. В пустой конфе создал БП и Задачу, в карте маршрута добавил несколько пунктов линейно, в обработчик записал код: Процедура ПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ) Оратор Группа: Местный Сообщений: 365 Из: Slovensko Спасибо сказали: 73 раз Рейтинг: 61 ФормируемыеЗадачи[0].Записать(); ФормируемыеЗадачи[0].ВыполнитьЗадачу(); КонецПроцедуры БП стартует, создает столько же задач, сколько в карте, и закрывается с выполнением. Сферический конь в вакууме не привел к ошибке. Единственное, что если создать БП и в форме только что созданного объекта Что делать? Ответить VLADAL Цитировать выделе 17.04.19, 16:01 Будет хорошим тоном написать, как я решил эту проблему. Оратор : Группа: Местный Сообщений: 365 Из: Slovensko Спасибо сказали: 73 раз Рейтинг: 61 В пустой базе "сферический конь в вакууме" работает так, как мне надо, значит я на верном пути. В рабочей конфе тоже все отрабатывает, если закрывать задачу непосредственно самой задачей Задача.ВыполнитьЗадачу(); вместо вызова модуля БизнесПроцессыИЗадачиВызовСервера.ВыполнитьЗадачу(Задача.Ссылка Истина);. Но при этом все равно валилась ошибка об измененном объекте и несоответствии версий. Попробовал записывать задачу перед закрытием, ожидаемого эффекта не было, ошибка осталась, зато отладчик Задача.Ссылка.УникальныйИдентификатор() показывал, что создаются разные задачи и к ним потом рекурсивно обращается метод ВыполнитьЗадачу(). Ок. Но при выходе из каждой итерации рекурсии каждая из задач оказывалась с признаком Выполнена, и соответственно в модуле самой задачи не проходила проверку по условию: ... ИначеЕсли НЕ ПометкаУдаления И ИсходныеРеквизиты.Выполнена И Выполнена Тогда ОбщегоНазначения.СообщитьПользователю( НСтр("ru='Эта задача уже была выполнена ранее.';en='This task has already been done earlier.'"),,,, Отказ); Возврат; КонецЕсли; Нужен был какой-то признак для игнора этой проверки. Добавил свойство Автозакрытие в ДополнительныеСвойства и всё получилось! В бизнес-процессе после определения, что задача должна закрыться автоматически, добавляю в объект признак Автозакрытие: Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Если Не Задача.Выполнена Тогда Задача.ДополнительныеСвойства.Вставить("Автозакрытие", Истина); Задача.ВыполнитьЗадачу(); КонецЕсли; КонецЕсли; А в модуле задачи ПередЗаписью читаю, есть ли этот признак и вызываю проверку: ИначеЕсли НЕ ПометкаУдаления И ИсходныеРеквизиты.Выполнена И Выполнена И НЕ ЭтоАвтоЗакрытие Тогда // При автозакрытии из БП не проводить эту проверку ОбщегоНазначения.СообщитьПользователю( НСтр("ru='Эта задача уже была выполнена ранее.';en='This task has already been done earlier.'"),,,, Отказ); Возврат; КонецЕсли; Всё работает, все счастливы. Спасибо сказали: Vofka, RPASHKOVSKY Молчаливый Группа: Пользователи Сообщений: 1 Спасибо сказали: 0 раз Рейтинг: 0 Ответить Цитировать выделе Ответить Цитировать выделе 21.04.19, 18:15 Vladal @ 17.04.19, 16:01 , Прочитайте его перед записью, раз он у вас изменяется, сильно не вчитывался, но логика следующая Объект.ПРочитать(); Объект.Задача.ПолучитьОбъект().ВыполнитьЗадачу(); Под объектом имею в виду сам БП Сообщение отредактировал Vofka - 22.04.19, 8:06 VLADAL 22.04.19, 8:39 rpashkovsky @ Вчера, 19:15 , Как раз с БП всё в порядке. после записи задачи назначается оповещение при котором его объект перечитывается в форме. Я же стартовал задачи программно - ошибка проявлялась после выхода каждой задачи из рекурсии. Оратор Задача решена двумя днями головоломок и 10 строками. Группа: Местный Сообщений: 365 Из: Slovensko Спасибо сказали: 73 раз Рейтинг: 61 : Ответить Цитировать выделе Не нашли ответа на свой вопрос? Зарегистрируйтесь и задайте новый вопрос. Ключевое слово « Предыдущая тема · Программирование в 1С Предприятие 8.3 · Найти в этой теме Ответить 1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0) Пользователей: 0 |-- Программирование в 1С Предприятие 8.3 Текстовая версия Сейчас: 21.11.2 Форум IP.Board © 2022 IPS, Inc. : 1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методи поддержка 1С - всё в одном месте: на Украинском 1С форуме!