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

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

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

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

Добавлен: 28.06.2023

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

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

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

Поз = Найти(Расширение, ".");

Если Поз = 0 Тогда

Возврат Новый Структура("Имя, Расширение", СокрЛП(ИмяФайла), "");

КонецЕсли;

Пока Поз > 0 Цикл

Расширение = Сред(Расширение, Поз + 1);

Поз = Найти(Расширение, ".");

КонецЦикла;

Имя = Лев(ИмяФайла, СтрДлина(ИмяФайла) - СтрДлина(Расширение) - 1);

Возврат Новый Структура("Имя, Расширение", СокрЛП(Имя), СокрЛП(Расширение));

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

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

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

// - Каталог (Строка) - без последнего слеша

// - ИмяФайла (Строка) - имя файла с расширением

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

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

//

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

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

//

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

ИмяФайла = ПолноеИмяФайла;

Каталог = "";

Пока Истина Цикл

Поз = Макс(Найти(ИмяФайла, "\"), Найти(ИмяФайла, "/"));

Если Поз = 0 Тогда

Прервать;

КонецЕсли;

Каталог = Каталог + Лев(ИмяФайла, Поз);

ИмяФайла = Сред(ИмяФайла, Поз+1);

КонецЦикла;

ПоследнийСимволКаталога = Прав(Каталог, 1);

Если (ПоследнийСимволКаталога = "\") Или (ПоследнийСимволКаталога = "/") Тогда

Каталог = Лев(Каталог, СтрДлина(Каталог) - 1);

КонецЕсли;

ИияФайлаИнфо = РазложитьИмяФайла(ИмяФайла);

ИияФайлаИнфо.Вставить("ИмяФайла", ИмяФайла);

ИияФайлаИнфо.Вставить("Каталог", Каталог);

Возврат ИияФайлаИнфо;

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

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

// РАБОТА С АДРЕСАМИ ЭЛЕКТРОННОЙ ПОЧТЫ

// Принимает строку почтовых адресов в виде

// "name1 <addr1@dom1>, name2 <addr2@dom2>, ..., nameN <addrN@domN>"

// или

// "name1 <addr1@dom1>; name2 <addr2@dom2>; ...; nameN <addrN@domN>"

// Возвращает:

// Результат (Массив)

// - Элемент (Структура)

// - Адрес (Строка)

// - Представление (Строка)

//

Функция РазложитьСтрокуПочтовыхАдресов(Знач ПочтовыеАдресаСтр) Экспорт

Результат = Новый Массив;

ПочтовыеАдресаСтр= СтрЗаменить(ПочтовыеАдресаСтр, ";", Символы.ПС);

ПочтовыеАдресаСтр = СтрЗаменить(ПочтовыеАдресаСтр, ",", Символы.ПС);

Для Счетчик = 1 По СтрЧислоСтрок(ПочтовыеАдресаСтр) Цикл

АдресСтр = СокрЛП(СтрПолучитьСтроку(ПочтовыеАдресаСтр, Счетчик));

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

Продолжить;

КонецЕсли;

АдресЭлектроннойПочтыИнфо = РазложитьПредставлениеАдресаЭлектроннойПочты(АдресСтр);

Результат.Добавить(АдресЭлектроннойПочтыИнфо);

КонецЦикла;

Возврат Результат;

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

// Принимает строку почтового адреса в виде

// "name <addr@dom>"

// Возвращает:


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

// - Адрес (Строка) - addr@dom

// - ОтображаемоеИмя (Строка) - name

// - Пользователь (Строка)- addr

// - Домен (Строка) - dom

//

Функция РазложитьПредставлениеАдресаЭлектроннойПочты(Знач АдресЭлектроннойПочтыСтр) Экспорт

Результат = Новый Структура("Адрес, ОтображаемоеИмя, Пользователь, Домен", "", "", "", "");

АдресЭлектроннойПочтыСтр = СокрЛП(АдресЭлектроннойПочтыСтр);

Поз = Найти(АдресЭлектроннойПочтыСтр, "<");

Результат.ОтображаемоеИмя = "";

Результат.Адрес = АдресЭлектроннойПочтыСтр;

Если Поз > 0 Тогда

Результат.ОтображаемоеИмя = СокрЛП(Лев(АдресЭлектроннойПочтыСтр, Поз - 1));

АдресЭлектроннойПочтыСтр = Сред(АдресЭлектроннойПочтыСтр, Поз + 1);

Поз = Найти(АдресЭлектроннойПочтыСтр, ">");

Если Поз > 0 Тогда

Результат.Адрес = СокрЛП(Лев(АдресЭлектроннойПочтыСтр, Поз - 1));

Иначе

Результат.Адрес = "";

КонецЕсли;

КонецЕсли;

Если Не ЭтоАдресЭлектроннойПочты(Результат.Адрес) Тогда

Результат.Адрес = "";

Иначе

Поз = Найти(Результат.Адрес, "@");

Результат.Пользователь = Лев(Результат.Адрес, Поз - 1);

Результат.Домен = Сред(Результат.Адрес, Поз + 1);

КонецЕсли;

Возврат Результат;

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

// Проверяет строку на формат адреса электронной почты

// проверка не точная но основные элементы на месте

//

Функция ЭтоАдресЭлектроннойПочты(АдресЭлектроннойПочты) Экспорт

Поз = Найти(АдресЭлектроннойПочты, "@");

Если Поз = 0 Тогда

Возврат Ложь;

КонецЕсли;

Если СтрЧислоВхождений(АдресЭлектроннойПочты, "@") <> 1 Тогда

Возврат Ложь;

КонецЕсли;

Если Прав(АдресЭлектроннойПочты, 1) = "."

Или Лев(АдресЭлектроннойПочты, 1) = "." Тогда

Возврат Ложь;

КонецЕсли;

Если Найти(АдресЭлектроннойПочты, "..") > 0 Тогда

Возврат Ложь;

КонецЕсли;

ДопустимыеСимволы = "-.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";

Для НомерСимвола = 1 По СтрДлина(АдресЭлектроннойПочты) Цикл

Если Найти(ДопустимыеСимволы, Сред(АдресЭлектроннойПочты, НомерСимвола, 1)) = 0 Тогда

Возврат Ложь;

КонецЕсли;

КонецЦикла;

Пользователь = Лев(АдресЭлектроннойПочты, Поз - 1);

Если СтрДлина(Пользователь) = 0 Тогда

Возврат Ложь;

КонецЕсли;

Сервер = Сред(АдресЭлектроннойПочты, Поз + 1);

Если СтрДлина(Сервер) = 0 Тогда

Возврат Ложь;

КонецЕсли;

Поз = Найти(Сервер, ".");

Если Поз = 0 Тогда

Возврат Ложь;

КонецЕсли;

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

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

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


//

//Параметры

// Имя - Строка - имя адресата

// Адрес - Строка - адрес электронной почты адресата

// Контакт - СправочникСсылка - контакт, которому принадлежит имя и адрес почты.

//

// Результат (Строка) - "Имя <Адрес>" или "Адрес"

//

Функция ПолучитьПредставлениеАдресаЭлектроннойПочты(Имя, Адрес) Экспорт

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

Результат = Адрес;

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

Результат = Имя;

Иначе

Результат = Имя + " <" + Адрес + ">";

КонецЕсли;

Возврат Результат;

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

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

// РАБОТА С ТЕКСТОМ

// Удаляет недопустимые символы в XML-строке

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

// - Текст (Строка)

// - СимволЗамены (Строка)

//

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

//

Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт

#Если Не ВебКлиент Тогда

ПозицияНачала = 1;

Пока Истина Цикл

Если ПозицияНачала > СтрДлина(Текст) Тогда

Прервать;

КонецЕсли;

Позиция = НайтиНедопустимыеСимволыXML(Текст, ПозицияНачала);

Если Позиция = 0 Тогда

Прервать;

КонецЕсли;

// Если возращается позиция, больше чем должна быть, то корректируем ее.

Если Позиция > 1 Тогда

НедопустимыйСимвол = Сред(Текст, Позиция - 1, 1);

Если НайтиНедопустимыеСимволыXML(НедопустимыйСимвол) > 0 Тогда

Текст = СтрЗаменить(Текст, НедопустимыйСимвол, "");

КонецЕсли;

КонецЕсли;

НедопустимыйСимвол = Сред(Текст, Позиция, 1);

Если НайтиНедопустимыеСимволыXML(НедопустимыйСимвол) > 0 Тогда

Текст = СтрЗаменить(Текст, НедопустимыйСимвол, "");

КонецЕсли;

ПозицияНачала = Макс(1, Позиция - 1);

КонецЦикла;

#КонецЕсли

Возврат Текст;

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

// Удаляет пустые строки в тексте.

//

Процедура УдалитьПустыеСтроки(Текст) Экспорт

Результат = "";

Для Индекс = 1 По СтрЧислоСтрок(Текст) Цикл

Строка = СтрПолучитьСтроку(Текст, Индекс);

Если ЗначениеЗаполнено(Строка) Тогда

ДобавитьЗначениеКСтрокеЧерезРазделитель(

Результат,

Символы.ПС,

Строка);

КонецЕсли;

КонецЦикла;

Текст = Результат;

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

// Добавляет к каждой строке спереди символ квотирования.

//

Процедура ДобавитьКвотирование(Текст, Знач СимволКвотирования) Экспорт

Результат = "";

Для Индекс = 1 По СтрЧислоСтрок(Текст) Цикл

Строка = СтрПолучитьСтроку(Текст, Индекс);

ДобавитьЗначениеКСтрокеЧерезРазделитель(

Результат,

Символы.ПС,

СимволКвотирования + Строка);


КонецЦикла;

Текст = Результат;

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

// Заменяет в переданном тексте ошибочные последовательности переноса строк.

// Все последовательности [ВК]+ПС заменяются на ВК+ПС.

// Все одиночные символы ВК заменяются на ВК+ПС.

//

Процедура ИсправитьПереносыСтрок(Текст) Экспорт

Пока Найти(Текст, Символы.ВК + Символы.ПС) > 0 Цикл

Текст = СтрЗаменить(Текст, Символы.ВК + Символы.ПС, Символы.ПС);

КонецЦикла;

Если Найти(Текст, Символы.ВК) > 0 Тогда

Текст = СтрЗаменить(Текст, Символы.ВК, Символы.ПС);

КонецЕсли;

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

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

// РАБОТА С ПРЕДСТАВЛЕНИЕМ РАЗМЕРОВ

// Принимает размер в байтах.

// Возвращает строку, например: 7.2 Кбайт, 35 Кбайт, 5.5 Мбайт, 12 Мбайт

Функция ПолучитьРазмерСтрокой(Размер) Экспорт

Если Размер = 0 Тогда

Возврат "-";

ИначеЕсли Размер < 1024 * 10 Тогда // < 10 Кб

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

НСтр("ru = '%1 Кб'"),

Формат(Макс(1, Окр(Размер / 1024, 1, 1)), "ЧГ=0"));

ИначеЕсли Размер < 1024 * 1024 Тогда // < 1 Мб

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

НСтр("ru = '%1 Кб'"),

Формат(Цел(Размер / 1024), "ЧГ=0"));

ИначеЕсли Размер < 1024 * 1024 * 10 Тогда // < 10 Мб

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

НСтр("ru = '%1 Мб'"),

Формат(Окр(Размер / 1024 / 1024, 1, 1), "ЧГ=0"));

