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