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