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