Файл: Разработка регламента выполнения процесса «Управление документооборотом» (1 Построение бизнес-процессов «как есть»).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.06.2023

Просмотров: 338

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Возврат Выборка.СвязанныйДокумент;

КонецФункции

Функция ПолучитьСвязанныеДокументы(Документ, Знач ТипСвязи) Экспорт

Если ТипЗнч(ТипСвязи) = Тип("Строка") Тогда

ТипСвязи = Справочники.ТипыСвязей[ТипСвязи];

КонецЕсли;

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗРЕШЕННЫЕ

| СвязиДокументов.СвязанныйДокумент,

| СвязиДокументов.Комментарий,

| СвязиДокументов.Установил,

| СвязиДокументов.ДатаУстановки

|ИЗ

| РегистрСведений.СвязиДокументов КАК СвязиДокументов

|ГДЕ

| СвязиДокументов.Документ = &Документ

| И СвязиДокументов.ТипСвязи = &ТипСвязи";

Запрос.УстановитьПараметр("Документ", Документ);

Запрос.УстановитьПараметр("ТипСвязи", ТипСвязи);

Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("СвязанныйДокумент");

КонецФункции

Процедура СоздатьНастройкуСвязи(

ТипСвязи,

СсылкаИз,

СсылкаНа,

ХарактерСвязи,

ТипОбратнойСвязи = Неопределено,

ХарактерОбратнойСвязи = Неопределено,

Предопределенная = Ложь,

Комментарий = "") Экспорт

МенеджерЗаписи = РегистрыСведений.НастройкаСвязей.СоздатьМенеджерЗаписи();

МенеджерЗаписи.ТипСвязи = ТипСвязи;

МенеджерЗаписи.СсылкаИз = СсылкаИз;

МенеджерЗаписи.СсылкаНа = СсылкаНа;

МенеджерЗаписи.ХарактерСвязи = ХарактерСвязи;

МенеджерЗаписи.ТипОбратнойСвязи = ТипОбратнойСвязи;

МенеджерЗаписи.ХарактерОбратнойСвязи = ХарактерОбратнойСвязи;

МенеджерЗаписи.Предопределенная = Предопределенная;

МенеджерЗаписи.Комментарий = Комментарий;

МенеджерЗаписи.Записать();

Если ЗначениеЗаполнено(ТипОбратнойСвязи) Тогда

МенеджерЗаписи = РегистрыСведений.НастройкаСвязей.СоздатьМенеджерЗаписи();

МенеджерЗаписи.ТипСвязи = ТипОбратнойСвязи ;

МенеджерЗаписи.СсылкаИз = СсылкаНа;

МенеджерЗаписи.СсылкаНа = СсылкаИз;

МенеджерЗаписи.ХарактерСвязи = ХарактерОбратнойСвязи;

МенеджерЗаписи.ТипОбратнойСвязи = ТипСвязи;

МенеджерЗаписи.ХарактерОбратнойСвязи = ХарактерСвязи;

МенеджерЗаписи.Предопределенная = Предопределенная;

МенеджерЗаписи.Комментарий = Комментарий;

МенеджерЗаписи.Записать();

КонецЕсли;

КонецПроцедуры

Процедура СоздатьСвязь(

Документ,

СвязанныйДокумент,

ТипСвязи,

Установил = Неопределено,

ДатаУстановки = Неопределено,

Комментарий = "",

Порядок = 0) Экспорт

НачатьТранзакцию();

Попытка

МенеджерЗаписи = РегистрыСведений.СвязиДокументов.СоздатьМенеджерЗаписи();


МенеджерЗаписи.Документ = Документ;

МенеджерЗаписи.СвязанныйДокумент = СвязанныйДокумент;

МенеджерЗаписи.ТипСвязи = ТипСвязи;

МенеджерЗаписи.Комментарий = Комментарий;

МенеджерЗаписи.Порядок = Порядок;

Если Установил = Неопределено Тогда

МенеджерЗаписи.Установил = ОбщегоНазначения.ТекущийПользователь();

Иначе

МенеджерЗаписи.Установил = Установил;

КонецЕсли;

Если ДатаУстановки = Неопределено Тогда

МенеджерЗаписи.ДатаУстановки = ТекущаяДата();

Иначе

МенеджерЗаписи.ДатаУстановки = ДатаУстановки;

КонецЕсли;

МенеджерЗаписи.Записать();

НастройкаСвязи = ПолучитьНастройкуСвязи(Документ, СвязанныйДокумент, ТипСвязи);

