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

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

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

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

Добавлен: 28.06.2023

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

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

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

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

// Извлечь текст из файла и поместить в ХранилищеЗначения

Функция ИзвлечьТекстВХранилищеЗначения(ПолноеИмяФайла) Экспорт

Текст = "";

ИзвлекатьТекстыФайловНаСервере = Константы.ИзвлекатьТекстыФайловНаСервере.Получить();

Если Не ИзвлекатьТекстыФайловНаСервере Тогда

ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера();

Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда

Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(ПолноеИмяФайла);

КонецЕсли;

КонецЕсли;

Если ПустаяСтрока(Текст) Тогда

Возврат "";

КонецЕсли;

ХранилищеЗначения = Новый ХранилищеЗначения(Текст);

Возврат ХранилищеЗначения;

КонецФункции

// Разыменовать lnk файл

Функция РазыменоватьLnkФайл(ВыбранныйФайл) Экспорт

ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера();

Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда

ShellApp = Новый COMОбъект("shell.application");

FolderObj = ShellApp.NameSpace(ВыбранныйФайл.Путь); // полный (только) путь на lnk-файл

FolderObjItem = FolderObj.items().item(ВыбранныйФайл.Имя); // только имя lnk-файла

Link = FolderObjItem.GetLink();

Возврат Новый Файл(Link.path);

КонецЕсли;

Возврат ВыбранныйФайл;

КонецФункции

// Рекурсивная функция импорта файлов с диска - принимает массив файлов (или каталогов)

// - если файл, просто добавляет его, если каталог - создает группу и рекурсивно вызывает саму себя

Процедура ИмпортФайлов(

Владелец,

Путь,

ФайлыАргумент,

Индикатор,

МассивИменФайловСОшибками,

МассивСтруктурВсехФайлов,

Комментарий,

ХранитьВерсии,

Рекурсивно,

КоличествоСуммарное,

Счетчик,

ИдентификаторФормы,

Знач ПсевдоФайловаяСистема,

ДобавленныеФайлы,

МассивВсехПапок,

РежимЗагрузки,

Пользователь,

ПараметрыРаспознавания) Экспорт

Перем ПерваяПапкаСТакимЖеИменем;

Перем ДокГруппаСсылка;

МаксРазмерФайла = ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла();

ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункции.ПолучитьЗапретЗагрузкиФайловПоРасширению();

СписокЗапрещенныхРасширений = ФайловыеФункции.ПолучитьСписокЗапрещенныхРасширений();

Для Каждого ВыбранныйФайл Из ФайлыАргумент Цикл

Попытка

Если ВыбранныйФайл.Существует() Тогда

Если ВыбранныйФайл.Расширение = ".lnk" Тогда

ВыбранныйФайл = РазыменоватьLnkФайл(ВыбранныйФайл);

КонецЕсли;


Если ВыбранныйФайл.ЭтоКаталог() Тогда

Если Рекурсивно = Истина Тогда

НовыйПуть = Строка(ВыбранныйФайл.Путь);

ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(НовыйПуть, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());

НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя);

МассивФайлов = ФайловыеФункцииКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть);

// Создаем группу в справочнике - эквивалент папки на диске

Если МассивФайлов.Количество() <> 0 Тогда

ИмяФайла = ВыбранныйФайл.Имя;

Если РаботаСФайламиВызовСервера.ЕстьПапкаСТакимИменем(ИмяФайла, Владелец, ПерваяПапкаСТакимЖеИменем) Тогда

ДокГруппаСсылка = ПерваяПапкаСТакимЖеИменем;

Иначе

ДокГруппаСсылка = РаботаСФайламиВызовСервера.СправочникиПапкиСоздатьЭлемент(ИмяФайла, Владелец, Пользователь);

КонецЕсли;

ИмпортФайлов(

ДокГруппаСсылка,

НовыйПуть,

МассивФайлов,

Индикатор,

МассивИменФайловСОшибками,

МассивСтруктурВсехФайлов,

Комментарий,

ХранитьВерсии,

Рекурсивно,

КоличествоСуммарное,

Счетчик,

ИдентификаторФормы,

ПсевдоФайловаяСистема,

ДобавленныеФайлы,

МассивВсехПапок,

РежимЗагрузки,

Пользователь,

ПараметрыРаспознавания);

МассивВсехПапок.Добавить(НовыйПуть);

КонецЕсли;

КонецЕсли;

Продолжить;

КонецЕсли;

Если Не ФайловыеФункцииКлиентСервер.ФайлМожноЗагружать(ВыбранныйФайл, МаксРазмерФайла, ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, МассивИменФайловСОшибками) Тогда

Продолжить;

КонецЕсли;

// Создаем Элемент справочника Файлы

ИмяБезРасширения = ВыбранныйФайл.ИмяБезРасширения;

Расширение = ВыбранныйФайл.Расширение;

