Файл: Разработка регламента выполнения процесса «Управление документооборотом» (1 Построение бизнес-процессов «как есть»).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.06.2023

Просмотров: 343

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ЗаписьЖурналаРегистрации("Автоматическая загрузка файлов",

УровеньЖурналаРегистрации.Ошибка, , ,

ТекстОшибки);

Продолжить;

КонецЕсли;

Если Папка.Пустая() Тогда

ЗаписьЖурналаРегистрации("Автоматическая загрузка файлов",

УровеньЖурналаРегистрации.Ошибка, , ,

НСтр("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 = 'Автоматическое продление договоров'"), УровеньВажностиСобытия,,, ТекстСообщения);

КонецЦикла;

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

/////////////////////////////////////////////////////////////////////////////////////////

// РАБОТА С ИМЕНЕМ ФАЙЛА

// Возвращает структуру

// Результат (Структура)

// - Имя (Строка)

// - Расширение (Строка)

//

// Параметры:

// - ИмяФайла (Строка)

//

Функция РазложитьИмяФайла(ИмяФайла) Экспорт

Расширение = ИмяФайла;