helpf.pro
Регистрация
 +2 
Распечатать

1С 8.2 УП : Создание событий и напоминаний пользователям используя Задачи

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

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

Если услуга по монтажу оборудования предусмотрена, то автоматически должно сформироваться два напоминания (события):
- Для ответственного менеджера на дату и время напоминания
- Для сотрудника ответственного за монтаж за сутки до напоминания ответственному менеджеру.

Когда срабатывает напоминание у ответственного менеджера, он должен видеть отработано ли напоминание сотрудника по монтажу оборудования.

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

Решим ее следующим способом:
Создаем три реквизита документа Заказ покупателя: М_Монтаж (булево), М_Монтажник (Справочник пользователи) и М_ДатаМонтажа. Размещаем их на форме. Для того что бы сами реквизиты и их надписи были не видимы добавим процедуру:
Код 1C v 8.х
 Процедура М_МонтажПриИзменении(Элемент)
ЭлементыФормы.М_Монтажник.Видимость = М_Монтаж;
ЭлементыФормы.М_ДатаМонтажа.Видимость = М_Монтаж;
ЭлементыФормы.НадписьМ_Монтажник.Видимость = М_Монтаж;
ЭлементыФормы.НадписьМ_ДатаМонтажа.Видимость = М_Монтаж;
КонецПроцедуры


При открытии формы документа тоже надо проверять можно ли отображать на форме новые реквизиты. Процедура УстановитьВидимость() вызывается из процедуры ПриОткрытии(). Именно здесь продублируем код процедуры М_МонтажПриИзменении(Элемент). Существуют, конечно, варианты. Например, можно управление видимостью организовать только в процедуре УстановитьВидимость() а в МонтажПриИзменении() обращаться к ней, или в процедуре УстановитьВидимость() вызывать МонтажПриИзменении(), однако, в первом варианте при каждом изменении значения реквизита «М_Монтаж» будет происходить установка видимости всех реквизитов в форме, что негативно скажется на производительности. Второй вариант не совсем корректен с точки зрения логики расположения программного кода, по этому сделаем наш код слегка избыточным, но зато логичным и не замедляющим работу программы.
При проведении документа следует создавать Задачу пользователя с взведенным флагом «Напоминание» и установленной датой напоминания. Лучше всего располагать создание задач после проверки на корректность заполнения всех полей документов (ведь документ может не провестись, а задачи создадутся)
Код 1C v 8.х
 // Движения по документу
Если Не Отказ Тогда
ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоУслугам, ТаблицаПоТаре, Отказ, Заголовок);
Если М_Монтаж тогда
РаботаСДиалогами.ПроверитьЗадачиПоОбъекту(Ссылка);
КонецЕсли;
КонецЕсли;


Создавать задачи лучше с помощью немного доработанной процедуры РаботаСДиалогами.ПроверитьЗадачиПоОбъекту(Ссылка);
Во-первых, она проверит, есть ли введенные на основании этого документа задачи, и если обнаружит их, выдаст диалоговое окно пользователю с предложением не создавать новые. Этим мы исключим вероятность создания большого числа напоминаний при перепроведении документа. В самой функции ПроверитьЗадачиПоОбъекту() напишем:
Код 1C v 8.х
 Процедура ПроверитьЗадачиПоОбъекту(ОбъектЗадачи) Экспорт

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| *
|ИЗ
| Задача.ЗадачиПользователя.ЗадачиПоИсполнителю(
| &ТекПользователь,
| Выполнена = ЛОЖЬ И Объект = &ОбъектЗадачи)
|";
Запрос.УстановитьПараметр("ТекПользователь", ПараметрыСеанса.ТекущийПользователь);
Запрос.УстановитьПараметр("ОбъектЗадачи" , ОбъектЗадачи);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выполнение = Вопрос("Обнаружены незавершенные задачи по заданному объекту!" + Символы.ПС + " Желаете просмотреть список этих задач вместо создания новой?", РежимДиалогаВопрос.ДаНет, 0);
Если Выполнение = КодВозвратаДиалога.Да Тогда
ОткрытьЗадачиТекущегоПользователя(ОбъектЗадачи);
Возврат;
КонецЕсли;
КонецЕсли;