Если РежимЗагрузки Тогда

Если РаботаСФайламиВызовСервера.ЕстьФайлСТакимИменем(ИмяБезРасширения, Владелец) Тогда

Запись = Новый Структура;

Запись.Вставить("ИмяФайла", ВыбранныйФайл.ПолноеИмя);

ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'Файл с таким именем уже есть в информационной базе в папке ""%1""'"),

Строка(Владелец));

Запись.Вставить("Ошибка", ТекстОшибки);

МассивИменФайловСОшибками.Добавить(Запись);

Продолжить;

КонецЕсли;

КонецЕсли;

АдресВременногоХранилищаФайла = ВыбранныйФайл.ПолноеИмя;

АдресВременногоХранилищаТекста = ИзвлечьТекстВХранилищеЗначения(

ВыбранныйФайл.ПолноеИмя);

// Создаем элемент справочника Файлы

РаботаСФайламиКлиентСервер.СоздатьЭлементСправочникаФайлы(ВыбранныйФайл, МассивСтруктурВсехФайлов,


Владелец, ИдентификаторФормы, Комментарий, ХранитьВерсии, ДобавленныеФайлы,

АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста, Пользователь,

ПараметрыРаспознавания);

Иначе

Запись = Новый Структура;

Запись.Вставить("ИмяФайла", ВыбранныйФайл.ПолноеИмя);

Запись.Вставить("Ошибка", НСтр("ru = 'Файл отсутствует на диске'"));

МассивИменФайловСОшибками.Добавить(Запись);

КонецЕсли;

Исключение

ОшибкаИнфо = ИнформацияОбОшибке();

СообщениеОбОшибке = "";

Если ОшибкаИнфо.Причина = Неопределено Тогда

СообщениеОбОшибке =ОшибкаИнфо.Описание;

Иначе

СообщениеОбОшибке = ОшибкаИнфо.Причина.Описание;

КонецЕсли;

Запись = Новый Структура;

Запись.Вставить("ИмяФайла", ВыбранныйФайл.ПолноеИмя);

Запись.Вставить("Ошибка", СообщениеОбОшибке);

МассивИменФайловСОшибками.Добавить(Запись);

КонецПопытки;

КонецЦикла;

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

// Импорт - с вспомогательными операциями типа проверки предельного размера и впоследствии удаления файлов и показа ошибок

// при импорте только одной папки - вернет на нее ссылку

Функция ИмпортФайловВыполнить(

ПапкаДляДобавления,

ВыбранныеФайлы,

Комментарий,

ХранитьВерсии,

УдалятьФайлыПослеДобавления,

Рекурсивно,

ИдентификаторФормы,

Знач ПсевдоФайловаяСистема,

ДобавленныеФайлы,

РежимЗагрузки,

Пользователь,

МассивИменФайловСОшибками,

СтратегияРаспознавания,

ЯзыкРаспознавания) Экспорт

Перем ПерваяПапкаСТакимЖеИменем;

Перем ПапкаДляДобавленияТекущая;

ВыбранКаталог = Ложь;

Путь = "";

КоличествоСуммарное = 0;

МассивФайлов = Новый Массив;

Счетчик = 0;

Индикатор = 0;

МассивСтруктурВсехФайлов = Новый Массив;

МассивВсехПапок = Новый Массив;

ПапкаДляДобавленияТекущая = Неопределено;

// параметры распознавания по умолчанию

РаспознатьПослеДобавления = Истина;

Если СтратегияРаспознавания = Перечисления.СтратегииРаспознаванияТекста.НеРаспознавать Тогда

РаспознатьПослеДобавления = Ложь;

КонецЕсли;

ИспользоватьРаспознавание = РаботаСФайламиВызовСервера.ПолучитьИспользоватьРаспознавание();

Если ИспользоватьРаспознавание = Ложь Тогда

РаспознатьПослеДобавления = Ложь;

КонецЕсли;

ПараметрыРаспознавания = Новый Структура("СтратегияРаспознавания, ЯзыкРаспознавания, РаспознатьПослеДобавления",

СтратегияРаспознавания, ЯзыкРаспознавания, РаспознатьПослеДобавления);

Для Каждого ИмяФайла Из ВыбранныеФайлы Цикл


Попытка

ВыбранныйФайл = Новый Файл(ИмяФайла.Значение);

ВыбранКаталог = Ложь;

Если ВыбранныйФайл.Существует() Тогда

ВыбранКаталог = ВыбранныйФайл.ЭтоКаталог();

КонецЕсли;

Если ВыбранКаталог Тогда

Путь = ИмяФайла.Значение;

МассивФайловЭтогоКаталога = ФайловыеФункцииКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, Путь);

ИмяПапки = ВыбранныйФайл.Имя;

Если РаботаСФайламиВызовСервера.ЕстьПапкаСТакимИменем(ИмяПапки, ПапкаДляДобавления, ПерваяПапкаСТакимЖеИменем) Тогда

