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

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

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

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

Добавлен: 28.06.2023

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

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

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

Функция ДляРегистрацииНеобходимоУказатьСвязанныйДокумент(Форма) Экспорт

Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСвязиДокументов") Тогда

Возврат Ложь;

КонецЕсли;

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

Возврат Ложь;

КонецЕсли;

ПараметрыНумератора = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Форма.Нумератор,

"НезависимаяНумерацияПоСвязанномуДокументу, ТипСвязи");

Если Не ПараметрыНумератора.НезависимаяНумерацияПоСвязанномуДокументу Тогда

Возврат Ложь;

КонецЕсли;

Если ЗначениеЗаполнено(Форма.Объект.Ссылка) Тогда

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

Иначе

ДокументДляНумерации = Неопределено;

КонецЕсли;

ДокументНеНайден = Не ЗначениеЗаполнено(ДокументДляНумерации);

Если ДокументНеНайден И Форма.ТипСвязиНумератора <> ПараметрыНумератора.ТипСвязи Тогда

Форма.ТипСвязиНумератора = ПараметрыНумератора.ТипСвязи;

СтруктураОбъекта = Новый Структура;

СтруктураОбъекта.Вставить("ВидДокумента", Форма.Объект.ВидДокумента);

НастройкиСвязи = СвязиДокументов.ПолучитьНастройкиСвязи(СтруктураОбъекта);

СтрокиНастроекСвязи = НастройкиСвязи.НайтиСтроки(Новый Структура("ТипСвязи", Форма.ТипСвязиНумератора));

Форма.ТипыВидыСвязанныхДокументовДляНумерации.Очистить();

Для Каждого СтрокаНастроекСвязи из СтрокиНастроекСвязи Цикл

Строка = Форма.ТипыВидыСвязанныхДокументовДляНумерации.Добавить();

Строка.Тип = СтрокаНастроекСвязи.ТипСсылкаНа;

Строка.Вид = СтрокаНастроекСвязи.СсылкаНа;

КонецЦикла;

КонецЕсли;

Возврат ДокументНеНайден;

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

// Проверяет возможность изменить вид документа, если у него имеются связанные документы

Процедура ПроверкаСвязейПриИзмененииВидаДокумента(Объект, Отказ) Экспорт

Если Делопроизводство.ИспользоватьВидыДокументов(Объект.ВидДокумента) И Не Объект.Ссылка.Пустая() Тогда

СтарыйВидДокумента = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "ВидДокумента");

// если изменен вид документа

Если Объект.ВидДокумента <> СтарыйВидДокумента Тогда

УстановитьПривилегированныйРежим(Истина);

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

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

"ВЫБРАТЬ

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

| СвязиДокументов.ТипСвязи

|ИЗ

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

|ГДЕ

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


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

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

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

ДокументСтруктура = Новый Структура;

ДокументСтруктура.Вставить("Ссылка", Объект.Ссылка);

ДокументСтруктура.Вставить("ВидДокумента", Объект.ВидДокумента);

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

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

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

НСтр("ru = 'Для документа указана связь ""%1"", которую нельзя использовать для документов этого вида'"),

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

ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"Объект.ВидДокумента",,Отказ);

КонецЕсли;

КонецЦикла;

КонецЕсли;

КонецЕсли;

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

// Открывает форму выбора дела

Процедура ВыбратьДело(ЭлементДело, Параметры) Экспорт

ПараметрыФормы = Параметры;

ПараметрыФормы.Вставить("РежимВыбора", "ИзКарточкиДокумента");

ОткрытьФорму("Справочник.ДелаХраненияДокументов.ФормаВыбора", ПараметрыФормы, ЭлементДело);

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

// Открывает форму выбора получателя

Процедура ВыбратьПолучателя(ЭлементПолучатель, РеквизитПолучатель) Экспорт

ПараметрыФормы = Новый Структура("Получатель", РеквизитПолучатель);

ОткрытьФорму("ОбщаяФорма.ВыборПолучателя", ПараметрыФормы, ЭлементПолучатель);

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

// Выполняет проверки перед закрытием документа

Процедура ПередЗакрытиемДокумента(Объект, Отказ) Экспорт

Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда

Возврат;

КонецЕсли;

ТекущийПользователь = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ТекущийПользователь;

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("СообщениеВопрос", НСтр("ru = 'Закрыть карточку?'"));

ПараметрыФормы.Вставить("СообщениеЗаголовок", НСтр("ru = 'Некоторые файлы заняты вами для редактирования:'"));

ПараметрыФормы.Вставить("Заголовок", Строка(Объект.Ссылка));

