Файл: Разработка регламента выполнения процесса «Управление документооборотом» (1 Построение бизнес-процессов «как есть»).pdf
Добавлен: 28.06.2023
Просмотров: 344
Скачиваний: 2
СОДЕРЖАНИЕ
1 Построение бизнес-процессов «как есть»
1.1 Описание предметной области. Постановка задачи
1.2 Выбор средства для моделирования бизнес-процессов
1.3 Моделирование бизнес-процессов «как есть»
2 Построение бизнес-процессов «как должно быть»
2.1 Предлагаемые мероприятия по улучшению бизнес-процессов
|Дело,
|ОткрытьФайл, СохранитьКак, НастроитьСписок, ВывестиСписок, Изменить,
|КонтекстноеМенюФайлыОткрытьФайл, КонтекстноеМенюФайлыСохранитьКак");
Иначе
ДоступныеПоля = Новый Структура("
|ОткрытьФайл, СохранитьКак, НастроитьСписок, ВывестиСписок, Изменить,
|КонтекстноеМенюФайлыОткрытьФайл, КонтекстноеМенюФайлыСохранитьКак");
КонецЕсли;
ИначеЕсли Состояние = Перечисления.СостоянияДокументов.Проект
Или Состояние = Перечисления.СостоянияДокументов.НеСогласован
Или Состояние = Перечисления.СостоянияДокументов.НеУтвержден Тогда
ДоступныеПоля = "";
НедоступныеПоля = Новый Структура("Подписал, Утвердил, Дело");
ИначеЕсли Состояние = Перечисления.СостоянияДокументов.НаСогласовании Тогда
ДоступныеПоля = Новый Структура("
|Состояние, Папка,
|ВизыСогласования, ВизыСогласованияСоздать, ВизыСогласованияИзменить, ВизыСогласованияУдалить, ВизыСогласованияКонтекстноеМенюСоздать, ВизыСогласованияКонтекстноеМенюИзменить, ВизыСогласованияКонтекстноеМенюУдалить, ВизыСогласованияКонтекстноеМенюОбновить,
|ЗакончитьРедактирование, Занять, Освободить, Редактировать, СохранитьИзменения, ОбновитьИзФайлаНаДиске, ФайлыЗашифровать, ФайлыРасшифровать, ФайлыКонтекстноеМенюЗашифровать, ФайлыКонтекстноеМенюРасшифровать,
|КонтекстноеМенюФайлыЗакончитьРедактирование, КонтекстноеМенюФайлыЗанять, КонтекстноеМенюФайлыОсвободить, КонтекстноеМенюФайлыРедактировать, КонтекстноеМенюФайлыСохранитьИзменения, КонтекстноеМенюФайлыОбновитьИзФайлаНаДиске,
|Файлы, СоздатьФайл, ОткрытьФайл, СохранитьКак, НастроитьСписок, ВывестиСписок, Изменить,
|КонтекстноеМенюФайлыОткрытьФайл, КонтекстноеМенюФайлыСохранитьКак");
ИначеЕсли Состояние = Перечисления.СостоянияДокументов.НаУтверждении Тогда
ДоступныеПоля = Новый Структура("
|Состояние, Папка,
|Подписал, Утвердил,
|ЗакончитьРедактирование, Занять, Освободить, Редактировать, СохранитьИзменения, ОбновитьИзФайлаНаДиске, ФайлыЗашифровать, ФайлыРасшифровать, ФайлыКонтекстноеМенюЗашифровать, ФайлыКонтекстноеМенюРасшифровать,
|КонтекстноеМенюФайлыЗакончитьРедактирование, КонтекстноеМенюФайлыЗанять, КонтекстноеМенюФайлыОсвободить, КонтекстноеМенюФайлыРедактировать, КонтекстноеМенюФайлыСохранитьИзменения, КонтекстноеМенюФайлыОбновитьИзФайлаНаДиске,
|Файлы, СоздатьФайл, ОткрытьФайл, СохранитьКак, НастроитьСписок, ВывестиСписок, Изменить,
|КонтекстноеМенюФайлыОткрытьФайл, КонтекстноеМенюФайлыСохранитьКак");
ИначеЕсли Состояние = Перечисления.СостоянияДокументов.Согласован
Или Состояние = Перечисления.СостоянияДокументов.Утвержден Тогда
Если РольДелопроизводитель Тогда
ДоступныеПоля = Новый Структура("
|Состояние, Папка,
|Зарегистрировать, НоменклатураДел,
|ОткрытьФайл, СохранитьКак, НастроитьСписок, ВывестиСписок, Изменить,
|КонтекстноеМенюФайлыОткрытьФайл, КонтекстноеМенюФайлыСохранитьКак");
Иначе
ДоступныеПоля = Новый Структура("
|Состояние,
|ОткрытьФайл, СохранитьКак, НастроитьСписок, ВывестиСписок, Изменить,
|КонтекстноеМенюФайлыОткрытьФайл, КонтекстноеМенюФайлыСохранитьКак");
КонецЕсли;
КонецЕсли;
Для Каждого Элемент Из Форма.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ГруппаФормы") И Элемент.Имя <> "ГруппаСвойства" Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("ДекорацияФормы") Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") И Элемент.Родитель.Имя = "ФормаКоманднаяПанель" Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") И Элемент.Родитель.Имя = "КоманднаяПанельФормыСоздатьНаОсновании" Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") И Элемент.Родитель.Имя = "ФормаСоздатьНаОсновании" Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") И Элемент.Родитель.Имя = "КоманднаяПанельФормыПечать" Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") И Элемент.Родитель.Имя = "ФормаПечать" Тогда
Продолжить;
КонецЕсли;
Если НеизменяемыеПоля.Свойство(Элемент.Имя) Тогда
Продолжить;
КонецЕсли;
РодительНеИзменяемоеПоле = Ложь;
ТекущийРодитель = Элемент.Родитель;
Пока ТипЗнч(ТекущийРодитель) <> Тип("УправляемаяФорма") Цикл
Если НеизменяемыеПоля.Свойство(ТекущийРодитель.Имя) Тогда
РодительНеИзменяемоеПоле = Истина;
Прервать;
КонецЕсли;
ТекущийРодитель = ТекущийРодитель.Родитель;
КонецЦикла;
Если РодительНеИзменяемоеПоле Тогда
Продолжить;
КонецЕсли;
Если ДоступныеПоля = "" Тогда
Если (НедоступныеПоля <> "") И НедоступныеПоля.Свойство(Элемент.Имя) Тогда
Доступность = Ложь;
Иначе
Доступность = Истина;
КонецЕсли;
ИначеЕсли ДоступныеПоля.Свойство(Элемент.Имя) Тогда
Доступность = Истина;
Иначе
Доступность = Ложь;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
Элемент.Доступность = Доступность;
Иначе
Элемент.ТолькоПросмотр = Не Доступность;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// доступность поля состояние зависит от настройки
Если Не Константы.РазрешитьРучноеИзменениеСостоянияДокументов.Получить()
И Константы.ИспользоватьБизнесПроцессыИЗадачи.Получить() Тогда
Форма.Элементы.Состояние.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
// Получает контактное лицо корреспондента
Функция КонтактноеЛицоКорреспондента(Корреспондент) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| КонтактныеЛица.Ссылка КАК КонтактноеЛицо
|ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица
|ГДЕ
| КонтактныеЛица.Владелец = &Владелец
| И (НЕ КонтактныеЛица.ПометкаУдаления)
| И ЛОЖЬ В
| (ВЫБРАТЬ
| ЛОЖЬ КАК ЗначениеЛожь
| ИЗ
| (ВЫБРАТЬ ПЕРВЫЕ 2
| ИСТИНА КАК ЗначениеИстина
| ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица
| ГДЕ
| (НЕ КонтактныеЛица.ПометкаУдаления)
| И КонтактныеЛица.Владелец = &Владелец
| ) КАК ВыбранныеОбъекты
| ИМЕЮЩИЕ
| КОЛИЧЕСТВО(ВыбранныеОбъекты.ЗначениеИстина) = 1)";
Запрос.УстановитьПараметр("Владелец", Корреспондент);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.КонтактноеЛицо;
КонецЕсли;
Возврат Неопределено;
КонецФункции
// Возвращает количество документов переданного вида
Функция КоличествоДокументовПоВидуДокумента(ВидДокумента) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если ТипЗнч(ВидДокумента) = Тип("СправочникСсылка.ВидыВнутреннихДокументов") Тогда
Тип = "ВнутренниеДокументы";
ИначеЕсли ТипЗнч(ВидДокумента) = Тип("СправочникСсылка.ВидыВходящихДокументов") Тогда
Тип = "ВходящиеДокументы";
ИначеЕсли ТипЗнч(ВидДокумента) = Тип("СправочникСсылка.ВидыИсходящихДокументов") Тогда
Тип = "ИсходящиеДокументы";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| Справочник." + Тип + "
|ГДЕ
| ВидДокумента = &ВидДокумента
| И РегистрационныйНомер <> """"";
Запрос.УстановитьПараметр("ВидДокумента", ВидДокумента);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат 0;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Количество;
КонецФункции
// Возвращает количество документов для переданного нумератора
Функция КоличествоДокументовПоНумератору(Нумератор) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| Справочник.ВходящиеДокументы КАК ВходящиеДокументы
|ГДЕ
| ВходящиеДокументы.ВидДокумента.Нумератор = &Нумератор
| И ВходящиеДокументы.РегистрационныйНомер <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КОЛИЧЕСТВО(*)
|ИЗ
| Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
|ГДЕ
| ИсходящиеДокументы.ВидДокумента.Нумератор = &Нумератор
| И ИсходящиеДокументы.РегистрационныйНомер <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КОЛИЧЕСТВО(*)
|ИЗ
| Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
|ГДЕ
| ВнутренниеДокументы.ВидДокумента.Нумератор = &Нумератор
| И ВнутренниеДокументы.РегистрационныйНомер <> """"";
Запрос.УстановитьПараметр("Нумератор", Нумератор);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат 0;
КонецЕсли;
Возврат Результат.Выгрузить().Итог("Количество");
КонецФункции
// Возвращает количество документов с пустым видом
Функция КоличествоДокументовСПустымВидом(ТипДокумента) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если ТипДокумента = "ВходящийДокумент" Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| Справочник.ВходящиеДокументы КАК ВходящиеДокументы
|ГДЕ
| ВходящиеДокументы.ВидДокумента = ЗНАЧЕНИЕ(Справочник.ВидыВходящихДокументов.ПустаяСсылка)";
ИначеЕсли ТипДокумента = "ИсходящийДокумент" Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
|ГДЕ
| ИсходящиеДокументы.ВидДокумента = ЗНАЧЕНИЕ(Справочник.ВидыИсходящихДокументов.ПустаяСсылка)";
ИначеЕсли ТипДокумента = "ВнутреннийДокумент" Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
|ГДЕ
| ВнутренниеДокументы.ВидДокумента = ЗНАЧЕНИЕ(Справочник.ВидыВнутреннихДокументов.ПустаяСсылка)";
КонецЕсли;
Запрос = Новый Запрос(ТекстЗапроса);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат 0;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Количество;
КонецФункции
// Инициализирует персональные настройки работы с документами - для использования на клиенте
Функция ПолучитьПерсональныеНастройкиРаботыСДокументамиСервер() Экспорт
Настройки = Новый Структура;
ПоказыватьПредупреждениеПриРегистрации = ХранилищеОбщихНастроек.Загрузить("НастройкиРаботыСДокументами", "ПоказыватьПредупреждениеПриРегистрации");
Если ПоказыватьПредупреждениеПриРегистрации = Неопределено Тогда
ПоказыватьПредупреждениеПриРегистрации = Истина;
ХранилищеОбщихНастроек.Сохранить("НастройкиРаботыСДокументами", "ПоказыватьПредупреждениеПриРегистрации", ПоказыватьПредупреждениеПриРегистрации);
КонецЕсли;
Настройки.Вставить("ПоказыватьПредупреждениеПриРегистрации", ПоказыватьПредупреждениеПриРегистрации И ПолучитьФункциональнуюОпцию("ИспользоватьСостоянияДокументов"));
СпособОтраженияПередачиКорреспонденту = ХранилищеОбщихНастроек.Загрузить("НастройкиРаботыСДокументами", "СпособОтраженияПередачиКорреспонденту");
Если СпособОтраженияПередачиКорреспонденту = Неопределено Тогда
СпособОтраженияПередачиКорреспонденту = Перечисления.СпособыОтраженияПередачиКорреспонденту.ЗадаватьВопрос;
ХранилищеОбщихНастроек.Сохранить("НастройкиРаботыСДокументами", "СпособОтраженияПередачиКорреспонденту", СпособОтраженияПередачиКорреспонденту);
КонецЕсли;
Настройки.Вставить("СпособОтраженияПередачиКорреспонденту", СпособОтраженияПередачиКорреспонденту);
УстановитьПривилегированныйРежим(Истина);
Настройки.Вставить("ИспользоватьФайлыУВходящихДокументов", Константы.ИспользоватьФайлыУВходящихДокументов.Получить());
Настройки.Вставить("ИспользоватьФайлыУИсходящихДокументов", Константы.ИспользоватьФайлыУИсходящихДокументов.Получить());
Возврат Настройки; // параметры доступны только для чтения
КонецФункции
// Возвращает ключ записи регистра сведений ЖурналПередачиДокументов
Функция ПолучитьКлючЖурналаПередачи(Период, Документ, ТипЭкземпляра, НомерЭкземпляра) Экспорт
Ключ = РегистрыСведений.ЖурналПередачиДокументов.СоздатьКлючЗаписи(
Новый Структура("Период, Документ, ТипЭкземпляра, НомерЭкземпляра",
Период,
Документ,
ТипЭкземпляра,
НомерЭкземпляра));
Возврат Ключ;
КонецФункции
// Возвращает количество держателей документа
Функция КоличествоКомуПереданДокумент(Документ) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| РегистрСведений.ЖурналПередачиДокументов КАК ЖурналПередачиДокументов