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

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

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

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

Добавлен: 28.06.2023

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

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

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

Приложение А – Листинг программы электронного документооборота

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

// МОДУЛЬ СОДЕРЖИТ ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ВНУТРЕННИМИ, ВХОДЯЩИМИ И ИСХОДЯЩИМИ ДОКУМЕНТАМИ

//

// Формирует наименование документа из заголовка

Функция НаименованиеДокумента(Документ) Экспорт

Заголовок = СокрЛП(Документ.Заголовок);

ДлинаНаименования = Документ.Метаданные().ДлинаНаименования;

Если ЗначениеЗаполнено(Документ.РегистрационныйНомер) Тогда

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

НСТР("ru = ' (№ %1 от %2)'"),

СокрЛП(Документ.РегистрационныйНомер),

Формат(Документ.ДатаРегистрации, "ДЛФ=D"));

Иначе

Постфикс = "";

КонецЕсли;

Если СтрДлина(Заголовок + Постфикс) > ДлинаНаименования Тогда

Заголовок = Лев(Заголовок, ДлинаНаименования - СтрДлина(Постфикс));

ДлинаЗаголовка = СтрДлина(Заголовок);

ПозицияПробела = ДлинаЗаголовка;

Пока ПозицияПробела > 0 Цикл

Если Сред(Заголовок, ПозицияПробела, 1) = " " Тогда

Прервать;

КонецЕсли;

ПозицияПробела = ПозицияПробела - 1;

КонецЦикла;

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

Заголовок = Лев(Заголовок, ПозицияПробела - 1);

КонецЕсли;

КонецЕсли;

Возврат Заголовок + Постфикс;

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

// Формирует наименование номенклатуры дел

Функция НаименованиеНоменклатурыДел(НоменклатураДел) Экспорт

Заголовок = НоменклатураДел.ПолноеНаименование;

Заголовок = СтрЗаменить(Заголовок, Символы.ПС, " ");

Заголовок = СокрЛП(Заголовок);

ДлинаНаименования = НоменклатураДел.Метаданные().ДлинаНаименования;

Если СтрДлина(Заголовок) > ДлинаНаименования Тогда

Заголовок = Лев(Заголовок, ДлинаНаименования);

ДлинаЗаголовка = СтрДлина(Заголовок);

ПозицияПробела = ДлинаЗаголовка;

Пока ПозицияПробела > 0 Цикл

Если Сред(Заголовок, ПозицияПробела, 1) = " " Тогда

Прервать;

КонецЕсли;

ПозицияПробела = ПозицияПробела - 1;

КонецЦикла;

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

Заголовок = Лев(Заголовок, ПозицияПробела - 1);

КонецЕсли;

КонецЕсли;

Возврат Заголовок;

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

// Возвращает количество файлов по документу

Функция КоличествоФайлов(Документ) Экспорт

Если Не ЗначениеЗаполнено(Документ) Тогда

Возврат 0;

КонецЕсли;

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

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

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

| КОЛИЧЕСТВО(*) КАК Количество

|ИЗ

| Справочник.Файлы КАК Файлы


|ГДЕ

| Файлы.ВладелецФайла = &Документ";

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

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

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

Возврат 0;

КонецЕсли;

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

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

Возврат Выборка.Количество;

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

// Возвращает количество задач по документу

Функция КоличествоЗадач(Документ, ТолькоНевыполненные = Ложь) Экспорт

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

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

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

| КОЛИЧЕСТВО(*) КАК Количество

|ИЗ

| Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя

|ГДЕ

| ЗадачаИсполнителя.Предмет = &Документ

| И (НЕ ЗадачаИсполнителя.ПометкаУдаления)";

Если ТолькоНевыполненные Тогда

Запрос.Текст = Запрос.Текст + " И (НЕ ЗадачаИсполнителя.Выполнена)";

КонецЕсли;

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

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

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

Возврат 0;

КонецЕсли;

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

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

Возврат Выборка.Количество;

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

// Возвращает вид документа по умолчанию

Функция ПолучитьВидДокументаПоУмолчанию(Ссылка) Экспорт

ВидДокумента = Неопределено;

Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.ВходящиеДокументы") Тогда

ВидДокумента = ХранилищеОбщихНастроек.Загрузить("НастройкиРаботыСДокументами", "ВидВходящегоДокумента");

ТипМетаданных = "ВидыВходящихДокументов";

ИначеЕсли ТипЗнч(Ссылка) = Тип("СправочникСсылка.ИсходящиеДокументы") Тогда

ВидДокумента = ХранилищеОбщихНастроек.Загрузить("НастройкиРаботыСДокументами", "ВидИсходящегоДокумента");