ПараметрыФормы.Вставить("ВладелецФайла", Объект.Ссылка);

ПараметрыФормы.Вставить("Редактирует", ТекущийПользователь);

РаботаСФайламиКлиент.ОткрытьДиалогСписокЗанятыхФайлов(Отказ, ПараметрыФормы);

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

// Открывает форму текущего состояния документа

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

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


Предупреждение(НСтр("ru = 'Для доступа к состоянию элемент необходимо записать!'"));

Возврат;

КонецЕсли;

Ключ = Делопроизводство.ПолучитьКлючСостоянияДокумента(Документ);

Если Ключ = Неопределено Тогда

Возврат;

КонецЕсли;

ПараметрыФормы = Новый Структура("Ключ", Ключ);

ОткрытьФормуМодально("РегистрСведений.СостоянияДокументов.ФормаЗаписи", ПараметрыФормы, Элемент);

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

// Открывает форму предупреждения при регистрации документа

Функция ПредупредитьПриРегистрации() Экспорт

ПоказыватьПредупреждениеПриРегистрации = ДелопроизводствоКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСДокументами().ПоказыватьПредупреждениеПриРегистрации;

Если ПоказыватьПредупреждениеПриРегистрации = Истина Тогда

Результат = ОткрытьФормуМодально("ОбщаяФорма.ПредупреждениеПриРегистрации");

Если Результат <> КодВозвратаДиалога.Да Тогда

Возврат Ложь;

КонецЕсли;

КонецЕсли;

Возврат Истина;

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

// Открывает форму предупреждения при перерегистрации документа

Функция ПредупредитьПриПеререгистрации() Экспорт

ТекстВопроса = НСтр("ru = 'Документ будет перерегистрирован. Продолжить?'");

Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);

Если Ответ <> КодВозвратаДиалога.Да Тогда

Возврат Ложь;

КонецЕсли;

Возврат Истина;

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

// Открывает форму записи журнала передачи документа

Процедура ОткрытьКарточкуПередачиДокумента(Документ, ВладелецФормы) Экспорт

Количество = Делопроизводство.КоличествоКомуПереданДокумент(Документ);

Если Количество = 0 Тогда

Возврат;

ИначеЕсли Количество = 1 Тогда

ПараметрыФормы = Новый Структура("ПоказатьДержателяДокумента", Документ);

ОткрытьФорму("РегистрСведений.ЖурналПередачиДокументов.ФормаЗаписи", ПараметрыФормы, ВладелецФормы);

Иначе

ПараметрыФормы = Новый Структура("ПоказатьДержателейДокумента", Документ);

ОткрытьФорму("РегистрСведений.ЖурналПередачиДокументов.Форма.ФормаСпискаДокумента", ПараметрыФормы, ВладелецФормы);

КонецЕсли;

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

// Показывает форму вопроса с возможностью сохранения ответа в персональные настройки

// Параметры:

// ЭлементВладелец - элемент формы, который будет владельцем открываемой формы с вопросом

// Заголовок вопроса - заголовок для формы вопроса

// ТекстВопроса - формулировка вопроса

// КлючПерсональнойНастройкиПоказаВопроса - ключ персональной настройки, хранящей флаг необходимости показа формы


// ИмяПерсональнойНастройкипоказаВопроса - имя персональной настройки, хранящей флаг необходимости показа формы

// СписокДоступныхВариантов - список доступных вариантов ответов на вопрос

// ВариантОтветаПоУмолчанию - вариант ответа, который будет помечен как вариант ответа по умолчанию

// Возвращает:

// Значение типа КодВозвратаДиалога

Функция ПоказатьРасширеннуюФормуВопроса(

ЭлементВладелец,

ЗаголовокВопроса,

ТекстВопроса,

КлючПерсональнойНастройкиПоказаВопроса,

ИмяПерсональнойНастройкиПоказаВопроса,

СписокДоступныхВариантов,

ВариантОтветаПоУмолчанию = "Да") Экспорт

ПараметрыФормы = Новый Структура;

Параметрыформы.Вставить("Заголовок", ЗаголовокВопроса);

Параметрыформы.Вставить("ТекстВопроса", ТекстВопроса);

Параметрыформы.Вставить("СписокДоступныхВариантов", СписокДоступныхВариантов);

Параметрыформы.Вставить("КлючПерсональнойНастройки", КлючПерсональнойНастройкиПоказаВопроса);

Параметрыформы.Вставить("ИмяПерсональнойНастройки", ИмяПерсональнойНастройкиПоказаВопроса);