Иначе // >= 10 Мб

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

НСтр("ru = '%1 Мб'"),

Формат(Цел(Размер / 1024 / 1024), "ЧГ=0"));

КонецЕсли;

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

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

// РАБОТА С КОДИРОВКАМИ

// Функция возвращает таблицу имен кодировок

// Возвращаемое значение:

// Результат (СписокЗначений)

// - Значение (Строка) - например "ibm852"

// - Представление (Строка) - например "ibm852 (Центральноевропейская DOS)"

//

Функция ПолучитьСписокКодировок() Экспорт

СписокКодировок = Новый СписокЗначений;

СписокКодировок.Добавить("ibm852", "IBM852 (Центральноевропейская DOS)");

СписокКодировок.Добавить("ibm866", "IBM866 (Кириллица DOS)");

СписокКодировок.Добавить("iso-8859-1", "ISO-8859-1 (Западноевропейская ISO)");

СписокКодировок.Добавить("iso-8859-2", "ISO-8859-2 (Центральноевропейская ISO)");

СписокКодировок.Добавить("iso-8859-3", "ISO-8859-3 (Латиница 3 ISO)");

СписокКодировок.Добавить("iso-8859-4", "ISO-8859-4 (Балтийская ISO)");

СписокКодировок.Добавить("iso-8859-5", "ISO-8859-5 (Кириллица ISO)");

