Диплом: Автоматизация документооборота для решения задач организационного управления в ООО "Башкирская концессионная компания"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
103
Соответствие.Вставить(Перечисления.СостоянияДокументов.Исполнен,
"СостояниеИсполнение");
Возврат Соответствие;
КонецФункции
// Получает актуальные состояния документа
Функция ПолучитьВсеСостоянияДокумента(Документ) Экспорт
ТаблицаСостояний = Новый ТаблицаЗначений;
ТаблицаСостояний.Колонки.Добавить("Состояние");
ТаблицаСостояний.Колонки.Добавить("Установил");
ТаблицаСостояний.Колонки.Добавить("ДатаУстановки");
Если Не ЗначениеЗаполнено(Документ) Тогда
Возврат ТаблицаСостояний;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТекущиеСостоянияДокументов.Состояние КАК Состояние,
| ТекущиеСостоянияДокументов.Установил,
| ТекущиеСостоянияДокументов.ДатаУстановки
|ИЗ
| РегистрСведений.ТекущиеСостоянияДокументов КАК
ТекущиеСостоянияДокументов
|ГДЕ
| ТекущиеСостоянияДокументов.Документ = &Документ";
Запрос.УстановитьПараметр("Документ", Документ);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат ТаблицаСостояний;
КонецЕсли;
Возврат Результат.Выгрузить();
104
КонецФункции
Функция ПолучитьСтроковоеПредставлениеСостояний(Документ) Экспорт
СтроковоеПредставление = "";
МассивСостояний =
ПолучитьВсеСостоянияДокумента(Документ).ВыгрузитьКолонку("Состояние");
Типы = Новый Структура(
"СостояниеСогласование,
|СостояниеУтверждение,
|СостояниеПодписание,
|СостояниеРегистрация,
|СостояниеРассмотрение,
|СостояниеИсполнение");
СоответствиеСостояний = ПолучитьСоответствиеСостояний();
Если МассивСостояний.Количество() = 1 И МассивСостояний[0] =
Перечисления.СостоянияДокументов.Проект Тогда
Возврат Строка(МассивСостояний[0]);
КонецЕсли;
Для Каждого Тип Из Типы Цикл
Для Каждого Состояние Из МассивСостояний Цикл
Если Состояние =
Перечисления.СостоянияДокументов.Проект Тогда
Продолжить;
КонецЕсли;
Если СоответствиеСостояний.Получить(Состояние) =
Тип.Ключ Тогда
СтроковоеПредставление = СтроковоеПредставление +
", " + Строка(Состояние);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если Не ПустаяСтрока(СтроковоеПредставление) Тогда
105
СтроковоеПредставление = Сред(СтроковоеПредставление, 3);
КонецЕсли;
Возврат СтроковоеПредставление;
КонецФункции
// Получает актуальное состояние документа
Функция ПолучитьСтруктуруСостоянияДокумента(Документ, Тип) Экспорт
СтруктураСостояния = Новый Структура;
СтруктураСостояния.Вставить("Состояние",
Перечисления.СостоянияМероприятий.ПустаяСсылка());
СтруктураСостояния.Вставить("ДатаУстановки", '00010101');
СтруктураСостояния.Вставить("Установил", Неопределено);
Если Не
ПолучитьФункциональнуюОпцию("ИспользоватьСостоянияДокументов") Тогда
Возврат СтруктураСостояния;
КонецЕсли;
Если Не ЗначениеЗаполнено(Документ) Тогда
Возврат СтруктураСостояния;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
СоответствиеСостояний = ПолучитьСоответствиеСостояний();
ТаблицаСостояний = ПолучитьВсеСостоянияДокумента(Документ);
Для Каждого Строка Из ТаблицаСостояний Цикл
Если СоответствиеСостояний.Получить(Строка.Состояние) = Тип
Тогда
ЗаполнитьЗначенияСвойств(СтруктураСостояния, Строка);
Возврат СтруктураСостояния;
КонецЕсли;
КонецЦикла;
Возврат СтруктураСостояния;
КонецФункции
// Возвращает признак использования видов внутренних документов
106
Функция ИспользоватьВидыВнутреннихДокументов() Экспорт
Возврат
ПолучитьФункциональнуюОпцию("ИспользоватьВидыВнутреннихДокументов"
);
КонецФункции
// Возвращает признак использования видов документов по объекту
Функция ИспользоватьВидыДокументов(ВидДокумента) Экспорт
ИспользоватьВидыДокументов = Ложь;
Если ТипЗнч(ВидДокумента) =
Тип("СправочникСсылка.ВидыВходящихДокументов") Тогда
ИспользоватьВидыДокументов =
ИспользоватьВидыВходящихДокументов();
ИначеЕсли ТипЗнч(ВидДокумента) =
Тип("СправочникСсылка.ВидыИсходящихДокументов") Тогда
ИспользоватьВидыДокументов =
ИспользоватьВидыИсходящихДокументов();
ИначеЕсли ТипЗнч(ВидДокумента) =
Тип("СправочникСсылка.ВидыВнутреннихДокументов") Тогда
ИспользоватьВидыДокументов =
ИспользоватьВидыВнутреннихДокументов();
КонецЕсли;
Возврат ИспользоватьВидыДокументов;
КонецФункции
// Возвращает признак использования номенклатуры дел
Функция ИспользоватьНоменклатуруДел() Экспорт
Возврат
ПолучитьФункциональнуюОпцию("ИспользоватьНоменклатуруДел");
КонецФункции
// Проверяет уникальность регистрационного номера
Функция РегистрационныйНомерУникален(Объект) Экспорт
УстановитьПривилегированныйРежим(Истина);
107
Нумератор = Нумерация.ПолучитьНумераторДокумента(Объект);
Если Не ЗначениеЗаполнено(Нумератор) Тогда // документ без номера
Если НРег(Объект.РегистрационныйНомер) = НСтр("ru = 'б\н'")
Или НРег(Объект.РегистрационныйНомер) = НСтр("ru = 'б/н'")
Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Нумератор) Тогда // автонумерация
Периодичность = Нумератор.Периодичность;
Иначе // ручная
нумерация
Периодичность = Перечисления.ПериодичностьНумераторов.Год;
КонецЕсли;
Если ТипЗнч(Объект.Ссылка) =
Тип("СправочникСсылка.ВходящиеДокументы") Тогда
ТекстЗапроса = "ВЫБРАТЬ Ссылка ИЗ
Справочник.ВходящиеДокументы КАК Справочник ";
ИначеЕсли ТипЗнч(Объект.Ссылка) =
Тип("СправочникСсылка.ИсходящиеДокументы") Тогда
ТекстЗапроса = "ВЫБРАТЬ Ссылка ИЗ
Справочник.ИсходящиеДокументы КАК Справочник ";
ИначеЕсли ТипЗнч(Объект.Ссылка) =
Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
ТекстЗапроса = "ВЫБРАТЬ Ссылка ИЗ
Справочник.ВнутренниеДокументы КАК Справочник ";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Если Нумератор.НезависимаяНумерацияПоСвязанномуДокументу Тогда
Запрос.Текст = Запрос.Текст +
108
" ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СвязиДокументов КАК
СвязиДокументов
| ПО СвязиДокументов.Документ = Справочник.Ссылка И
СвязиДокументов.ТипСвязи = &ТипСвязи ";
Запрос.УстановитьПараметр("ТипСвязи", Нумератор.ТипСвязи);
КонецЕсли;
Запрос.Текст = Запрос.Текст +
" ГДЕ
| РегистрационныйНомер = &РегистрационныйНомер
| И ДатаРегистрации МЕЖДУ &НачалоПериодаНумерации И
&КонецПериодаНумерации
| И Ссылка <> &Ссылка ";
Если ЗначениеЗаполнено(Нумератор) Тогда
НезависимаяНумерацияПоОрганизациям =
Нумератор.НезависимаяНумерацияПоОрганизациям;
Иначе // ручная нумерация
НезависимаяНумерацияПоОрганизациям = Истина;
КонецЕсли;
Если
ПолучитьФункциональнуюОпцию("ИспользоватьУчетПоОрганизациям") И
НезависимаяНумерацияПоОрганизациям Тогда
Запрос.Текст = Запрос.Текст + " И (Организация = &Организация) ";
Запрос.УстановитьПараметр("Организация", Объект.Организация);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ВестиУчетПоПроектам") И
Нумератор.НезависимаяНумерацияПоПроекту Тогда
Запрос.Текст = Запрос.Текст + " И (Проект = &Проект) ";
Запрос.УстановитьПараметр("Проект", Объект.Проект);
КонецЕсли;
109
Если
ПолучитьФункциональнуюОпцию("ИспользоватьВопросыДеятельности") И
Нумератор.НезависимаяНумерацияПоВопросуДеятельности Тогда
Запрос.Текст = Запрос.Текст + " И (ВопросДеятельности =
&ВопросДеятельности) ";
Запрос.УстановитьПараметр("ВопросДеятельности",
Объект.ВопросДеятельности);
КонецЕсли;
Если Нумератор.НезависимаяНумерацияПоПодразделению Тогда
Запрос.Текст = Запрос.Текст + " И (Подразделение =
&Подразделение) ";
Запрос.УстановитьПараметр("Подразделение",
Объект.Подразделение);
КонецЕсли;
Если Нумератор.НезависимаяНумерацияПоСвязанномуДокументу Тогда
СвязанныйДокумент =
СвязиДокументов.ПолучитьСвязанныйДокумент(Объект.Ссылка,
Нумератор.ТипСвязи);
Если ЗначениеЗаполнено(СвязанныйДокумент) Тогда
Запрос.Текст = Запрос.Текст + " И (СвязанныйДокумент =
&СвязанныйДокумент) ";
Запрос.УстановитьПараметр("СвязанныйДокумент",
СвязанныйДокумент);
КонецЕсли;
КонецЕсли;
Если ИспользоватьВидыДокументов(Объект.ВидДокумента) Тогда
Запрос.Текст = Запрос.Текст + " И (ВидДокумента =
&ВидДокумента) ";
Запрос.УстановитьПараметр("ВидДокумента",
Объект.ВидДокумента);
КонецЕсли;
Если Не ЗначениеЗаполнено(Нумератор) Тогда // ручная нумерация
110
Если
ДелопроизводствоКлиентСервер.ЭтоВнутреннийДокумент(Объект.Ссылка)
Тогда
ВестиУчетПоКонтрагентам =
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ВидДокумента,
"ВестиУчетПоКонтрагентам");
Если ВестиУчетПоКонтрагентам Тогда
Запрос.Текст = Запрос.Текст + " И (Контрагент =
&Контрагент) ";
Запрос.УстановитьПараметр("Контрагент",
Объект.Контрагент);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Запрос.УстановитьПараметр("РегистрационныйНомер",
Объект.РегистрационныйНомер);
Запрос.УстановитьПараметр("НачалоПериодаНумерации",
Нумерация.НачалоПериодаНумерации(Периодичность,
Объект.ДатаРегистрации));
Запрос.УстановитьПараметр("КонецПериодаНумерации",
Нумерация.КонецПериодаНумерации(Периодичность,
Объект.ДатаРегистрации));
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
Возврат Запрос.Выполнить().Пустой();
КонецФункции
//Модуль работы с файлами.
// Извлечь текст из файла и поместить в ХранилищеЗначения
Функция ИзвлечьТекстВХранилищеЗначения(ПолноеИмяФайла) Экспорт
Текст = "";
111
ИзвлекатьТекстыФайловНаСервере =
Константы.ИзвлекатьТекстыФайловНаСервере.Получить();
Если Не ИзвлекатьТекстыФайловНаСервере Тогда
ТипПлатформыСервера =
ОбщегоНазначенияДокументооборотПовтИсп.ТипПлатформыСервера();
Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ
ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда
Текст =
ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекст(ПолноеИмяФайла);
КонецЕсли;
КонецЕсли;
Если ПустаяСтрока(Текст) Тогда
Возврат Новый ХранилищеЗначения("");
КонецЕсли;
ХранилищеЗначения = Новый ХранилищеЗначения(Текст);
Возврат ХранилищеЗначения;
КонецФункции
// Разыменовать lnk файл
Функция РазыменоватьLnkФайл(ВыбранныйФайл) Экспорт
ТипПлатформыСервера =
ОбщегоНазначенияДокументооборотПовтИсп.ТипПлатформыСервера();
Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ
ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда
ShellApp = Новый COMОбъект("shell.application");
FolderObj = ShellApp.NameSpace(ВыбранныйФайл.Путь);
// полный (только) путь на lnk-файл
FolderObjItem = FolderObj.items().item(ВыбранныйФайл.Имя); //
только имя lnk-файла
Link = FolderObjItem.GetLink();
Возврат Новый Файл(Link.path);
КонецЕсли;
112
Возврат ВыбранныйФайл;
КонецФункции
// Рекурсивная функция импорта файлов с диска - принимает массив файлов
(или каталогов)
// - если файл, просто добавляет его, если каталог - создает группу и
рекурсивно вызывает саму себя
Процедура ИмпортФайлов(
Владелец,
Путь,
ФайлыАргумент,
Индикатор,
МассивИменФайловСОшибками,
МассивСтруктурВсехФайлов,
Комментарий,
ХранитьВерсии,
Рекурсивно,
КоличествоСуммарное,
Счетчик,
ИдентификаторФормы,
Знач ПсевдоФайловаяСистема,
ДобавленныеФайлы,
МассивВсехПапок,
РежимЗагрузки,
Пользователь,
ПараметрыРаспознавания,
Категории = Неопределено) Экспорт
Перем ПерваяПапкаСТакимЖеИменем;
Перем ДокГруппаСсылка;
МаксРазмерФайла =
ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла();
ЗапретЗагрузкиФайловПоРасширению =
ФайловыеФункции.ПолучитьЗапретЗагрузкиФайловПоРасширению();

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Agile-методология в управлении проектами на примере ООО «Ресурсный центр «Академия КлассИнфо»
Aвтoмaтизaция пpoцecca вeдeния инфopмaциoннoй бaзы o дoлжнocтяx и вaкaнcияx c укaзaниeм тpeбoвaний к уpoвню знaний и нaвыкoв кaндидaтoв для гpуппы кaдpoв вoйcкoвoй чacти 3474»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
Cовершенствование управления рентабельности предприятия (на примере гуипп «бендерская типография «полиграфист»)
Event - менеджмент: реализация проекта (на примере ООО "АГРОПАК")