ПараметрыФормы.Вставить("ВариантОтветаПоУмолчанию", ВариантОтветаПоУмолчанию);

Ответ = ОткрытьФормуМодально("ОбщаяФорма.РасширенныйВопрос", ПараметрыФормы, ЭлементВладелец);

Если НЕ ЗначениеЗаполнено(Ответ) ИЛИ Ответ = Ложь Тогда

Возврат Ответ;

КонецЕсли;

ЗначениеДляВозврата = Неопределено;

Выполнить("ЗначениеДляВозврата = КодВозвратаДиалога." + Ответ);

Возврат ЗначениеДляВозврата;

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

// Предлагает записать текущий документ

// Возвращает:

// Истина - Документ удачно записан,

// Ложь - отказ от записи или не удалось записать.

//

Функция ПредложитьЗаписатьДокумент(Форма, Текст) Экспорт

Режим = РежимДиалогаВопрос.ДаНет;

Ответ = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, 0);

Если Ответ <> КодВозвратаДиалога.Да Тогда

Возврат Ложь;

КонецЕсли;

Результат = Форма.Записать();

Если Результат Тогда

ПоказатьОповещениеПользователя(

"Создание:",

ПолучитьНавигационнуюСсылку(Форма.Объект.Ссылка),

Строка(Форма.Объект.Ссылка),

БиблиотекаКартинок.Информация32);

КонецЕсли;

Возврат Результат;

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

// Копирует файл из временного хранилища на клиента и открывает его для просмотра

//

Процедура ОткрытьФайлИзВременногоХранилища(АдресВоВременномХранилище, ИмяФайла) Экспорт

Если Не РасширениеРаботыСФайламиПодключено() Тогда

Предупреждение(НСтр("ru = 'Не удалось подключить расширение работы с файлами.'"));


Возврат;

КонецЕсли;

ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);

Если ДвоичныеДанные = Неопределено Тогда

Предупреждение(НСтр("ru = 'Не удалось получить файл. Возможно он был удален.'"));

Возврат;

КонецЕсли;

ПолноеИмяВременногоФайла = ПолучитьПолноеИмяВременногоФайла(ИмяФайла);

Если ПустаяСтрока(ПолноеИмяВременногоФайла) Тогда

Предупреждение(НСтр("ru = 'Не удалось создать временный файл.'"));

Возврат;

КонецЕсли;

Попытка

ДвоичныеДанные.Записать(ПолноеИмяВременногоФайла);

Исключение

СообщениеОбОшибке = ОписаниеОшибки();

Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'Не удалось записать временный файл.

|%1'"),

СообщениеОбОшибке));

Возврат;

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

ОткрытьФайлНаДиске(ПолноеИмяВременногоФайла, ИмяФайла);

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

Процедура ОткрытьФайлНаДиске(ПолноеИмяФайла, ИмяФайла) Экспорт

Попытка

РаботаСФайламиКлиент.ЗапуститьПриложениеПоИмениФайла(ПолноеИмяФайла);

Исключение

Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'Не удалось открыть файл %1

|%2'"),

ИмяФайла,

ОписаниеОшибки()));

Возврат;

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

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

Функция РасширениеРаботыСФайламиПодключено()

Если Не ПодключитьРасширениеРаботыСФайлами() Тогда

Предупреждение(НСтр("ru = 'Не подключено расширение работы с файлами!'"));

Возврат Ложь;

КонецЕсли;

Возврат Истина;;

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

Функция ПолучитьПолноеИмяВременногоФайла(ИмяФайла) Экспорт

#Если ВебКлиент Тогда

Возврат "";

#Иначе

Возврат ПолучитьИмяВременногоКаталога() + "\" + ИмяФайла;

#КонецЕсли

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

#Если Не ВебКлиент Тогда

Функция ПолучитьИмяВременногоКаталога()

ИмяВременногоКаталога = ПолучитьИмяВременногоФайла("");

СоздатьКаталог(ИмяВременногоКаталога);

Возврат ИмяВременногоКаталога;

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

#КонецЕсли

// Открывает меню выбора папки и сохраняет файл из временного храналища в указанную папку

// Возвращает ссылку на файл или Неопределено в случае неуспеха

//

Функция СоздатьФайлИзВременногоХранилища(Форма, АдресВоВременномХранилище, ИмяФайла) Экспорт

Папка = Неопределено;

Если Не ВыбратьПапку(Папка) Тогда

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

КонецЕсли;

ПолноеИмяФайла = ПолучитьПолноеИмяВременногоФайла(ИмяФайла);

Попытка

ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);