ПапкаДляДобавленияТекущая = ПерваяПапкаСТакимЖеИменем;

Иначе

ПапкаДляДобавленияТекущая = РаботаСФайламиВызовСервера.СправочникиПапкиСоздатьЭлемент(ИмяПапки, ПапкаДляДобавления, Пользователь);

КонецЕсли;

// Собственно импорт

ИмпортФайлов(

ПапкаДляДобавленияТекущая,

Путь,

МассивФайловЭтогоКаталога,

Индикатор,

МассивИменФайловСОшибками,

МассивСтруктурВсехФайлов,

Комментарий,

ХранитьВерсии,

Рекурсивно,

КоличествоСуммарное,

Счетчик,

ИдентификаторФормы,

ПсевдоФайловаяСистема,

ДобавленныеФайлы,

МассивВсехПапок,

РежимЗагрузки,

Пользователь,

ПараметрыРаспознавания);

МассивВсехПапок.Добавить(Путь);

Иначе

МассивФайлов.Добавить(ВыбранныйФайл);

КонецЕсли;

Исключение

// запись в журнал регистрации

ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());

ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'Ошибка автоматической загрузки файлов: ""%1""'"),

ОписаниеОшибки);

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

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

ТекстСообщения);

КонецПопытки;

КонецЦикла;

Если МассивФайлов.Количество() <> 0 Тогда

// Собственно импорт

ИмпортФайлов(

ПапкаДляДобавления,

Путь,

МассивФайлов,

Индикатор,

МассивИменФайловСОшибками,

МассивСтруктурВсехФайлов,

Комментарий,

ХранитьВерсии,

Рекурсивно,

КоличествоСуммарное,

Счетчик,

ИдентификаторФормы,

ПсевдоФайловаяСистема,

ДобавленныеФайлы,

МассивВсехПапок,

РежимЗагрузки,

Пользователь,

ПараметрыРаспознавания);

КонецЕсли;

Если УдалятьФайлыПослеДобавления = Истина Тогда

ФайловыеФункцииКлиентСервер.УдалитьФайлыПослеДобавления(МассивСтруктурВсехФайлов, МассивВсехПапок, РежимЗагрузки);

КонецЕсли;

// Вывод сообщений об ошибках

Для Каждого Выборка Из МассивИменФайловСОшибками Цикл


ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'Ошибка автоматической загрузки файла ""%1"": ""%2""'"),

Выборка.ИмяФайла, Выборка.Ошибка);

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

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

ТекстСообщения);

КонецЦикла;

Если ВыбранныеФайлы.Количество() <> 1 Тогда

ПапкаДляДобавленияТекущая = Неопределено;

КонецЕсли;

Возврат ПапкаДляДобавленияТекущая;

КонецФункции

Функция ЕстьПравоДоступа(Пользователь, Папка)

// если не включена функциональная опция "использовать права доступа" - то не делаем проверки.

Если Не УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда

Возврат Истина;

КонецЕсли;

Возврат ДокументооборотПраваДоступа.ПолучитьПраваПоОбъекту(Папка, Пользователь).Добавление;

КонецФункции

Процедура ЗагрузкаФайлов(МассивНастроек) Экспорт

Если ТипЗнч(МассивНастроек) <> Тип("Массив") Тогда

Возврат;

КонецЕсли;

Для Каждого Настройка Из МассивНастроек Цикл

КаталогНаДиске = "";

ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера();

Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда

КаталогНаДиске = Настройка.КаталогWindows;

Иначе

КаталогНаДиске = Настройка.КаталогLinux;

КонецЕсли;

Папка = Настройка.Папка;

Пользователь = Настройка.Пользователь;

СтратегияРаспознавания = Неопределено;

ЯзыкРаспознавания = Неопределено;

Если Настройка.Свойство("СтратегияРаспознавания") Тогда

СтратегияРаспознавания = Настройка.СтратегияРаспознавания;

Иначе

СтратегияРаспознавания = Перечисления.СтратегииРаспознаванияТекста.ПоместитьТолькоВТекстовыйОбраз;

КонецЕсли;

Если Настройка.Свойство("ЯзыкРаспознавания") Тогда

ЯзыкРаспознавания = Настройка.ЯзыкРаспознавания;

Иначе

ЯзыкРаспознавания = РаботаСФайламиВызовСервера.ПолучитьЯзыкРаспознавания();

КонецЕсли;

Если ПустаяСтрока(КаталогНаДиске) Тогда

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

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

НСтр("ru = 'Не указан каталог на диске'"));

Продолжить;

КонецЕсли;

ФайлКаталога = Новый Файл(КаталогНаДиске);

Если Не ФайлКаталога.Существует() Тогда

ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'Неверный путь к каталогу на диске: ""%1""'"),

КаталогНаДиске);