Если НастройкаСвязи = Неопределено Тогда

ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'Тип связи %1 не настроен для %2'"), Строка(ТипСвязи), Строка(СвязанныйДокумент));

ВызватьИсключение ТекстСообщения;

КонецЕсли;

Если ЗначениеЗаполнено(НастройкаСвязи.ТипОбратнойСвязи) Тогда

МенеджерОбратнойЗаписи = РегистрыСведений.СвязиДокументов.СоздатьМенеджерЗаписи();

МенеджерОбратнойЗаписи.Документ = МенеджерЗаписи.СвязанныйДокумент;

МенеджерОбратнойЗаписи.СвязанныйДокумент = МенеджерЗаписи.Документ;

МенеджерОбратнойЗаписи.ТипСвязи = НастройкаСвязи.ТипОбратнойСвязи;

МенеджерОбратнойЗаписи.Установил = МенеджерЗаписи.Установил;

МенеджерОбратнойЗаписи.ДатаУстановки = МенеджерЗаписи.ДатаУстановки;

МенеджерОбратнойЗаписи.Комментарий = МенеджерЗаписи.Комментарий;

МенеджерОбратнойЗаписи.Порядок = МенеджерЗаписи.Порядок;

МенеджерОбратнойЗаписи.Записать();

КонецЕсли;

ЗафиксироватьТранзакцию();

Исключение

ОтменитьТранзакцию();

ВызватьИсключение;

КонецПопытки;

КонецПроцедуры

Процедура УдалитьСвязь(Документ, СвязанныйДокумент, ТипСвязи) Экспорт

МенеджерЗаписи = РегистрыСведений.СвязиДокументов.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Документ = Документ;

МенеджерЗаписи.СвязанныйДокумент = СвязанныйДокумент;

МенеджерЗаписи.ТипСвязи = ТипСвязи;

МенеджерЗаписи.Удалить();

НастройкаСвязи = ПолучитьНастройкуСвязи(Документ, СвязанныйДокумент, ТипСвязи);

Если НастройкаСвязи = Неопределено Тогда

ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'Тип связи %1 не настроен для %2'"), Строка(ТипСвязи), Строка(СвязанныйДокумент));

ВызватьИсключение ТекстСообщения;


КонецЕсли;

Если ЗначениеЗаполнено(НастройкаСвязи.ТипОбратнойСвязи) Тогда

МенеджерЗаписи = РегистрыСведений.СвязиДокументов.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Документ = СвязанныйДокумент;

МенеджерЗаписи.СвязанныйДокумент = Документ;

МенеджерЗаписи.ТипСвязи = НастройкаСвязи.ТипОбратнойСвязи;

МенеджерЗаписи.Удалить();

КонецЕсли;

КонецПроцедуры

Процедура УстановитьКомментарийТипаСвязи(ТипСвязи, Комментарий) Экспорт

ТипСвязиОбъект = ТипСвязи.ПолучитьОбъект();

ТипСвязиОбъект.Комментарий = Комментарий;

ТипСвязиОбъект.Записать();

КонецПроцедуры

Функция ПолучитьРодителей(Элемент) Экспорт

Родители = Новый Массив;

ТекущийРодитель = Элемент.Родитель;

Пока Не ТекущийРодитель.Пустая() Цикл

Родители.Добавить(ТекущийРодитель);

ТекущийРодитель = ТекущийРодитель.Родитель;

КонецЦикла;

Возврат Родители;

КонецФункции

Функция ПолучитьНастройкуСвязи(Документ, СвязанныйДокумент, ТипСвязи) Экспорт

СтруктураВозврата = Новый Структура("ТипСвязи, СсылкаИз, СсылкаНа, ТипОбратнойСвязи, ХарактерСвязи, ХарактерОбратнойСвязи");

НастройкиСвязи = Новый ТаблицаЗначений;

НастройкиСвязи.Колонки.Добавить("ТипСвязи");

НастройкиСвязи.Колонки.Добавить("СсылкаИз");

НастройкиСвязи.Колонки.Добавить("УровеньСсылкаИз");

НастройкиСвязи.Колонки.Добавить("СсылкаНа");

НастройкиСвязи.Колонки.Добавить("УровеньСсылкаНа");

НастройкиСвязи.Колонки.Добавить("Уровень");

НастройкиСвязи.Колонки.Добавить("ХарактерСвязи");

НастройкиСвязи.Колонки.Добавить("ТипОбратнойСвязи");