// Сознание Задачи
НоваяЗадача = Задачи.ЗадачиПользователя.СоздатьЗадачу();
НоваяЗадача.Объект = ОбъектЗадачи;
НоваяЗадача.Оповещение = Истина;

Если ТипЗнч(ОбъектЗадачи) = Тип("ДокументСсылка.ЗаказПокупателя") тогда
Если ОбъектЗадачи.М_Монтаж тогда
НоваяЗадача.Наименование = "Напоминание менеджеру о сборке комплекта по: " + ОбъектЗадачи.Метаданные().Синоним;
НоваяЗадача.Дата = ТекущаяДата();
НоваяЗадача.СрокОповещения = ОбъектЗадачи.М_ДатаМонтажа;
НоваяЗадача.Инициатор = ОбъектЗадачи.Ответственный;
НоваяЗадача.Исполнитель = ОбъектЗадачи.Ответственный;
НоваяЗадача.Записать();

// Напоминание мастеру
НоваяЗадача = Задачи.ЗадачиПользователя.СоздатьЗадачу();
НоваяЗадача.Дата = ТекущаяДата();
НоваяЗадача.Объект = ОбъектЗадачи;
НоваяЗадача.Инициатор = ОбъектЗадачи.Ответственный;
НоваяЗадача.Оповещение = Истина;
НоваяЗадача.Исполнитель = ОбъектЗадачи.М_Монтажник;
НоваяЗадача.Наименование = "Напоминание мастеру о сборке комплекта по: " + ОбъектЗадачи.Метаданные().Синоним;
НоваяЗадача.СрокОповещения = ОбъектЗадачи.М_ДатаМонтажа - 24 * 60 * 60;
НоваяЗадача.Записать();
КонецЕСли;
Иначе
НоваяЗадача.Наименование = "Напоминание по объекту: " + ОбъектЗадачи.Метаданные().Синоним;
ФормаНовой = НоваяЗадача.ПолучитьФорму();
ФормаНовой.Открыть();
КонецЕсли;
КонецПроцедуры

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

Отчет в задании совсем не сложный, правда, могут возникнуть сомнения какой заказ считать закрытым. Как известно, заказ покупателя делает два движения. Одно по регистру «Заказы покупателя» где в разрезе номенклатуры, ведется учет по отгруженным товарам, второе по регистру «Расчеты с контрагентами» и здесь контролируется оплата по заказу. Думаю, что закрытым можно считать заказ, которого нет в остатках ни по одному, ни по второму регистру. Соединив их полным соединением, а так же присоединив таблицу Задач пользователя, получим отчет по незакрытым заказам пользователя.
Автор: Максим Нечистяк
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 37748
 +2 
Распечатать
Возможно, вас также заинтересует
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
Google maps, поиск оптимального маршрута 5
В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; * Координаты начальной и коне
HTML5 Canvas в 1С 8.3 или Google нам поможет 0
Добрался я для написания маленьких тестов для 1С в плане web графики. Версии 1С 8.2.61 и 8.3.3.641. Зайдем на http://www.w3schools.com/html/html5_canvas.asp и перенесем примеры в обработку 1С. Скачать обработку: Результаты не радуют. 1С в Intern
Автоматическое резервное копирование 1С:Предприятия в облако с помощью ПО Effector Saver 4
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же
Битая ссылка, <Объект не найден>, Уникальный Идентификатор, GUID 74
Когда кто-то удаляет данные из базы без проверки ссылок на эти объекты, то везде где этот объект использовался появляется сообщение вида: Объект не найден (84:bf5600145e3710ab11dda4c605dbe824) . https://helpf.pro/uploads/img/_1-46z7I4U7Ww.png В
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.