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