НастройкиСвязи.Колонки.Добавить("ХарактерОбратнойСвязи");

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| НастройкаСвязей.ТипСвязи,

| НастройкаСвязей.СсылкаИз,

| НастройкаСвязей.СсылкаНа,

| НастройкаСвязей.ХарактерСвязи,

| НастройкаСвязей.ТипОбратнойСвязи,

| НастройкаСвязей.ХарактерОбратнойСвязи,

| НастройкаСвязей.Комментарий

|ИЗ

| РегистрСведений.НастройкаСвязей КАК НастройкаСвязей

|ГДЕ

| НастройкаСвязей.ТипСвязи = &ТипСвязи";

Запрос.УстановитьПараметр("ТипСвязи", ТипСвязи);

Если ТипЗнч(Документ) = Тип("СправочникСсылка.Файлы") Тогда

Запрос.Текст = Запрос.Текст +

" И (ТИПЗНАЧЕНИЯ(НастройкаСвязей.СсылкаИз) = ТИПЗНАЧЕНИЯ(&Документ)) ";

Запрос.УстановитьПараметр("Документ", Документ);

Иначе

Запрос.Текст = Запрос.Текст +

" И (НастройкаСвязей.СсылкаИз = &ВидДокумента

| ИЛИ НастройкаСвязей.СсылкаИз В (&Родители)


| ИЛИ НастройкаСвязей.СсылкаИз = &ПустаяСсылка) ";

ВидДокументаСсылкаИз = Документ.ВидДокумента;

ПустаяСсылкаИз = Справочники[ВидДокументаСсылкаИз.Метаданные().Имя].ПустаяСсылка();

РодителиСсылкаИз = ПолучитьРодителей(ВидДокументаСсылкаИз);

Запрос.УстановитьПараметр("ВидДокумента", ВидДокументаСсылкаИз);

Запрос.УстановитьПараметр("Родители", РодителиСсылкаИз);

Запрос.УстановитьПараметр("ПустаяСсылка", ПустаяСсылкаИз);

КонецЕсли;

Если ТипЗнч(СвязанныйДокумент) = Тип("Строка")

Или ТипЗнч(СвязанныйДокумент) = Тип("СправочникСсылка.Файлы") Тогда

Запрос.Текст = Запрос.Текст +

" И (ТИПЗНАЧЕНИЯ(НастройкаСвязей.СсылкаНа) = ТИПЗНАЧЕНИЯ(&СвязанныйДокумент)) ";

Запрос.УстановитьПараметр("СвязанныйДокумент", СвязанныйДокумент);

Иначе

Запрос.Текст = Запрос.Текст +

" И (НастройкаСвязей.СсылкаНа = &ВидДокументаСсылкаНа

| ИЛИ НастройкаСвязей.СсылкаНа В (&РодителиСсылкаНа)

| ИЛИ НастройкаСвязей.СсылкаНа = &ПустаяСсылкаНа) ";

ВидДокументаСсылкаНа = СвязанныйДокумент.ВидДокумента;

РодителиСсылкаНа = ПолучитьРодителей(ВидДокументаСсылкаНа);

ПустаяСсылкаНа = Справочники[ВидДокументаСсылкаНа.Метаданные().Имя].ПустаяСсылка();

Запрос.УстановитьПараметр("ВидДокументаСсылкаНа", ВидДокументаСсылкаНа);

Запрос.УстановитьПараметр("РодителиСсылкаНа", РодителиСсылкаНа);

Запрос.УстановитьПараметр("ПустаяСсылкаНа", ПустаяСсылкаНа);

КонецЕсли;

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

НоваяСтрока = НастройкиСвязи.Добавить();

НоваяСтрока.ТипСвязи = Выборка.ТипСвязи;

НоваяСтрока.СсылкаИз = Выборка.СсылкаИз;

НоваяСтрока.СсылкаНа = Выборка.СсылкаНа;

Если ТипЗнч(Выборка.СсылкаИз) = Тип("СправочникСсылка.Файлы") Тогда

НоваяСтрока.УровеньСсылкаИз = 0;

Иначе

Если Выборка.СсылкаИз = ВидДокументаСсылкаИз Тогда

НоваяСтрока.УровеньСсылкаИз = 0;

ИначеЕсли Выборка.СсылкаИз = ПустаяСсылкаИз Тогда

НоваяСтрока.УровеньСсылкаИз = 1000;

Иначе

