Файл: Разработка регламента выполнения процесса «Управление документооборотом» (1 Построение бизнес-процессов «как есть»).pdf
Добавлен: 28.06.2023
Просмотров: 343
Скачиваний: 2
СОДЕРЖАНИЕ
1 Построение бизнес-процессов «как есть»
1.1 Описание предметной области. Постановка задачи
1.2 Выбор средства для моделирования бизнес-процессов
1.3 Моделирование бизнес-процессов «как есть»
2 Построение бизнес-процессов «как должно быть»
2.1 Предлагаемые мероприятия по улучшению бизнес-процессов
ЗаписьЖурналаРегистрации("Автоматическая загрузка файлов",
УровеньЖурналаРегистрации.Ошибка, , ,
ТекстОшибки);
Продолжить;
КонецЕсли;
Если Папка.Пустая() Тогда
ЗаписьЖурналаРегистрации("Автоматическая загрузка файлов",
УровеньЖурналаРегистрации.Ошибка, , ,
НСтр("ru = 'Не указана папка'"));
Продолжить;
КонецЕсли;
Если Пользователь.Пустая() Тогда
ЗаписьЖурналаРегистрации("Автоматическая загрузка файлов",
УровеньЖурналаРегистрации.Ошибка, , ,
НСтр("ru = 'Не указан пользователь'"));
Продолжить;
КонецЕсли;
Если Не ЕстьПравоДоступа(Пользователь, Папка) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'У пользователя ""%1"" нет прав на добавление файлов в папку ""%2""'"),
Пользователь, Папка);
ЗаписьЖурналаРегистрации("Автоматическая загрузка файлов",
УровеньЖурналаРегистрации.Ошибка, , ,
ТекстОшибки);
Продолжить;
КонецЕсли;
Попытка
ВыбранныеФайлы = Новый СписокЗначений;
НайденныеФайлы = НайтиФайлы(КаталогНаДиске, "*.*");
Для Каждого ФайлВложенный Из НайденныеФайлы Цикл
ВыбранныеФайлы.Добавить(ФайлВложенный.ПолноеИмя);
КонецЦикла;
ПсевдоФайловаяСистема = Новый Соответствие; // соответствие путь к директории - файлы и папки в ней
ДобавленныеФайлы = Новый Массив;
МассивИменФайловСОшибками = Новый Массив;
Описание = "";
ХранитьВерсии = Истина;
УдалятьФайлыПослеДобавления = Истина;
ПапкаДляДобавленияТекущая = ИмпортФайловВыполнить(
Папка,
ВыбранныеФайлы,
Описание,
ХранитьВерсии,
УдалятьФайлыПослеДобавления,
Истина,
Неопределено, //УникальныйИдентификатор,
ПсевдоФайловаяСистема,
ДобавленныеФайлы,
Истина, // режим загрузки
Пользователь,
МассивИменФайловСОшибками,
СтратегияРаспознавания,
ЯзыкРаспознавания);
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Закончена автоматическая загрузка файлов из каталога ""%1"" в папку ""%2"". Загружено файлов: %3. Не удалось загрузить файлов: %4.'"),
КаталогНаДиске, Папка, ДобавленныеФайлы.Количество(), МассивИменФайловСОшибками.Количество());
ЗаписьЖурналаРегистрации("Автоматическая загрузка файлов",
УровеньЖурналаРегистрации.Информация, , ,
ТекстСообщения);
Исключение
// запись в журнал регистрации
ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка автоматической загрузки файлов: ""%1"" из каталога ""%2"" в папку ""%3""'"),
ОписаниеОшибки, КаталогНаДиске, Папка);
ЗаписьЖурналаРегистрации("Автоматическая загрузка файлов",
УровеньЖурналаРегистрации.Ошибка, , ,
ТекстСообщения);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Процедура ЗаписатьСобытие(Задача, Событие, Комментарий = "") Экспорт
УстановитьПривилегированныйРежим(Истина);
МенеджерЗаписи = РегистрыСведений.ИсторияСобытийЗадач.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Задача = Задача;
МенеджерЗаписи.ДатаСобытия = ТекущаяДата();
МенеджерЗаписи.Пользователь = ПараметрыСеанса.ТекущийПользователь;
МенеджерЗаписи.Событие = Событие;
МенеджерЗаписи.Комментарий = Комментарий;
МенеджерЗаписи.Записать();
КонецПроцедуры
Процедура ЗаписатьСобытиеОткрытаКарточка(Задача) Экспорт
ЗаписатьСобытие(Задача, Перечисления.ВидыСобытийЗадач.ОткрытаКарточка);
КонецПроцедуры
// Выводит состояние документа (проведен, не проведен, записан)
Процедура ОбновитьСостояниеДокумента(Ссылка, СостояниеДокумента, КартинкаСостоянияДокумента) Экспорт
Проведен = Ссылка.Проведен;
ПометкаУдаления = Ссылка.ПометкаУдаления;
РазрешеноПроведение = (Ссылка.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить);
Если ПометкаУдаления Тогда
СостояниеДокумента = "Помечен на удаление";
КартинкаСостоянияДокумента = 2;
ИначеЕсли Проведен Тогда
СостояниеДокумента = "Проведен";
КартинкаСостоянияДокумента = 1;
ИначеЕсли РазрешеноПроведение Тогда
СостояниеДокумента = "Не проведен";
КартинкаСостоянияДокумента = 0;
Иначе
СостояниеДокумента = "Записан";
КартинкаСостоянияДокумента = 3;
КонецЕсли;
КонецПроцедуры
// Продляет срок действия документов из регламентного задания
Процедура АвтоматическоеПродлениеДоговоров() Экспорт
УстановитьПривилегированныйРежим(Истина);
ДокументыОтветственных = Новый ТаблицаЗначений;
ДокументыОтветственных.Колонки.Добавить("Документ");
ДокументыОтветственных.Колонки.Добавить("Ответственный");
ДокументыОтветственных.Колонки.Добавить("СтараяДатаОкончания");
ДокументыОтветственных.Колонки.Добавить("НоваяДатаОкончания");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВнутренниеДокументы.Ссылка,
| ВнутренниеДокументы.ПорядокПродления,
| ВнутренниеДокументы.Ответственный
|ИЗ
| Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
|ГДЕ
| ВнутренниеДокументы.ВидДокумента.УчитыватьСрокДействия
| И (НЕ ВнутренниеДокументы.Бессрочный)
| И ВнутренниеДокументы.ПорядокПродления В(&ПорядокПродления)
| И КОНЕЦПЕРИОДА(ВнутренниеДокументы.ДатаОкончанияДействия, ДЕНЬ) < &ТекущаяДата";
ПорядокПродления = Новый Массив;
ПорядокПродления.Добавить(Перечисления.ПорядокПродления.АвтоматическиНаМесяц);
ПорядокПродления.Добавить(Перечисления.ПорядокПродления.АвтоматическиНаКвартал);
ПорядокПродления.Добавить(Перечисления.ПорядокПродления.АвтоматическиНаПолугодие);
ПорядокПродления.Добавить(Перечисления.ПорядокПродления.АвтоматическиНаГод);
ПорядокПродления.Добавить(Перечисления.ПорядокПродления.АвтоматическиНаНеопределенныйСрок);
Запрос.УстановитьПараметр("ПорядокПродления", ПорядокПродления);
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ПорядокПродления = Перечисления.ПорядокПродления.АвтоматическиНаМесяц Тогда
НаСрок = 1;
ИначеЕсли Выборка.ПорядокПродления = Перечисления.ПорядокПродления.АвтоматическиНаКвартал Тогда
НаСрок = 3;
ИначеЕсли Выборка.ПорядокПродления = Перечисления.ПорядокПродления.АвтоматическиНаПолугодие Тогда
НаСрок = 6;
ИначеЕсли Выборка.ПорядокПродления = Перечисления.ПорядокПродления.АвтоматическиНаГод Тогда
НаСрок = 12;
КонецЕсли;
Объект = Выборка.Ссылка.ПолучитьОбъект();
СтараяДатаОкончания = Объект.ДатаОкончанияДействия;
Если Выборка.ПорядокПродления = Перечисления.ПорядокПродления.АвтоматическиНаНеопределенныйСрок Тогда
Объект.ДатаОкончанияДействия = '00010101';
Объект.Бессрочный = Истина;
НоваяДатаОкончания = "Бессрочный";
Иначе
Если КонецДня(Объект.ДатаОкончанияДействия) = КонецМесяца(Объект.ДатаОкончанияДействия) Тогда
Объект.ДатаОкончанияДействия = КонецМесяца(ДобавитьМесяц(Объект.ДатаОкончанияДействия, НаСрок));
Иначе
Объект.ДатаОкончанияДействия = ДобавитьМесяц(Объект.ДатаОкончанияДействия, НаСрок);
КонецЕсли;
НоваяДатаОкончания = Объект.ДатаОкончанияДействия;
КонецЕсли;
ТекстСообщения = "";
Попытка
ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка);
Объект.Записать();
// Записываем информацию о продлении в историю срока действия документа.
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("Документ", Объект.Ссылка);
ПараметрыЗаписи.Вставить("ДатаНачалаДействия", Объект.ДатаНачалаДействия);
ПараметрыЗаписи.Вставить("ДатаОкончанияДействия", Объект.ДатаОкончанияДействия);
ПараметрыЗаписи.Вставить("Бессрочный", Объект.Бессрочный);
ПараметрыЗаписи.Вставить("ПорядокПродления", Объект.ПорядокПродления);
ПараметрыЗаписи.Вставить("ДокументИсточникИзменения", Неопределено);
ПараметрыЗаписи.Вставить("Комментарий", НСтр("ru = 'Срок действия документа автоматически продлен.'"));
РегистрыСведений.ИсторияСроковДействияДокументов.ДобавитьЗапись(ПараметрыЗаписи);
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка при автоматическом продлении срока действия документа: %1.'"),
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
УровеньВажностиСобытия = УровеньЖурналаРегистрации.Ошибка;
КонецПопытки;
Если ПустаяСтрока(ТекстСообщения) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Автоматически продлен срок действия документа до %1.'"),
Формат(НоваяДатаОкончания, "ДФ=dd.MM.yyyy"));
УровеньВажностиСобытия = УровеньЖурналаРегистрации.Информация;
Если ЗначениеЗаполнено(Выборка.Ответственный) Тогда
НоваяСтрока = ДокументыОтветственных.Добавить();
НоваяСтрока.Документ = Выборка.Ссылка;
НоваяСтрока.Ответственный = Выборка.Ответственный;
НоваяСтрока.СтараяДатаОкончания = СтараяДатаОкончания;
НоваяСтрока.НоваяДатаОкончания = НоваяДатаОкончания;
КонецЕсли;
КонецЕсли;
ЗаписьЖурналаРегистрации(НСтр("ru = 'Автоматическое продление договоров.'"), УровеньВажностиСобытия, Выборка.Ссылка.Метаданные(), Выборка.Ссылка, ТекстСообщения);
КонецЦикла;
// отправка уведомлений по почте
Ответственные = ДокументыОтветственных.Скопировать();
Ответственные.Свернуть("Ответственный");
Для Каждого Строка Из Ответственные Цикл
Ответственный = Строка.Ответственный;
ПочтовыйАдрес = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Ответственный, Справочники.ВидыКонтактнойИнформации.EmailПользователя);
Если ПустаяСтрока(ПочтовыйАдрес) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Уведомление не было отправлено, так как у пользователя %1 не задан адрес электронной почты.'"),
Строка(Ответственный));
ЗаписьЖурналаРегистрации(НСтр("ru = 'Уведомление об автоматическом продлении договоров'"), УровеньЖурналаРегистрации.Информация,,, ТекстСообщения);
Продолжить;
КонецЕсли;
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", ПочтовыйАдрес);
ТелоПисьма =
НСтр("ru = 'У следующих документов был автоматически продлен срок действия:
|
|'");
НайденныеСтроки = ДокументыОтветственных.НайтиСтроки(Новый Структура("Ответственный", Ответственный));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
ТелоПисьма = ТелоПисьма
+ НайденнаяСтрока.Документ.Заголовок
+ ?(ЗначениеЗаполнено(НайденнаяСтрока.Документ.РегистрационныйНомер), " № " + НайденнаяСтрока.Документ.РегистрационныйНомер, "")
+ ?(ЗначениеЗаполнено(НайденнаяСтрока.Документ.ДатаРегистрации), " от " + Формат(НайденнаяСтрока.Документ.ДатаРегистрации,"ДФ=dd.MM.yyyy"), "")
+ ?(ЗначениеЗаполнено(НайденнаяСтрока.Документ.Корреспондент), ", корреспондент " + Строка(НайденнаяСтрока.Документ.Корреспондент), "")
+ НСтр("ru = ' - срок действия продлен до '") + Формат(НайденнаяСтрока.НоваяДатаОкончания, "ДФ=dd.MM.yyyy") + Символы.ПС;
КонецЦикла;
ПараметрыПисьма.Вставить("Текст", ТелоПисьма);
ТемаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Автоматически продлены сроки действия документов (%1)'"),
НайденныеСтроки.Количество());
ПараметрыПисьма.Вставить("Тема", ТемаПисьма);
ТекстСообщения = "";
Попытка
ЛегкаяПочтаСервер.ОтправитьИнтернетПочта(ПараметрыПисьма);
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка при отправке уведомления об автоматическом продлении договоров: %1.'"),
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
УровеньВажностиСобытия = УровеньЖурналаРегистрации.Ошибка;
КонецПопытки;
Если ПустаяСтрока(ТекстСообщения) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Уведомление об автоматическом продлении договоров успешно отправлено на адрес %1.'"),
ПочтовыйАдрес);
УровеньВажностиСобытия = УровеньЖурналаРегистрации.Информация;
КонецЕсли;
ЗаписьЖурналаРегистрации(НСтр("ru = 'Автоматическое продление договоров'"), УровеньВажностиСобытия,,, ТекстСообщения);
КонецЦикла;
КонецПроцедуры
/////////////////////////////////////////////////////////////////////////////////////////
// РАБОТА С ИМЕНЕМ ФАЙЛА
// Возвращает структуру
// Результат (Структура)
// - Имя (Строка)
// - Расширение (Строка)
//
// Параметры:
// - ИмяФайла (Строка)
//
Функция РазложитьИмяФайла(ИмяФайла) Экспорт
Расширение = ИмяФайла;