СписокКодировок.Добавить("iso-8859-7", "ISO-8859-7 (Греческая ISO)");


СписокКодировок.Добавить("iso-8859-9", "ISO-8859-9 (Турецкая ISO)");

СписокКодировок.Добавить("iso-8859-15", "ISO-8859-15 (Латиница 9 ISO)");

СписокКодировок.Добавить("koi8-r", "KOI8-R (Кириллица KOI8-R)");

СписокКодировок.Добавить("koi8-u", "KOI8-U (Кириллица KOI8-U)");

СписокКодировок.Добавить("us-ascii", "US-ASCII США");

СписокКодировок.Добавить("utf-8", "UTF-8 (Юникод UTF-8)");

СписокКодировок.Добавить("windows-1250", "Windows-1250 (Центральноевропейская Windows)");

СписокКодировок.Добавить("windows-1251", "windows-1251 (Кириллица Windows)");

СписокКодировок.Добавить("windows-1252", "Windows-1252 (Западноевропейская Windows)");

СписокКодировок.Добавить("windows-1253", "Windows-1253 (Греческая Windows)");

СписокКодировок.Добавить("windows-1254", "Windows-1254 (Турецкая Windows)");

СписокКодировок.Добавить("windows-1257", "Windows-1257 (Балтийская Windows)");