НоваяСтрока.УровеньСсылкаИз = РодителиСсылкаИз.Найти(Выборка.СсылкаИз) + 1;

КонецЕсли;

КонецЕсли;

Если ТипЗнч(Выборка.СсылкаНа) = Тип("Строка")

Или ТипЗнч(Выборка.СсылкаНа) = Тип("СправочникСсылка.Файлы") Тогда

НоваяСтрока.УровеньСсылкаНа = 0;

Иначе

Если Выборка.СсылкаНа = ВидДокументаСсылкаНа Тогда

НоваяСтрока.УровеньСсылкаНа = 0;

ИначеЕсли Выборка.СсылкаНа = ПустаяСсылкаНа Тогда

НоваяСтрока.УровеньСсылкаНа = 1000;

Иначе


НоваяСтрока.УровеньСсылкаНа = РодителиСсылкаНа.Найти(Выборка.СсылкаНа) + 1;

КонецЕсли;

КонецЕсли;

НоваяСтрока.Уровень = НоваяСтрока.УровеньСсылкаИз + НоваяСтрока.УровеньСсылкаНа;

НоваяСтрока.ХарактерСвязи = Выборка.ХарактерСвязи;

НоваяСтрока.ТипОбратнойСвязи = Выборка.ТипОбратнойСвязи;

НоваяСтрока.ХарактерОбратнойСвязи = Выборка.ХарактерОбратнойСвязи;

КонецЦикла;

НастройкиСвязи.Сортировать("Уровень Возр");

Если НастройкиСвязи.Количество() > 0 Тогда

ЗаполнитьЗначенияСвойств(СтруктураВозврата, НастройкиСвязи[0]);

Возврат СтруктураВозврата;

КонецЕсли;

Возврат Неопределено;

КонецФункции

Функция ПолучитьНастройкиСвязи(Документ, СвязанныйДокумент = Неопределено) Экспорт

НастройкиСвязи = Новый ТаблицаЗначений;

НастройкиСвязи.Колонки.Добавить("ТипСвязи");

НастройкиСвязи.Колонки.Добавить("СсылкаИз");

НастройкиСвязи.Колонки.Добавить("ТипСсылкаИз");

НастройкиСвязи.Колонки.Добавить("ТипСсылкаИзПредставление");

НастройкиСвязи.Колонки.Добавить("СсылкаНа");

НастройкиСвязи.Колонки.Добавить("ТипСсылкаНа");

НастройкиСвязи.Колонки.Добавить("ТипСсылкаНаПредставление");

НастройкиСвязи.Колонки.Добавить("ХарактерСвязи");

НастройкиСвязи.Колонки.Добавить("ТипОбратнойСвязи");

НастройкиСвязи.Колонки.Добавить("ХарактерОбратнойСвязи");

Если Не ЗначениеЗаполнено(Документ) Тогда

Возврат НастройкиСвязи;

КонецЕсли;

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| НастройкаСвязей.ТипСвязи,

| НастройкаСвязей.СсылкаИз,

| НастройкаСвязей.СсылкаНа,

| НастройкаСвязей.ХарактерСвязи,

| НастройкаСвязей.ТипОбратнойСвязи,

| НастройкаСвязей.ХарактерОбратнойСвязи,

| НастройкаСвязей.Комментарий

|ИЗ

| РегистрСведений.НастройкаСвязей КАК НастройкаСвязей";

Если ТипЗнч(Документ) = Тип("СправочникСсылка.Файлы") Тогда

Запрос.Текст = Запрос.Текст +

" ГДЕ (ТИПЗНАЧЕНИЯ(НастройкаСвязей.СсылкаИз) = ТИПЗНАЧЕНИЯ(&Документ)) ";

Запрос.УстановитьПараметр("Документ", Документ);

Иначе

Запрос.Текст = Запрос.Текст +

" ГДЕ (НастройкаСвязей.СсылкаИз = &ВидДокумента

| ИЛИ НастройкаСвязей.СсылкаИз В (&Родители)

| ИЛИ НастройкаСвязей.СсылкаИз = &ПустаяСсылка) ";

ВидДокументаСсылкаИз = Документ.ВидДокумента;

ПустаяСсылкаИз = Справочники[ВидДокументаСсылкаИз.Метаданные().Имя].ПустаяСсылка();

РодителиИз = ПолучитьРодителей(ВидДокументаСсылкаИз);

Запрос.УстановитьПараметр("ВидДокумента", ВидДокументаСсылкаИз);