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