Возврат СписокКодировок;

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

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

// ПРОЧИЕ ФУНКЦИИ

// Выделяет продстроку в скобках.

// Напрмер: ВыделитьПодстрокуВСкобках("Name <name@company.ru>", "<", ">") = "name@company.ru"

//

Функция ВыделитьПодстрокуВСкобках(Знач Строка, Знач ЛеваяСкобка, Знач ПраваяСкобка) Экспорт

Поз = Найти(Строка, ЛеваяСкобка);

Если Поз <> 0 Тогда

Строка = Сред(Строка, Поз+1);

КонецЕсли;

Поз = Найти(Строка, ПраваяСкобка);

Если Поз <> 0 Тогда

Строка = Лев(Строка, Поз-1);

КонецЕсли;

Возврат Строка;

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

// Ищет подстроку в строке, после указанной позиции

//

Функция НайтиПосле(Строка, Подстрока, НачальнаяПозиция = 0) Экспорт

Позиция = Найти(Сред(Строка, НачальнаяПозиция + 1), Подстрока);

Если Позиция = 0 Тогда

Возврат 0;

КонецЕсли;

Возврат НачальнаяПозиция + Позиция;

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

Функция ПолучитьСвязанныйДокумент(Документ, Знач ТипСвязи) Экспорт

Если ТипЗнч(ТипСвязи) = Тип("Строка") Тогда

ТипСвязи = Справочники.ТипыСвязей[ТипСвязи];

КонецЕсли;

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1

| СвязиДокументов.СвязанныйДокумент,

| СвязиДокументов.Комментарий,

| СвязиДокументов.Установил,

| СвязиДокументов.ДатаУстановки

|ИЗ

| РегистрСведений.СвязиДокументов КАК СвязиДокументов

|ГДЕ

| СвязиДокументов.Документ = &Документ

| И СвязиДокументов.ТипСвязи = &ТипСвязи";

Запрос.УстановитьПараметр("Документ", Документ);

Запрос.УстановитьПараметр("ТипСвязи", ТипСвязи);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

Возврат Неопределено;

КонецЕсли;

Выборка = Результат.Выбрать();

Выборка.Следующий();