ТипМетаданных = "ВидыИсходящихДокументов";

ИначеЕсли ТипЗнч(Ссылка) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда

ВидДокумента = ХранилищеОбщихНастроек.Загрузить("НастройкиРаботыСДокументами", "ВидВнутреннегоДокумента");

ТипМетаданных = "ВидыВнутреннихДокументов";

КонецЕсли;

Если Не ЗначениеЗаполнено(ВидДокумента) Тогда

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

Запрос.Текст = СтрЗаменить(

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

| ТаблицаВидаДокументов.Ссылка КАК Ссылка

|ИЗ

| &ВидДокумента КАК ТаблицаВидаДокументов

|ГДЕ

| (НЕ ТаблицаВидаДокументов.ПометкаУдаления)

| И (НЕ ТаблицаВидаДокументов.ЭтоГруппа)

| И ЛОЖЬ В

| (ВЫБРАТЬ

| ЛОЖЬ КАК ЗначениеЛожь

| ИЗ

| (ВЫБРАТЬ ПЕРВЫЕ 2

| ИСТИНА КАК ЗначениеИстина

| ИЗ

| &ВидДокумента КАК ТаблицаВидаДокументов

| ГДЕ

| (НЕ ТаблицаВидаДокументов.ПометкаУдаления)


| И (НЕ ТаблицаВидаДокументов.ЭтоГруппа)

| ) КАК ВыбранныеОбъекты

| ИМЕЮЩИЕ

| КОЛИЧЕСТВО(ВыбранныеОбъекты.ЗначениеИстина) = 1)", "&ВидДокумента", "Справочник." + ТипМетаданных);

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

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

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

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

ВидДокумента = Выборка.Ссылка;

КонецЕсли;

КонецЕсли;

Возврат ВидДокумента;

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

// Возвращает способ доставки по умолчанию

Функция ПолучитьСпособДоставкиПоУмолчанию(Тип) Экспорт

СпособДоставки = Справочники.СпособыДоставки.ПустаяСсылка();

Если Тип = "СпособПолучения" Тогда

СпособДоставки = ХранилищеОбщихНастроек.Загрузить("НастройкиРаботыСДокументами", "СпособПолучения");

ИначеЕсли Тип = "СпособОтправки" Тогда

СпособДоставки = ХранилищеОбщихНастроек.Загрузить("НастройкиРаботыСДокументами", "СпособОтправки");

КонецЕсли;

Если Не ЗначениеЗаполнено(СпособДоставки) Тогда

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

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

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

| СпособыДоставки.Ссылка КАК Ссылка

|ИЗ

| Справочник.СпособыДоставки КАК СпособыДоставки

|ГДЕ

| (НЕ СпособыДоставки.ПометкаУдаления)

| И ЛОЖЬ В

| (ВЫБРАТЬ

| ЛОЖЬ КАК ЗначениеЛожь

| ИЗ

| (ВЫБРАТЬ ПЕРВЫЕ 2

| ИСТИНА КАК ЗначениеИстина

| ИЗ

| Справочник.СпособыДоставки КАК СпособыДоставки

| ГДЕ

| (НЕ СпособыДоставки.ПометкаУдаления)

| ) КАК ВыбранныеОбъекты

| ИМЕЮЩИЕ

| КОЛИЧЕСТВО(ВыбранныеОбъекты.ЗначениеИстина) = 1)";

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

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

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

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

СпособДоставки = Выборка.Ссылка;

КонецЕсли;

КонецЕсли;

Возврат СпособДоставки;

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

Функция ПолучитьВалютуПоУмолчанию() Экспорт

Валюта = ХранилищеОбщихНастроек.Загрузить("НастройкиРаботыСДокументами", "Валюта");

Если ЗначениеЗаполнено(Валюта) Тогда

Возврат Валюта;

КонецЕсли;

Валюта = Константы.ОсновнаяВалюта.Получить();

Возврат Валюта;

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

// Получает актуальное состояние документа

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

Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСостоянияДокументов") Тогда

Возврат Перечисления.СостоянияДокументов.ПустаяСсылка();

КонецЕсли;

Если Не ЗначениеЗаполнено(Документ) Тогда

Возврат Перечисления.СостоянияДокументов.ПустаяСсылка();

КонецЕсли;

УстановитьПривилегированныйРежим(Истина);


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

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

"ВЫБРАТЬ

| СостоянияДокументовСрезПоследних.Состояние КАК Состояние

|ИЗ

| РегистрСведений.СостоянияДокументов.СрезПоследних(, Документ = &Документ) КАК СостоянияДокументовСрезПоследних";

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

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

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

Возврат Перечисления.СостоянияДокументов.ПустаяСсылка();

КонецЕсли;

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

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

Возврат Выборка.Состояние;

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

// Устанавливает состояние документа

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

Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСостоянияДокументов") Тогда

Возврат;

КонецЕсли;

ТекущееСостояние = ПолучитьСостояниеДокумента(Документ);

Если ТекущееСостояние = Состояние Тогда

Возврат;

КонецЕсли;

УстановитьПривилегированныйРежим(Истина);

МенеджерЗаписи = РегистрыСведений.СостоянияДокументов.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Период = Период;

МенеджерЗаписи.Документ = Документ;

МенеджерЗаписи.Состояние = Состояние;

МенеджерЗаписи.Установил = Установил;

МенеджерЗаписи.Записать();

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

// Удаляет все состояния документа, установленные объектом Установил

//

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

Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСостоянияДокументов") Тогда

Возврат;

КонецЕсли;

УстановитьПривилегированныйРежим(Истина);

Набор = РегистрыСведений.СостоянияДокументов.СоздатьНаборЗаписей();

Набор.Отбор.Документ.Установить(Документ);

Набор.Прочитать();

ЗаписиКУдалению = Новый Массив;

Для каждого Запись Из Набор Цикл

Если Запись.Установил = Установил Тогда

ЗаписиКУдалению.Добавить(Запись);

КонецЕсли;

КонецЦикла;

Для каждого Запись Из ЗаписиКУдалению Цикл

Набор.Удалить(Запись);

КонецЦикла;

Набор.Записать(Истина);

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

// Возвращает ключ актуального состояния документа

Функция ПолучитьКлючСостоянияДокумента(Документ) Экспорт

Если Не ЗначениеЗаполнено(Документ) Тогда

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

КонецЕсли;

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

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

"ВЫБРАТЬ

| СостоянияДокументовСрезПоследних.Период КАК Период

|ИЗ

| РегистрСведений.СостоянияДокументов.СрезПоследних(, Документ = &Документ) КАК СостоянияДокументовСрезПоследних";


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

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

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

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

КонецЕсли;

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

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

Возврат РегистрыСведений.СостоянияДокументов.СоздатьКлючЗаписи( Новый Структура("Период, Документ", Выборка.Период, Документ) );

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

// Возвращает признак использования видов входящих документов

Функция ИспользоватьВидыВходящихДокументов() Экспорт

Возврат ПолучитьФункциональнуюОпцию("ИспользоватьВидыВходящихДокументов");

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

// Возвращает признак использования видов исходящих документов

Функция ИспользоватьВидыИсходящихДокументов() Экспорт

Возврат ПолучитьФункциональнуюОпцию("ИспользоватьВидыИсходящихДокументов");

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

// Возвращает признак использования видов внутренних документов

Функция ИспользоватьВидыВнутреннихДокументов() Экспорт

Возврат ПолучитьФункциональнуюОпцию("ИспользоватьВидыВнутреннихДокументов");

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

// Возвращает признак использования видов документов по объекту

Функция ИспользоватьВидыДокументов(ВидДокумента) Экспорт

ИспользоватьВидыДокументов = Ложь;

Если ТипЗнч(ВидДокумента) = Тип("СправочникСсылка.ВидыВходящихДокументов") Тогда

ИспользоватьВидыДокументов = Делопроизводство.ИспользоватьВидыВходящихДокументов();

ИначеЕсли ТипЗнч(ВидДокумента) = Тип("СправочникСсылка.ВидыИсходящихДокументов") Тогда

ИспользоватьВидыДокументов = Делопроизводство.ИспользоватьВидыИсходящихДокументов();

ИначеЕсли ТипЗнч(ВидДокумента) = Тип("СправочникСсылка.ВидыВнутреннихДокументов") Тогда

ИспользоватьВидыДокументов = Делопроизводство.ИспользоватьВидыВнутреннихДокументов();

КонецЕсли;

Возврат ИспользоватьВидыДокументов;

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

// Возвращает признак использования номенклатуры дел

Функция ИспользоватьНоменклатуруДел() Экспорт

Возврат ПолучитьФункциональнуюОпцию("ИспользоватьНоменклатуруДел");

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

// Проверяет уникальность регистрационного номера

Функция РегистрационныйНомерУникален(Объект) Экспорт

УстановитьПривилегированныйРежим(Истина);

Нумератор = Нумерация.ПолучитьНумераторДокумента(Объект.ВидДокумента);

Если ЗначениеЗаполнено(Нумератор) Тогда // автонумерация

Периодичность = Нумератор.Периодичность;

Иначе // ручная нумерация

Периодичность = Перечисления.ПериодичностьНумераторов.Год;