#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция ФормаВыполненияЗадачи(Знач ЗадачаСсылка, Знач ТочкаМаршрутаСсылка) Экспорт
Если ТочкаМаршрутаСсылка = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.СогласоватьЛогистическиеУсловия Или
ТочкаМаршрутаСсылка = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.СогласоватьФинансовыеУсловия Или
ТочкаМаршрутаСсылка = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.СогласоватьЦеновыеУсловия Тогда
ИмяФормы = "БизнесПроцесс.СогласованиеЗакупки.Форма.ФормаЗадачиРецензента";
ИначеЕсли ТочкаМаршрутаСсылка = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.ОзнакомитьсяСРезультатами Тогда
ИмяФормы = "БизнесПроцесс.СогласованиеЗакупки.Форма.ФормаЗадачиОзнакомиться";
ИначеЕсли ТочкаМаршрутаСсылка = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.ПодвестиИтогиСогласования Тогда
ИмяФормы = "БизнесПроцесс.СогласованиеЗакупки.Форма.ФормаЗадачиПодвестиИтоги";
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ПараметрыФормы", Новый Структура("Ключ", ЗадачаСсылка));
Результат.Вставить("ИмяФормы", ИмяФормы);
Возврат Результат;
КонецФункции
Процедура ОбработкаВыполненияПоУмолчанию(Знач ЗадачаСсылка, БизнесПроцессСсылка, Знач ТочкаМаршрутаБизнесПроцесса) Экспорт
Если ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.СогласоватьЛогистическиеУсловия Или
ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.СогласоватьФинансовыеУсловия Или
ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.СогласоватьЦеновыеУсловия Или
ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.ПодвестиИтогиСогласования Тогда
Попытка
ЗаблокироватьДанныеДляРедактирования(БизнесПроцессСсылка);
Исключение
ТекстОшибки = НСтр("ru='При выполнении задачи не удалось заблокировать %Ссылка%. %ОписаниеОшибки%'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Ссылка%", БизнесПроцессСсылка);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ОписаниеОшибки%", КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение ТекстОшибки;
КонецПопытки;
УстановитьПривилегированныйРежим(Истина);
СогласованиеОбъект = БизнесПроцессСсылка.ПолучитьОбъект();
СогласованиеОбъект.ДобавитьРезультатСогласования(
ТочкаМаршрутаБизнесПроцесса,
Пользователи.ТекущийПользователь(),
Перечисления.РезультатыСогласования.Согласовано,
,
ТекущаяДатаСеанса());
Если ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.СогласованиеЗакупки.ТочкиМаршрута.ПодвестиИтогиСогласования Тогда
СогласованиеОбъект.РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано;
КонецЕсли;
СогласованиеОбъект.Записать();
УстановитьПривилегированныйРежим(Ложь);
РазблокироватьДанныеДляРедактирования(БизнесПроцессСсылка);
КонецЕсли;
КонецПроцедуры
Функция РезультатСогласованияПоТочкеМаршрута(Знач БизнесПроцесс, Знач ТочкаМаршрута) Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| СогласованиеЗакупкиРезультатыСогласования.РезультатСогласования КАК РезультатСогласования
|
|ИЗ
| БизнесПроцесс.СогласованиеЗакупки.РезультатыСогласования КАК СогласованиеЗакупкиРезультатыСогласования
|ГДЕ
| СогласованиеЗакупкиРезультатыСогласования.Ссылка = &Ссылка
| И СогласованиеЗакупкиРезультатыСогласования.ТочкаМаршрута = &ТочкаМаршрута
|");
Запрос.УстановитьПараметр("Ссылка", БизнесПроцесс);
Запрос.УстановитьПараметр("ТочкаМаршрута", ТочкаМаршрута);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.РезультатСогласования;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция НомерПоследнейВерсииПредмета(Знач БизнесПроцесс) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос("
|ВЫБРАТЬ ПЕРВЫЕ 1
| ВерсииОбъектов.НомерВерсии КАК НомерВерсии
|ИЗ
| РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
|ГДЕ
| ВерсииОбъектов.Объект = ВЫРАЗИТЬ (&БизнесПроцесс КАК БизнесПроцесс.СогласованиеЗакупки).Предмет
|
|УПОРЯДОЧИТЬ ПО
| НомерВерсии УБЫВ
|
|");
Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
НомерВерсии = Выборка.НомерВерсии;
Иначе
НомерВерсии = 0;
КонецЕсли;
Возврат НомерВерсии;
КонецФункции
Функция ПоследняяВерсияПредметаОтличаетсяОтСогласованных(Знач БизнесПроцесс) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ЕСТЬNULL(МАКСИМУМ(РезультатыСогласования.НомерВерсии),0) КАК НомерСогласованнойВерсии,
| ЕСТЬNULL(МАКСИМУМ(ВерсииОбъектов.НомерВерсии),0) КАК НомерПоследнейВерсии
|ИЗ
| БизнесПроцесс.СогласованиеЗакупки.РезультатыСогласования КАК РезультатыСогласования
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
|ПО
| ВерсииОбъектов.Объект = РезультатыСогласования.Ссылка.Предмет
|ГДЕ
| РезультатыСогласования.Ссылка = &БизнесПроцесс
|");
Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если Выборка.НомерСогласованнойВерсии <> Выборка.НомерПоследнейВерсии Тогда
ЕстьОтличия = Истина;
Иначе
ЕстьОтличия = Ложь;
КонецЕсли;
Иначе
ЕстьОтличия = Ложь;
КонецЕсли;
Возврат ЕстьОтличия;
КонецФункции
Функция ИспользуетсяВерсионированиеПредмета(Знач ТипПредмета) Экспорт
УстановитьПривилегированныйРежим(Истина);
ИспользоватьВерсионированиеОбъектов = ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов");
Если Не ИспользоватьВерсионированиеОбъектов Тогда
Возврат Ложь;
КонецЕсли;
ПараметрыОпции = Новый Структура();
ПараметрыОпции.Вставить("ТипОбъекта", ТипПредмета);
ИспользоватьВерсионированиеОбъекта = ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъекта", ПараметрыОпции);
Возврат ИспользоватьВерсионированиеОбъекта;
КонецФункции
Процедура ПриПеренаправленииЗадачи(ЗадачаСсылка, НоваяЗадачаСсылка) Экспорт
ЗадачаОбъект = НоваяЗадачаСсылка.ПолучитьОбъект();
ЗаблокироватьДанныеДляРедактирования(НоваяЗадачаСсылка);
ЗадачаОбъект.РезультатВыполнения = РезультатВыполненияПриПеренаправлении(ЗадачаСсылка) +
ЗадачаОбъект.РезультатВыполнения;
ЗадачаОбъект.Записать();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ОбновлениеИнформационнойБазы
Процедура ИнициализироватьРолиИсполнителей() Экспорт
РольОбъект = Справочники.РолиИсполнителей.СогласующийЦеновыеУсловияЗакупок.ПолучитьОбъект();
РольОбъект.ИспользуетсяБезОбъектовАдресации = Истина;
РольОбъект.Записать();
РольОбъект = Справочники.РолиИсполнителей.СогласующийЛогистическиеУсловияЗакупок.ПолучитьОбъект();
РольОбъект.ИспользуетсяБезОбъектовАдресации = Истина;
РольОбъект.Записать();
РольОбъект = Справочники.РолиИсполнителей.СогласующийФинансовыеУсловияЗакупок.ПолучитьОбъект();
РольОбъект.ИспользуетсяБезОбъектовАдресации = Истина;
РольОбъект.Записать();
РольОбъект = Справочники.РолиИсполнителей.СогласующийКоммерческиеУсловияЗакупок.ПолучитьОбъект();
РольОбъект.ИспользуетсяБезОбъектовАдресации = Истина;
РольОбъект.Записать();
КонецПроцедуры
#КонецОбласти
#Область Прочее
Функция РезультатВыполненияПриПеренаправлении(Знач ЗадачаСсылка)
СтрокаФормат = НСтр("ru = '%1, %2 перенаправил(а) задачу:'");
СтрокаФормат = СтрокаФормат + Символы.ПС + "%3" + Символы.ПС;
РеквизитыЗадачи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка, "ДатаИсполнения, Исполнитель, РезультатВыполнения");
Комментарий = СокрЛП(РеквизитыЗадачи.РезультатВыполнения);
Комментарий = ?(ПустаяСтрока(Комментарий), "", Комментарий + Символы.ПС);
Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат,
РеквизитыЗадачи.ДатаИсполнения,
РеквизитыЗадачи.Исполнитель,
Комментарий);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КомандаОтчет = Отчеты.РезультатыСогласованияЗакупки.ДобавитьКомандуОтчета(КомандыОтчетов);
Если КомандаОтчет <> Неопределено Тогда
КомандаОтчет.ВидимостьВФормах = "ФормаБизнесПроцесса,ФормаСписка";
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли