Никто не сталкивался с такой проблемой: в конфигураторе есть защищённый модуль, нет возможности даже просмотреть код этого модуля (пишет, что исходный текст модуля отсутствует).
Как сделать его открытым?
Мне это нужно для рарусовской программы 1c crm. Общий модуль :CRM_ЗащищенныеФункции.
Очень нужно его открыть, потому что без этого никак не могу справиться с синхронизацией в outlook.
n3ur0
26.11.2010, 12:04
Никто не сталкивался с такой проблемой: в конфигураторе есть защищённый модуль, нет возможности даже просмотреть код этого модуля (пишет, что исходный текст модуля отсутствует).
Как сделать его открытым?
Мне это нужно для рарусовской программы 1c crm. Общий модуль :CRM_ЗащищенныеФункции.
Очень нужно его открыть, потому что без этого никак не могу справиться с синхронизацией в outlook.
Спасибо.....
Так и думала.....но надежда всё же была...
с нуля то долго писать эти процедуры обмена с outlook.
Нужно знать как данные хранятся в 1с и outlook....
плохи дела..
Sintson
30.11.2010, 11:51
Спасибо.....
Так и думала.....но надежда всё же была...
с нуля то долго писать эти процедуры обмена с outlook.
Нужно знать как данные хранятся в 1с и outlook....
плохи дела..
http://www.kolobok.us/smiles/light_skin/blush.gif
Есть, знаете-ли способы :)
koloboc74
02.12.2010, 18:36
кидай ссылку постараюсь открою тебе код
ByStep
05.12.2010, 23:13
// ОбщийМодуль.CRM_ЗащищенныеФ� �нкции.Модуль.txt
Функция CRM_ЗаменитьШаблонВOpenOfficeНаТ екст(глКомпонента, Параметры, ТегиКолонок) Экспорт
Возврат глКомпонента.ЗаменитьШабл� �нВOpenOfficeНаТекст(Параметры, ТегиКолонок);
КонецФункции
Функция CRM_ЗаменитьШаблонВВордеНаТ екст(глКомпонента, Ворд, Знач ШаблонВВорде, Знач ТекстЗамены, Везде = Истина) Экспорт
Перем Результат;
Попытка
Если Везде Тогда
Везде = 1;
КонецЕсли;
Результат = глКомпонента.ЗаменитьШабл� �нВВордеНаТекст(Ворд, ШаблонВВорде, Строка(ТекстЗамены), Везде);
Исключение
КонецПопытки;
Если ЗначениеЗаполнено(Картинк� �.ПолноеИмя) Тогда
мФайл = Новый Файл(Картинка.ПолноеИмя);
КонецЕсли;
Если мФайл <> Неопределено И мФайл.Существует() Тогда
КартинкаВорд = Ворд.Selection.InlineShapes.AddPicture(мФа� �л.ПолноеИмя, Ложь, Истина);
Если ЗначениеЗаполнено(Картинк� �.Высота) Тогда
КартинкаВорд.Height = Картинка.Высота * 2.833;
КонецЕсли;
Если ЗначениеЗаполнено(Картинк� �.Ширина) Тогда
КартинкаВорд.Width = Картинка.Ширина * 2.833;
КонецЕсли;
КонецЕсли;
Функция CRM_ВычислитьЗначениеУслови я(Параметры, Условие, Значение = "Значение") Экспорт
мОписаниеТиповОбъектМетад анных = Новый ОписаниеТипов("ОбъектМетаданных");
мОписаниеТипов = Новый ОписаниеТипов;
Если ТипЗнч(Условие[Значение]) <> Тип("Строка") Тогда
Возврат Условие[Значение];
КонецЕсли;
Если Условие.Имя = "ВидДокумента" И Условие.ТипЗначения = мОписаниеТиповОбъектМетад анных Тогда
Если Условие.ЗначениеС = мОписаниеТипов Или Условие.ЗначениеС = Неопределено Тогда
Возврат Метаданные.Документы[Условие.ЗначениеПО];
Иначе
Возврат Условие.ЗначениеС;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(Параметр.Значение) = Тип("Строка") Тогда
Возврат Вычислить(Параметр.Значени е);
Иначе
Возврат Параметр.Значение;
КонецЕсли;
Иначе
Возврат Условие[Значение];
КонецЕсли;
КонецФункции
Функция CRM_ПолучитьСледующиеТочкиМ аршрута(глКомпонента, Маршрут = Неопределено, Знач ТочкаМаршрута, Знач БизнесПроцесс, Знач Вариант = Неопределено, ИсходнаяТочкаМаршрута = Неопределено) Экспорт
Возврат глКомпонента.ВыбратьСледу� �щиеТочкиМаршрута(глКомпон ента, Маршрут, ТочкаМаршрута, БизнесПроцесс, Вариант, ИсходнаяТочкаМаршрута);
КонецФункции
Процедура CRM_ПолучитьМаршрутБизнесПр оцесса(БизнесПроцесс, Маршрут = Неопределено, ТочкаМаршрута = Неопределено) Экспорт
Если Маршрут = Неопределено Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
Маршрут = Запрос.Выполнить().Выгрузит ь();
Иначе
СтрокаМаршрута = Маршрут.Найти(ТочкаМаршрут а, "ТочкаМаршрута");
Если ЗначениеЗаполнено(СтрокаМ� �ршрута.Шаблон) Тогда
Запрос = Новый Запрос;
Результат = CRM_ПолучитьСледующиеТочкиМ аршрута(глКомпонента, , ТочкаМаршрута, БизнесПроцесс, ЗначениеВыбораВарианта);
МассивТочекМаршрута = Новый Массив;
Если ТипЗнч(Результат) = Тип("Массив") Тогда
МассивТочекМаршрута = Результат;
ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда
МассивТочекМаршрута.Добав� �ть(Результат);
Иначе
Возврат тбСледующиеИсполнители;
КонецЕсли;
Для каждого СтруктураВозврата Из МассивТочекМаршрута Цикл
Если регИсполнителиТекущейТочк и.Количество() = 0 Тогда
Если ЗначениеЗаполнено(_БизнесП роцесс.Ссылка.ВедущаяЗадач а) Тогда
регИсполнителиТекущейТочк и.Отбор.БизнесПроцесс.Уста� �овить(_БизнесПроцесс.Ссылк а.ВедущаяЗадача.БизнесПроц есс);
регИсполнителиТекущейТочк и.Отбор.ТочкаМаршрута.Уста� �овить(_Точка);
регИсполнителиТекущейТочк и.Прочитать();
КонецЕсли;
КонецЕсли;
Если регИсполнителиТекущейТочк и.Количество() > 0 Тогда
Если СтрокаМаршрут[0].Пометка Тогда
Если _Точка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Тогда
СоответствиеИсполнители = Новый Соответствие;
Для каждого Строка Из регИсполнителиТекущейТочк и Цикл
Если ТипЗнч(Строка.Исполнитель) = Тип("Строка") Тогда
Если Найти(Строка.РеквизитБП, ".ТабличнаяЧасть.") > 0 Тогда
Для каждого ТЧ Из БизнесПроцесс.Метаданные(). ТабличныеЧасти Цикл
Если Найти(СокрЛП(Строка.Реквиз� �тБП), ТЧ.Имя) > 0 Тогда
Для каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.ПолноеИмя() = Строка.РеквизитБП Тогда
Если БизнесПроцесс[ТЧ.Имя].Количество() > 0 Тогда
Для каждого Строка Из БизнесПроцесс[ТЧ.Имя] Цикл
Исполнитель = CRM_ПолучитьИсполнителя(глК� �мпонента, Строка[Реквизит.Имя], _БизнесПроцесс, _Точка);
СоответствиеИсполнители.В� �тавить(Исполнитель, Исполнитель);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Иначе
ИмяРеквизита = СтрЗаменить(СокрЛП(Строка.� �еквизитБП), "БизнесПроцесс." + БизнесПроцесс.Метаданные(). Имя + ".Реквизит.", "");
Исполнитель = CRM_ПолучитьИсполнителя(глК� �мпонента, БизнесПроцесс[ИмяРеквизита], _БизнесПроцесс, _Точка);
СоответствиеИсполнители.В� �тавить(Исполнитель, Исполнитель);
КонецЕсли;
Иначе
Исполнитель = CRM_ПолучитьИсполнителя(глК� �мпонента, Строка.Исполнитель, _БизнесПроцесс, _Точка);
СоответствиеИсполнители.В� �тавить(Исполнитель, Исполнитель);
КонецЕсли;
КонецЦикла;
Для каждого ЭлементСоответствия Из СоответствиеИсполнители Цикл
Исполнитель = ЭлементСоответствия.Значе� �ие;
ДобавитьЗадачу(_БизнесПроц есс, _Точка, ФормируемыеЗадачи, ГрафикОрганизации, ДанныеГрафика, Исполнитель);
КонецЦикла;
ИначеЕсли _Точка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Тогда
НоваяЗадача.Результат = "Создана и выполнена автоматически: пропущена точка """ + _Точка + """ по шаблону """ + _Шаблон + """";
ФормируемыеЗадачи.Добавит� �(НоваяЗадача);
Иначе
Для каждого СтрокаМаршрута Из регМаршрутБизнесПроцесса Цикл
СтрокаМаршрута.ЭтапЗаверш� �н = Истина;
КонецЦикла;
регМаршрутБизнесПроцесса.� �аписать();
КонецЕсли;
Иначе
Если _Точка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс И СтрокаМаршрут[0].Пометка Тогда
СтандартнаяОбработка = Истина;
ДобавитьЗадачу(_БизнесПроц есс, _Точка, ФормируемыеЗадачи, ГрафикОрганизации, ДанныеГрафика, Исполнитель);
Возврат;
ИначеЕсли _Точка.Вид <> ВидТочкиМаршрутаБизнесПро цесса.Действие И СтрокаМаршрут[0].Пометка Тогда
СтандартнаяОбработка = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура CRM_ПриСозданииЗадач(глКомп� �нента, БизнесПроцесс, ТочкаМаршрутаБизнесПроцес са, ФормируемыеЗадачи, ГрафикРаботыОрганизации, ДанныеГрафика, Отказ) Экспорт
Если БизнесПроцесс.Завершен Тогда
Отказ = Истина;
КонецЕсли;
Если ФормируемыеЗадачи.Количес� �во() > 0 Тогда
СоздатьЗаписьРегистраБизн есПроцессов(БизнесПроцесс, ТочкаМаршрутаБизнесПроцес са, ГрафикРаботыОрганизации, ДанныеГрафика);
КонецЕсли;
КонецПроцедуры
Процедура CRM_ПриЗавершении(БизнесПро� �есс, ТочкаМаршрутаБизнесПроцес са, ГрафикРаботыОрганизации, ДанныеГрафика, Отказ) Экспорт
Если БизнесПроцесс.Завершен Тогда
Возврат;
КонецЕсли;
Попытка
Если ВРег(ТочкаМаршрутаБизнесП� �оцесса.Имя) = "ИСТИНА" Тогда
БизнесПроцесс.ВариантЗаве� �шения = Перечисления.CRM_ВариантыЗа� �ершения.Успешно;
ИначеЕсли ВРег(ТочкаМаршрутаБизнесП� �оцесса.Имя) = "ЛОЖЬ" Тогда
БизнесПроцесс.ВариантЗаве� �шения = Перечисления.CRM_ВариантыЗа� �ершения.Неудачно;
Иначе
ТаблицаРезультатов = Запрос.Выполнить().Выгрузит ь();
Если ТаблицаРезультатов.Количе� �тво() = 0 Тогда
Если ЗаписьМаршрута.Выбран() И Не ЗаписьМаршрута.Пометка Тогда
Результат = ТочкаВыбораВарианта.Вариа� �ты[ЗаписьМаршрута.ВариантВып� �лнения];
Иначе
Результат = ТочкаВыбораВарианта.Вариа� �ты[0];
КонецЕсли;
ИначеЕсли ЗаписьМаршрута.Выбран() И Не ЗаписьМаршрута.Пометка Тогда
Результат = ТочкаВыбораВарианта.Вариа� �ты[ЗаписьМаршрута.ВариантВып� �лнения];
Иначе
Результат = ТочкаВыбораВарианта.Вариа� �ты.Получить(ТаблицаРезуль� �атов[0].ВариантВыполнения - 1);
КонецЕсли;
Результат = Истина;
Если ЗаписьМаршрута.Выбран() И Не ЗаписьМаршрута.Пометка Тогда
Результат = ?(ЗаписьМаршрута.ВариантВы� �олнения = 0, Истина, Ложь);
Иначе
Для каждого Точка Из МассивПроверяемыхТочек Цикл
Если Не ПостроительЗапроса.Резуль� �ат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Ссылка.Стартован Тогда
ЕстьСтартованныеБП = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьСтартованныеБП = Истина Тогда
ТекстВопроса = "Уже есть стартованные бизнес процессы, введенные на основании выбранного документа. Продолжить?";
Иначе
ТекстВопроса = "Уже есть бизнес процессы, введенные на основании выбранного документа. Продолжить?";
КонецЕсли;
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Возврат Ответ = КодВозвратаДиалога.Да;
Иначе
Возврат Истина;
КонецЕсли;
СтрокаШаблона = НаборМаршрут.Выгрузить();
Если СтрокаШаблона[0].Пометка Тогда
Попытка
Выполнить(СтрокаШаблона[0].ОбработкаДействие.Действи е);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Если ЗначениеЗаполнено(Объект.Ш аблон) Тогда
ПВХШаблонБП = Объект.Шаблон;
Иначе
ПВХШаблонБП = ПланыВидовХарактеристик.CRM _ШаблоныБизнесПроцессов.Со здатьЭлемент();
ПВХШаблонБП.ТипЗначения = Новый ОписаниеТипов("БизнесПроцессСсылка." + Объект.Метаданные().Имя);
ПВХШаблонБП.ЗаполнитьМарш� �ут();
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.В едущаяЗадача) Тогда
Для каждого Строка Из ПВХШаблонБП.Исполнители Цикл
НоваяСтрока = Объект.тбИсполнители.Добав ить();
ЗаполнитьЗначенияСвойств(� �оваяСтрока, Строка);
КонецЦикла;
Иначе
НаборИсполнителейВедущего БП = РегистрыСведений.CRM_Исполн� �телиТочекМаршрута.Создать НаборЗаписей();
ПровТочка = "";
Для каждого Строка Из ПВХШаблонБП.Исполнители Цикл
Если ПровТочка <> Строка.ТочкаМаршрута Тогда
НаборИсполнителейВедущего БП.Отбор.БизнесПроцесс.Уст� �новить(Объект.ВедущаяЗада� �а.БизнесПроцесс);
НаборИсполнителейВедущего БП.Отбор.ТочкаМаршрута.Уст� �новить(Строка.ТочкаМаршру� �а);
НаборИсполнителейВедущего БП.Прочитать();
Если НаборИсполнителейВедущего БП.Количество() > 0 Тогда
Для каждого СтрокаНабора Из НаборИсполнителейВедущего БП Цикл
НоваяСтрока = Объект.тбИсполнители.Добав ить();
ЗаполнитьЗначенияСвойств(� �оваяСтрока, СтрокаНабора, , "БизнесПроцесс");
КонецЦикла;
ПровТочка = Строка.ТочкаМаршрута;
НаборИсполнителейВедущего БП.Отбор.Сбросить();
Продолжить;
Иначе
НаборИсполнителейВедущего БП.Отбор.Сбросить();
КонецЕсли;
Для каждого Строка Из ПВХШаблонБП.Маршрут Цикл
НоваяСтрока = Объект.тбМаршрут.Добавить() ;
ЗаполнитьЗначенияСвойств(� �оваяСтрока, Строка);
НоваяСтрока.Порядок = Строка.НомерСтроки;
Если Не (Строка.ТочкаМаршрута.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс) Тогда
Продолжить;
КонецЕсли;
Для каждого СтрокаВложенногоШаблона Из Строка.Шаблон.Маршрут Цикл
Если СтрокаВложенногоШаблона.П� �метка Тогда
ИсполнителиВложенногоБП = Строка.Шаблон.Исполнители.� �айтиСтроки(Новый Структура("ТочкаМаршрута", СтрокаВложенногоШаблона.Т� �чкаМаршрута));
Если ИсполнителиВложенногоБП.К� �личество() > 0 Тогда
Для каждого СтрокаИсполнителей Из ИсполнителиВложенногоБП Цикл
СтрокаНабораИсполнителей = Объект.тбИсполнители.Добав ить();
ЗаполнитьЗначенияСвойств(� �трокаНабораИсполнителей, СтрокаИсполнителей);
КонецЦикла;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура CRM_СохранитьМаршрутИсполни телей(Объект) Экспорт
Перем регМаршрут, регИсполнители;
Если ТипЗнч(Объект.тбМаршрут) = Тип("ТаблицаЗначений") Тогда
ИначеЕсли Объект.тбМаршрут <> Неопределено И ТипЗнч(Объект.тбМаршрут) <> Тип("ТаблицаЗначений") Тогда
Если Объект.тбМаршрут.Модифицир ованность() Тогда
Объект.тбМаршрут.Записать() ;
КонецЕсли;
Если Объект.тбИсполнители.Модиф ицированность() Тогда
Объект.тбИсполнители.Запис ать();
КонецЕсли;
КонецЕсли;
Если Не (БизнесПроцесс = Неопределено) Тогда
Если БизнесПроцесс.ДатаАвтоСта� �та <> '00010101000000' И НачалоДня(БизнесПроцесс.Да таАвтоСтарта) <> НачалоДня(БизнесПроцесс.Да та) Тогда
ДатаБП = БизнесПроцесс.ДатаАвтоСта� �та;
ПланируемаяДатаЗавершения = БизнесПроцесс.ДатаАвтоСта� �та;
ИначеЕсли БизнесПроцесс.ДатаАвтоСта� �та <> '00010101000000' И НачалоДня(БизнесПроцесс.Да таАвтоСтарта) = НачалоДня(БизнесПроцесс.Да та) Или БизнесПроцесс.ДатаАвтоСта� �та <> '00010101000000' Тогда
Если ДлительностьТочек = Неопределено Тогда
ДлительностьТочек = Новый ДеревоЗначений;
ДлительностьТочек.Колонки. Добавить("ТочкаМаршрута");
ДлительностьТочек.Колонки. Добавить("ДлительностьТочки");
ДлительностьТочек.Колонки. Добавить("ДлительностьОтложено");
ДлительностьТочек.Колонки. Добавить("ВходящаяДата");
ДлительностьТочек.Колонки. Добавить("ДатаНачала");
ДлительностьТочек.Колонки. Добавить("ОжидаемаяДатаЗавершения");
КонецЕсли;
Конец = Ложь;
ВсегоДлительность = 0;
ТабПройденыхТочек = Новый ТаблицаЗначений;
ТабПройденыхТочек.Колонки. Добавить("Точка");
Если Не ЭтоВложенный Тогда
ТекущаяСтрокаДереваТочек = ДлительностьТочек.Строки.Д обавить();
ТекущаяСтрокаДереваТочек.� �очкаМаршрута = "Бизнес-процесс";
ТекущаяСтрокаДереваТочек.� �атаНачала = ДатаБП;
ТекущаяСтрокаДереваТочек.� �ходящаяДата = ДатаБП;
Иначе
ТекущаяСтрокаДереваТочек = ДлительностьТочек;
КонецЕсли;
Пока Не Конец Цикл
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Или ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Тогда
ПровТочка = ТабПройденыхТочек.Найти(Ис ходящаяТочка, "Точка");
Если ПровТочка = Неопределено Тогда
НоваяСтрока = ТабПройденыхТочек.Добавит� �();
НоваяСтрока.Точка = ИсходящаяТочка;
Иначе
Сообщить("Ошибка расчета длительности бизнес-процесса! Длительность равна '0'", СтатусСообщения.Важное);
Конец = Истина;
ВсегоДлительность = 0;
Продолжить;
КонецЕсли;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Тогда
СтрокаМаршрута = Шаблон.Найти(ИсходящаяТочк а, "ТочкаМаршрута");
Если СтрокаМаршрута.Пометка Тогда
Если Не ЗначениеЗаполнено(Текущая� �трокаДереваТочек.ДатаНача ла) Тогда
ТекущаяСтрокаДереваТочек.� �атаНачала = СтруктураДат.Дата;
ТекущаяСтрокаДереваТочек.� �ходящаяДата = СтруктураДат.Дата;
КонецЕсли;
Иначе
ВариантВыполнения = СтрокаМаршрута.ВариантВып� �лнения;
КонецЕсли;
ИсходящаяТочка = ИсходящаяТочка.ПолучитьИс� �одящуюТочку();
Продолжить;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Тогда
СтрокаМаршрута = Шаблон.Найти(ИсходящаяТочк а, "ТочкаМаршрута");
Если СтрокаМаршрута.Пометка Тогда
Если ТаблицаТочек[0].ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Условие Тогда
ИсходящаяТочка = ТаблицаТочек[0].ИсходящаяТочка.ПолучитьИс ходящуюТочку(?(ТаблицаТоче� �[0].ВариантИсходящейТочки = 0, Истина, Ложь));
Продолжить;
ИначеЕсли ТаблицаТочек[0].ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВыборВарианта Тогда
ИсходящаяТочка = ТаблицаТочек[0].ИсходящаяТочка.ПолучитьИс ходящуюТочку(ТаблицаТочек[0].ИсходящаяТочка.Варианты[ТаблицаТочек[0].ВариантИсходящейТочки]);
Продолжить;
Иначе
ИсходящаяТочка = ТаблицаТочек[0].ИсходящаяТочка.ПолучитьИс ходящуюТочку();
Продолжить;
КонецЕсли;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Слияние Тогда
ИсходящаяТочка = ИсходящаяТочка.ПолучитьИс� �одящуюТочку();
Продолжить;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Обработка Тогда
ИсходящаяТочка = ИсходящаяТочка.ПолучитьИс� �одящуюТочку();
Продолжить;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Завершение Тогда
Конец = Истина;
Продолжить;
КонецЕсли;
КонецЦикла;
Если Не ЭтоВложенный Тогда
ТекущаяСтрокаДереваТочек.� �лительностьТочки = ВсегоДлительность;
ТекущаяСтрокаДереваТочек.� �жидаемаяДатаЗавершения = ПланируемаяДатаЗавершения ;
КонецЕсли;
Для Индекс = 0 По ИсходящаяТочка.ВГраница() Цикл
ПланируемаяДатаЗавершения Ветки = ДатаСтартаРзаделения;
ДлительностьВетки = 0;
ТочкаМассива = ИсходящаяТочка[Индекс];
Если Не ЗначениеЗаполнено(СтрокаВ� �тки.ДатаНачала) Тогда
СтрокаВетки.ДатаНачала = СтруктураДат.Дата;
СтрокаВетки.ВходящаяДата = СтруктураДат.ВходящаяДата;
КонецЕсли;
Если Не ЗначениеЗаполнено(НоваяСт� �ока.ВходящаяДата) Тогда
НоваяСтрока.ВходящаяДата = СтруктураДат.ВходящаяДата;
НоваяСтрока.ДлительностьО� �ложено = ОтложеноНа;
НоваяСтрока.ДатаНачала = СтруктураДат.Дата;
КонецЕсли;
Иначе
ВариантВыполнения = СтрокаМаршрута.ВариантВып� �лнения;
КонецЕсли;
ТочкаМассива = ТочкаМассива.ПолучитьИсхо� �ящуюТочку();
Продолжить;
КонецЕсли;
Если ТочкаМассива.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Тогда
СтрокаМаршрута = Шаблон.Найти(ТочкаМассива, "ТочкаМаршрута");
Если СтрокаМаршрута.Пометка Тогда
ПостроительЗапроса.Выполн� �ть();
Выборка = ПостроительЗапроса.Резуль� �ат.Выбрать();
Пока Выборка.Следующий() Цикл
Исполнитель = Выборка.Исполнитель;
КонецЦикла;
Если Не ЗначениеЗаполнено(Исполни� �ель) Или Исполнитель = Перечисления.CRM_ВидыИсполн� �телейЗадач.ИсполнительПре дыдущейЗадачи Тогда
Исполнитель = ПараметрыСеанса.ТекущийПо� �ьзователь;
КонецЕсли;
Возврат Исполнитель;
Иначе
Возврат Исполнитель;
КонецЕсли;
Для каждого СтрокаМаршрута Из ШаблонВложенного.Маршрут Цикл
Исполнители.Отбор.Сбросить ();
Исполнители.Отбор.БизнесПр оцесс.Установить(БизнесПро цесс);
Исполнители.Отбор.ТочкаМар шрута.Установить(СтрокаМар шрута.ТочкаМаршрута);
Исполнители.Прочитать();
Если Исполнители.Количество() > 0 Тогда
ИсполнителиВложенногоБП = ШаблонВложенного.Исполнит� �ли.НайтиСтроки(Новый Структура("ТочкаМаршрута", ТочкаМаршрута));
Если ИсполнителиВложенногоБП.К� �личество() > 0 Тогда
Для каждого СтрокаИсполнителей Из ИсполнителиВложенногоБП Цикл
СтрокаНабораИсполнителей = Исполнители.Добавить();
ЗаполнитьЗначенияСвойств(� �трокаНабораИсполнителей, СтрокаИсполнителей);
СтрокаНабораИсполнителей.� �изнесПроцесс = БизнесПроцесс;
КонецЦикла;
Исполнители.Записать();
Исполнители.Отбор.ТочкаМар шрута.Установить(ТочкаМарш рута);
Исполнители.Отбор.Исполнит ель.Использование = Ложь;
Исполнители.Прочитать();
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Исполнители.Количество() = 0 Тогда
Если ЗначениеЗаполнено(БизнесП� �оцесс.ВедущаяЗадача) Тогда
Исполнители.Отбор.БизнесПр оцесс.Установить(БизнесПро цесс.ВедущаяЗадача.БизнесП роцесс);
Исполнители.Отбор.ТочкаМар шрута.Установить(ТочкаМарш рута);
Исполнители.Прочитать();
КонецЕсли;
КонецЕсли;
Если Исполнители.Количество() = 0 Тогда
Если ЗначениеЗаполнено(БизнесП� �оцесс.ВедущаяЗадача) Тогда
Исполнители.Отбор.БизнесПр оцесс.Установить(БизнесПро цесс.ВедущаяЗадача.БизнесП роцесс);
Исполнители.Отбор.ТочкаМар шрута.Установить(БизнесПро цесс.ВедущаяЗадача.ТочкаМа ршрута);
Исполнители.Прочитать();
КонецЕсли;
КонецЕсли;
СтруктураВозврата = Новый Структура("БизнесПроцесс, ТочкаМаршрута, Исполнитель, РеквизитБП");
Если Исполнители.Количество() > 1 Или ТочкаМаршрута.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие И ТочкаМаршрута.Групповая Тогда
СписокИсполнителей = Новый СписокЗначений;
Для каждого Строка Из Исполнители Цикл
Если ТипЗнч(Строка.Исполнитель) = Тип("Строка") Тогда
СписокИсполнителей.Добави� �ь(Строка.РеквизитБП, Строка.Исполнитель);
Иначе
ИначеЕсли Исполнители.Количество() = 1 Тогда
Если ТипЗнч(Исполнители[0].Исполнитель) = Тип("Строка") Тогда
СтруктураВозврата.Исполни� �ель = Исполнители[0].Исполнитель;
СтруктураВозврата.Реквизи� �БП = Исполнители[0].РеквизитБП;
Иначе
_Итерация = CRM_ПолучитьНомерАктивнойИт ерации(БизнесПроцесс, ТочкаМаршрута);
Для каждого Запись Из регМаршрутБизнесПроцесса Цикл
Запись.Итерация = _Итерация + 1;
КонецЦикла;
регМаршрутБизнесПроцесса.� �аписать();
КонецПроцедуры
Функция ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочка, НомерРазделения, НомерВетки = 0, ТекущаяСтрокаДерева = Неопределено)
Перем НоваяСтрока;
Конец = Ложь;
Пока Не Конец Цикл
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Или ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Или ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Обработка Тогда
ПровСтрока = ТаблицаПройденныхТочек.На� �ти(ИсходящаяТочка, "Точка");
Если Не (ПровСтрока = Неопределено) Тогда
Конец = Истина;
Продолжить;
Иначе
НоваяСтрокаТЗ = ТаблицаПройденныхТочек.До� �авить();
НоваяСтрокаТЗ.Точка = ИсходящаяТочка;
КонецЕсли;
Если Не (ТекущаяСтрокаДерева = Неопределено) И (ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Или ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс) Тогда
ИначеЕсли ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВыборВарианта Тогда
ИсходящаяДляРазделения = Неопределено;
Для Ном = 0 По ИсходящаяТочка.Варианты.Ко личество() - 1 Цикл
ИсходящаяТочкаВарианта = ИсходящаяТочка.ПолучитьИс� �одящуюТочку(ИсходящаяТочк а.Варианты[Ном]);
Если ТекущаяСтрокаДерева = Неопределено Тогда
ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаВарианта, НомерРазделения);
Иначе
Исходящая = ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаВарианта, НомерРазделения, НомерВетки, ТекущаяСтрокаДерева);
Если Не (Исходящая = Неопределено) Тогда
ИсходящаяДляРазделения = Исходящая;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТекущаяСтрокаДерева = Неопределено Тогда
Конец = Истина;
Продолжить;
Иначе
Возврат ИсходящаяДляРазделения;
КонецЕсли;
ИначеЕсли ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Условие Тогда
ИсходящаяДляРазделения = Неопределено;
ИсходящаяТочкаУсловия = ИсходящаяТочка.ПолучитьИс� �одящуюТочку(Истина);
Если ТекущаяСтрокаДерева = Неопределено Тогда
ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаУсловия, НомерРазделения);
Иначе
Исходящая = ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаУсловия, НомерРазделения, НомерВетки, ТекущаяСтрокаДерева);
Если Не (Исходящая = Неопределено) Тогда
ИсходящаяДляРазделения = Исходящая;
КонецЕсли;
КонецЕсли;
ИсходящаяТочкаУсловия = ИсходящаяТочка.ПолучитьИс� �одящуюТочку(Ложь);
Если ТекущаяСтрокаДерева = Неопределено Тогда
ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаУсловия, НомерРазделения);
Иначе
Исходящая = ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаУсловия, НомерРазделения, НомерВетки, ТекущаяСтрокаДерева);
Если Не (Исходящая = Неопределено) Тогда
ИсходящаяДляРазделения = Исходящая;
КонецЕсли;
КонецЕсли;
Если ТекущаяСтрокаДерева = Неопределено Тогда
Конец = Истина;
Продолжить;
Иначе
Возврат ИсходящаяДляРазделения;
КонецЕсли;
ИначеЕсли ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Разделение Тогда
Для Индекс = 0 По МассивИсходящихТочек.ВГра� �ица() Цикл
Если ТекущаяСтрокаДерева = Неопределено Тогда
СтрокаДерева = ДеревоТочекПоМакету;
Иначе
СтрокаДерева = НоваяСтрока;
КонецЕсли;
Если ЗначениеЗаполнено(Картинк� �.ПолноеИмя) Тогда
мФайл = Новый Файл(Картинка.ПолноеИмя);
КонецЕсли;
Если мФайл <> Неопределено И мФайл.Существует() Тогда
КартинкаВорд = Ворд.Selection.InlineShapes.AddPicture(мФа� �л.ПолноеИмя, Ложь, Истина);
Если ЗначениеЗаполнено(Картинк� �.Высота) Тогда
КартинкаВорд.Height = Картинка.Высота * 2.833;
КонецЕсли;
Если ЗначениеЗаполнено(Картинк� �.Ширина) Тогда
КартинкаВорд.Width = Картинка.Ширина * 2.833;
КонецЕсли;
КонецЕсли;
Функция CRM_ВычислитьЗначениеУслови я(Параметры, Условие, Значение = "Значение") Экспорт
мОписаниеТиповОбъектМетад анных = Новый ОписаниеТипов("ОбъектМетаданных");
мОписаниеТипов = Новый ОписаниеТипов;
Если ТипЗнч(Условие[Значение]) <> Тип("Строка") Тогда
Возврат Условие[Значение];
КонецЕсли;
Если Условие.Имя = "ВидДокумента" И Условие.ТипЗначения = мОписаниеТиповОбъектМетад анных Тогда
Если Условие.ЗначениеС = мОписаниеТипов Или Условие.ЗначениеС = Неопределено Тогда
Возврат Метаданные.Документы[Условие.ЗначениеПО];
Иначе
Возврат Условие.ЗначениеС;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(Параметр.Значение) = Тип("Строка") Тогда
Возврат Вычислить(Параметр.Значени е);
Иначе
Возврат Параметр.Значение;
КонецЕсли;
Иначе
Возврат Условие[Значение];
КонецЕсли;
КонецФункции
Функция CRM_ПолучитьСледующиеТочкиМ аршрута(глКомпонента, Маршрут = Неопределено, Знач ТочкаМаршрута, Знач БизнесПроцесс, Знач Вариант = Неопределено, ИсходнаяТочкаМаршрута = Неопределено) Экспорт
Возврат глКомпонента.ВыбратьСледу� �щиеТочкиМаршрута(глКомпон ента, Маршрут, ТочкаМаршрута, БизнесПроцесс, Вариант, ИсходнаяТочкаМаршрута);
КонецФункции
Процедура CRM_ПолучитьМаршрутБизнесПр оцесса(БизнесПроцесс, Маршрут = Неопределено, ТочкаМаршрута = Неопределено) Экспорт
Если Маршрут = Неопределено Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
Маршрут = Запрос.Выполнить().Выгрузит ь();
Иначе
СтрокаМаршрута = Маршрут.Найти(ТочкаМаршрут а, "ТочкаМаршрута");
Если ЗначениеЗаполнено(СтрокаМ� �ршрута.Шаблон) Тогда
Запрос = Новый Запрос;
Результат = CRM_ПолучитьСледующиеТочкиМ аршрута(глКомпонента, , ТочкаМаршрута, БизнесПроцесс, ЗначениеВыбораВарианта);
МассивТочекМаршрута = Новый Массив;
Если ТипЗнч(Результат) = Тип("Массив") Тогда
МассивТочекМаршрута = Результат;
ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда
МассивТочекМаршрута.Добав� �ть(Результат);
Иначе
Возврат тбСледующиеИсполнители;
КонецЕсли;
Для каждого СтруктураВозврата Из МассивТочекМаршрута Цикл
Если регИсполнителиТекущейТочк и.Количество() = 0 Тогда
Если ЗначениеЗаполнено(_БизнесП роцесс.Ссылка.ВедущаяЗадач а) Тогда
регИсполнителиТекущейТочк и.Отбор.БизнесПроцесс.Уста� �овить(_БизнесПроцесс.Ссылк а.ВедущаяЗадача.БизнесПроц есс);
регИсполнителиТекущейТочк и.Отбор.ТочкаМаршрута.Уста� �овить(_Точка);
регИсполнителиТекущейТочк и.Прочитать();
КонецЕсли;
КонецЕсли;
Если регИсполнителиТекущейТочк и.Количество() > 0 Тогда
Если СтрокаМаршрут[0].Пометка Тогда
Если _Точка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Тогда
СоответствиеИсполнители = Новый Соответствие;
Для каждого Строка Из регИсполнителиТекущейТочк и Цикл
Если ТипЗнч(Строка.Исполнитель) = Тип("Строка") Тогда
Если Найти(Строка.РеквизитБП, ".ТабличнаяЧасть.") > 0 Тогда
Для каждого ТЧ Из БизнесПроцесс.Метаданные(). ТабличныеЧасти Цикл
Если Найти(СокрЛП(Строка.Реквиз� �тБП), ТЧ.Имя) > 0 Тогда
Для каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.ПолноеИмя() = Строка.РеквизитБП Тогда
Если БизнесПроцесс[ТЧ.Имя].Количество() > 0 Тогда
Для каждого Строка Из БизнесПроцесс[ТЧ.Имя] Цикл
Исполнитель = CRM_ПолучитьИсполнителя(глК� �мпонента, Строка[Реквизит.Имя], _БизнесПроцесс, _Точка);
СоответствиеИсполнители.В� �тавить(Исполнитель, Исполнитель);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Иначе
ИмяРеквизита = СтрЗаменить(СокрЛП(Строка.� �еквизитБП), "БизнесПроцесс." + БизнесПроцесс.Метаданные(). Имя + ".Реквизит.", "");
Исполнитель = CRM_ПолучитьИсполнителя(глК� �мпонента, БизнесПроцесс[ИмяРеквизита], _БизнесПроцесс, _Точка);
СоответствиеИсполнители.В� �тавить(Исполнитель, Исполнитель);
КонецЕсли;
Иначе
Исполнитель = CRM_ПолучитьИсполнителя(глК� �мпонента, Строка.Исполнитель, _БизнесПроцесс, _Точка);
СоответствиеИсполнители.В� �тавить(Исполнитель, Исполнитель);
КонецЕсли;
КонецЦикла;
Для каждого ЭлементСоответствия Из СоответствиеИсполнители Цикл
Исполнитель = ЭлементСоответствия.Значе� �ие;
ДобавитьЗадачу(_БизнесПроц есс, _Точка, ФормируемыеЗадачи, ГрафикОрганизации, ДанныеГрафика, Исполнитель);
КонецЦикла;
ИначеЕсли _Точка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Тогда
НоваяЗадача.Результат = "Создана и выполнена автоматически: пропущена точка """ + _Точка + """ по шаблону """ + _Шаблон + """";
ФормируемыеЗадачи.Добавит� �(НоваяЗадача);
Иначе
Для каждого СтрокаМаршрута Из регМаршрутБизнесПроцесса Цикл
СтрокаМаршрута.ЭтапЗаверш� �н = Истина;
КонецЦикла;
регМаршрутБизнесПроцесса.� �аписать();
КонецЕсли;
Иначе
Если _Точка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс И СтрокаМаршрут[0].Пометка Тогда
СтандартнаяОбработка = Истина;
ДобавитьЗадачу(_БизнесПроц есс, _Точка, ФормируемыеЗадачи, ГрафикОрганизации, ДанныеГрафика, Исполнитель);
Возврат;
ИначеЕсли _Точка.Вид <> ВидТочкиМаршрутаБизнесПро цесса.Действие И СтрокаМаршрут[0].Пометка Тогда
СтандартнаяОбработка = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура CRM_ПриСозданииЗадач(глКомп� �нента, БизнесПроцесс, ТочкаМаршрутаБизнесПроцес са, ФормируемыеЗадачи, ГрафикРаботыОрганизации, ДанныеГрафика, Отказ) Экспорт
Если БизнесПроцесс.Завершен Тогда
Отказ = Истина;
КонецЕсли;
Если ФормируемыеЗадачи.Количес� �во() > 0 Тогда
СоздатьЗаписьРегистраБизн есПроцессов(БизнесПроцесс, ТочкаМаршрутаБизнесПроцес са, ГрафикРаботыОрганизации, ДанныеГрафика);
КонецЕсли;
КонецПроцедуры
Процедура CRM_ПриЗавершении(БизнесПро� �есс, ТочкаМаршрутаБизнесПроцес са, ГрафикРаботыОрганизации, ДанныеГрафика, Отказ) Экспорт
Если БизнесПроцесс.Завершен Тогда
Возврат;
КонецЕсли;
Попытка
Если ВРег(ТочкаМаршрутаБизнесП� �оцесса.Имя) = "ИСТИНА" Тогда
БизнесПроцесс.ВариантЗаве� �шения = Перечисления.CRM_ВариантыЗа� �ершения.Успешно;
ИначеЕсли ВРег(ТочкаМаршрутаБизнесП� �оцесса.Имя) = "ЛОЖЬ" Тогда
БизнесПроцесс.ВариантЗаве� �шения = Перечисления.CRM_ВариантыЗа� �ершения.Неудачно;
Иначе
ТаблицаРезультатов = Запрос.Выполнить().Выгрузит ь();
Если ТаблицаРезультатов.Количе� �тво() = 0 Тогда
Если ЗаписьМаршрута.Выбран() И Не ЗаписьМаршрута.Пометка Тогда
Результат = ТочкаВыбораВарианта.Вариа� �ты[ЗаписьМаршрута.ВариантВып� �лнения];
Иначе
Результат = ТочкаВыбораВарианта.Вариа� �ты[0];
КонецЕсли;
ИначеЕсли ЗаписьМаршрута.Выбран() И Не ЗаписьМаршрута.Пометка Тогда
Результат = ТочкаВыбораВарианта.Вариа� �ты[ЗаписьМаршрута.ВариантВып� �лнения];
Иначе
Результат = ТочкаВыбораВарианта.Вариа� �ты.Получить(ТаблицаРезуль� �атов[0].ВариантВыполнения - 1);
КонецЕсли;
Результат = Истина;
Если ЗаписьМаршрута.Выбран() И Не ЗаписьМаршрута.Пометка Тогда
Результат = ?(ЗаписьМаршрута.ВариантВы� �олнения = 0, Истина, Ложь);
Иначе
Для каждого Точка Из МассивПроверяемыхТочек Цикл
Если Не ПостроительЗапроса.Резуль� �ат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Ссылка.Стартован Тогда
ЕстьСтартованныеБП = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьСтартованныеБП = Истина Тогда
ТекстВопроса = "Уже есть стартованные бизнес процессы, введенные на основании выбранного документа. Продолжить?";
Иначе
ТекстВопроса = "Уже есть бизнес процессы, введенные на основании выбранного документа. Продолжить?";
КонецЕсли;
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Возврат Ответ = КодВозвратаДиалога.Да;
Иначе
Возврат Истина;
КонецЕсли;
СтрокаШаблона = НаборМаршрут.Выгрузить();
Если СтрокаШаблона[0].Пометка Тогда
Попытка
Выполнить(СтрокаШаблона[0].ОбработкаДействие.Действи е);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Если ЗначениеЗаполнено(Объект.Ш аблон) Тогда
ПВХШаблонБП = Объект.Шаблон;
Иначе
ПВХШаблонБП = ПланыВидовХарактеристик.CRM _ШаблоныБизнесПроцессов.Со здатьЭлемент();
ПВХШаблонБП.ТипЗначения = Новый ОписаниеТипов("БизнесПроцессСсылка." + Объект.Метаданные().Имя);
ПВХШаблонБП.ЗаполнитьМарш� �ут();
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.В едущаяЗадача) Тогда
Для каждого Строка Из ПВХШаблонБП.Исполнители Цикл
НоваяСтрока = Объект.тбИсполнители.Добав ить();
ЗаполнитьЗначенияСвойств(� �оваяСтрока, Строка);
КонецЦикла;
Иначе
НаборИсполнителейВедущего БП = РегистрыСведений.CRM_Исполн� �телиТочекМаршрута.Создать НаборЗаписей();
ПровТочка = "";
Для каждого Строка Из ПВХШаблонБП.Исполнители Цикл
Если ПровТочка <> Строка.ТочкаМаршрута Тогда
НаборИсполнителейВедущего БП.Отбор.БизнесПроцесс.Уст� �новить(Объект.ВедущаяЗада� �а.БизнесПроцесс);
НаборИсполнителейВедущего БП.Отбор.ТочкаМаршрута.Уст� �новить(Строка.ТочкаМаршру� �а);
НаборИсполнителейВедущего БП.Прочитать();
Если НаборИсполнителейВедущего БП.Количество() > 0 Тогда
Для каждого СтрокаНабора Из НаборИсполнителейВедущего БП Цикл
НоваяСтрока = Объект.тбИсполнители.Добав ить();
ЗаполнитьЗначенияСвойств(� �оваяСтрока, СтрокаНабора, , "БизнесПроцесс");
КонецЦикла;
ПровТочка = Строка.ТочкаМаршрута;
НаборИсполнителейВедущего БП.Отбор.Сбросить();
Продолжить;
Иначе
НаборИсполнителейВедущего БП.Отбор.Сбросить();
КонецЕсли;
Для каждого Строка Из ПВХШаблонБП.Маршрут Цикл
НоваяСтрока = Объект.тбМаршрут.Добавить() ;
ЗаполнитьЗначенияСвойств(� �оваяСтрока, Строка);
НоваяСтрока.Порядок = Строка.НомерСтроки;
Если Не (Строка.ТочкаМаршрута.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс) Тогда
Продолжить;
КонецЕсли;
Для каждого СтрокаВложенногоШаблона Из Строка.Шаблон.Маршрут Цикл
Если СтрокаВложенногоШаблона.П� �метка Тогда
ИсполнителиВложенногоБП = Строка.Шаблон.Исполнители.� �айтиСтроки(Новый Структура("ТочкаМаршрута", СтрокаВложенногоШаблона.Т� �чкаМаршрута));
Если ИсполнителиВложенногоБП.К� �личество() > 0 Тогда
Для каждого СтрокаИсполнителей Из ИсполнителиВложенногоБП Цикл
СтрокаНабораИсполнителей = Объект.тбИсполнители.Добав ить();
ЗаполнитьЗначенияСвойств(� �трокаНабораИсполнителей, СтрокаИсполнителей);
КонецЦикла;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура CRM_СохранитьМаршрутИсполни телей(Объект) Экспорт
Перем регМаршрут, регИсполнители;
Если ТипЗнч(Объект.тбМаршрут) = Тип("ТаблицаЗначений") Тогда
ИначеЕсли Объект.тбМаршрут <> Неопределено И ТипЗнч(Объект.тбМаршрут) <> Тип("ТаблицаЗначений") Тогда
Если Объект.тбМаршрут.Модифицир ованность() Тогда
Объект.тбМаршрут.Записать() ;
КонецЕсли;
Если Объект.тбИсполнители.Модиф ицированность() Тогда
Объект.тбИсполнители.Запис ать();
КонецЕсли;
КонецЕсли;
Если Не (БизнесПроцесс = Неопределено) Тогда
Если БизнесПроцесс.ДатаАвтоСта� �та <> '00010101000000' И НачалоДня(БизнесПроцесс.Да таАвтоСтарта) <> НачалоДня(БизнесПроцесс.Да та) Тогда
ДатаБП = БизнесПроцесс.ДатаАвтоСта� �та;
ПланируемаяДатаЗавершения = БизнесПроцесс.ДатаАвтоСта� �та;
ИначеЕсли БизнесПроцесс.ДатаАвтоСта� �та <> '00010101000000' И НачалоДня(БизнесПроцесс.Да таАвтоСтарта) = НачалоДня(БизнесПроцесс.Да та) Или БизнесПроцесс.ДатаАвтоСта� �та <> '00010101000000' Тогда
Если ДлительностьТочек = Неопределено Тогда
ДлительностьТочек = Новый ДеревоЗначений;
ДлительностьТочек.Колонки. Добавить("ТочкаМаршрута");
ДлительностьТочек.Колонки. Добавить("ДлительностьТочки");
ДлительностьТочек.Колонки. Добавить("ДлительностьОтложено");
ДлительностьТочек.Колонки. Добавить("ВходящаяДата");
ДлительностьТочек.Колонки. Добавить("ДатаНачала");
ДлительностьТочек.Колонки. Добавить("ОжидаемаяДатаЗавершения");
КонецЕсли;
Конец = Ложь;
ВсегоДлительность = 0;
ТабПройденыхТочек = Новый ТаблицаЗначений;
ТабПройденыхТочек.Колонки. Добавить("Точка");
Если Не ЭтоВложенный Тогда
ТекущаяСтрокаДереваТочек = ДлительностьТочек.Строки.Д обавить();
ТекущаяСтрокаДереваТочек.� �очкаМаршрута = "Бизнес-процесс";
ТекущаяСтрокаДереваТочек.� �атаНачала = ДатаБП;
ТекущаяСтрокаДереваТочек.� �ходящаяДата = ДатаБП;
Иначе
ТекущаяСтрокаДереваТочек = ДлительностьТочек;
КонецЕсли;
Пока Не Конец Цикл
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Или ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Тогда
ПровТочка = ТабПройденыхТочек.Найти(Ис ходящаяТочка, "Точка");
Если ПровТочка = Неопределено Тогда
НоваяСтрока = ТабПройденыхТочек.Добавит� �();
НоваяСтрока.Точка = ИсходящаяТочка;
Иначе
Сообщить("Ошибка расчета длительности бизнес-процесса! Длительность равна '0'", СтатусСообщения.Важное);
Конец = Истина;
ВсегоДлительность = 0;
Продолжить;
КонецЕсли;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Тогда
СтрокаМаршрута = Шаблон.Найти(ИсходящаяТочк а, "ТочкаМаршрута");
Если СтрокаМаршрута.Пометка Тогда
Если Не ЗначениеЗаполнено(Текущая� �трокаДереваТочек.ДатаНача ла) Тогда
ТекущаяСтрокаДереваТочек.� �атаНачала = СтруктураДат.Дата;
ТекущаяСтрокаДереваТочек.� �ходящаяДата = СтруктураДат.Дата;
КонецЕсли;
Иначе
ВариантВыполнения = СтрокаМаршрута.ВариантВып� �лнения;
КонецЕсли;
ИсходящаяТочка = ИсходящаяТочка.ПолучитьИс� �одящуюТочку();
Продолжить;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Тогда
СтрокаМаршрута = Шаблон.Найти(ИсходящаяТочк а, "ТочкаМаршрута");
Если СтрокаМаршрута.Пометка Тогда
Если ТаблицаТочек[0].ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Условие Тогда
ИсходящаяТочка = ТаблицаТочек[0].ИсходящаяТочка.ПолучитьИс ходящуюТочку(?(ТаблицаТоче� �[0].ВариантИсходящейТочки = 0, Истина, Ложь));
Продолжить;
ИначеЕсли ТаблицаТочек[0].ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВыборВарианта Тогда
ИсходящаяТочка = ТаблицаТочек[0].ИсходящаяТочка.ПолучитьИс ходящуюТочку(ТаблицаТочек[0].ИсходящаяТочка.Варианты[ТаблицаТочек[0].ВариантИсходящейТочки]);
Продолжить;
Иначе
ИсходящаяТочка = ТаблицаТочек[0].ИсходящаяТочка.ПолучитьИс ходящуюТочку();
Продолжить;
КонецЕсли;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Слияние Тогда
ИсходящаяТочка = ИсходящаяТочка.ПолучитьИс� �одящуюТочку();
Продолжить;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Обработка Тогда
ИсходящаяТочка = ИсходящаяТочка.ПолучитьИс� �одящуюТочку();
Продолжить;
КонецЕсли;
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Завершение Тогда
Конец = Истина;
Продолжить;
КонецЕсли;
КонецЦикла;
Если Не ЭтоВложенный Тогда
ТекущаяСтрокаДереваТочек.� �лительностьТочки = ВсегоДлительность;
ТекущаяСтрокаДереваТочек.� �жидаемаяДатаЗавершения = ПланируемаяДатаЗавершения ;
КонецЕсли;
Для Индекс = 0 По ИсходящаяТочка.ВГраница() Цикл
ПланируемаяДатаЗавершения Ветки = ДатаСтартаРзаделения;
ДлительностьВетки = 0;
ТочкаМассива = ИсходящаяТочка[Индекс];
Если Не ЗначениеЗаполнено(СтрокаВ� �тки.ДатаНачала) Тогда
СтрокаВетки.ДатаНачала = СтруктураДат.Дата;
СтрокаВетки.ВходящаяДата = СтруктураДат.ВходящаяДата;
КонецЕсли;
Если Не ЗначениеЗаполнено(НоваяСт� �ока.ВходящаяДата) Тогда
НоваяСтрока.ВходящаяДата = СтруктураДат.ВходящаяДата;
НоваяСтрока.ДлительностьО� �ложено = ОтложеноНа;
НоваяСтрока.ДатаНачала = СтруктураДат.Дата;
КонецЕсли;
Иначе
ВариантВыполнения = СтрокаМаршрута.ВариантВып� �лнения;
КонецЕсли;
ТочкаМассива = ТочкаМассива.ПолучитьИсхо� �ящуюТочку();
Продолжить;
КонецЕсли;
Если ТочкаМассива.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Тогда
СтрокаМаршрута = Шаблон.Найти(ТочкаМассива, "ТочкаМаршрута");
Если СтрокаМаршрута.Пометка Тогда
ПостроительЗапроса.Выполн� �ть();
Выборка = ПостроительЗапроса.Резуль� �ат.Выбрать();
Пока Выборка.Следующий() Цикл
Исполнитель = Выборка.Исполнитель;
КонецЦикла;
Если Не ЗначениеЗаполнено(Исполни� �ель) Или Исполнитель = Перечисления.CRM_ВидыИсполн� �телейЗадач.ИсполнительПре дыдущейЗадачи Тогда
Исполнитель = ПараметрыСеанса.ТекущийПо� �ьзователь;
КонецЕсли;
Возврат Исполнитель;
Иначе
Возврат Исполнитель;
КонецЕсли;
Для каждого СтрокаМаршрута Из ШаблонВложенного.Маршрут Цикл
Исполнители.Отбор.Сбросить ();
Исполнители.Отбор.БизнесПр оцесс.Установить(БизнесПро цесс);
Исполнители.Отбор.ТочкаМар шрута.Установить(СтрокаМар шрута.ТочкаМаршрута);
Исполнители.Прочитать();
Если Исполнители.Количество() > 0 Тогда
ИсполнителиВложенногоБП = ШаблонВложенного.Исполнит� �ли.НайтиСтроки(Новый Структура("ТочкаМаршрута", ТочкаМаршрута));
Если ИсполнителиВложенногоБП.К� �личество() > 0 Тогда
Для каждого СтрокаИсполнителей Из ИсполнителиВложенногоБП Цикл
СтрокаНабораИсполнителей = Исполнители.Добавить();
ЗаполнитьЗначенияСвойств(� �трокаНабораИсполнителей, СтрокаИсполнителей);
СтрокаНабораИсполнителей.� �изнесПроцесс = БизнесПроцесс;
КонецЦикла;
Исполнители.Записать();
Исполнители.Отбор.ТочкаМар шрута.Установить(ТочкаМарш рута);
Исполнители.Отбор.Исполнит ель.Использование = Ложь;
Исполнители.Прочитать();
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Исполнители.Количество() = 0 Тогда
Если ЗначениеЗаполнено(БизнесП� �оцесс.ВедущаяЗадача) Тогда
Исполнители.Отбор.БизнесПр оцесс.Установить(БизнесПро цесс.ВедущаяЗадача.БизнесП роцесс);
Исполнители.Отбор.ТочкаМар шрута.Установить(ТочкаМарш рута);
Исполнители.Прочитать();
КонецЕсли;
КонецЕсли;
Если Исполнители.Количество() = 0 Тогда
Если ЗначениеЗаполнено(БизнесП� �оцесс.ВедущаяЗадача) Тогда
Исполнители.Отбор.БизнесПр оцесс.Установить(БизнесПро цесс.ВедущаяЗадача.БизнесП роцесс);
Исполнители.Отбор.ТочкаМар шрута.Установить(БизнесПро цесс.ВедущаяЗадача.ТочкаМа ршрута);
Исполнители.Прочитать();
КонецЕсли;
КонецЕсли;
СтруктураВозврата = Новый Структура("БизнесПроцесс, ТочкаМаршрута, Исполнитель, РеквизитБП");
Если Исполнители.Количество() > 1 Или ТочкаМаршрута.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие И ТочкаМаршрута.Групповая Тогда
СписокИсполнителей = Новый СписокЗначений;
Для каждого Строка Из Исполнители Цикл
Если ТипЗнч(Строка.Исполнитель) = Тип("Строка") Тогда
СписокИсполнителей.Добави� �ь(Строка.РеквизитБП, Строка.Исполнитель);
Иначе
ИначеЕсли Исполнители.Количество() = 1 Тогда
Если ТипЗнч(Исполнители[0].Исполнитель) = Тип("Строка") Тогда
СтруктураВозврата.Исполни� �ель = Исполнители[0].Исполнитель;
СтруктураВозврата.Реквизи� �БП = Исполнители[0].РеквизитБП;
Иначе
_Итерация = CRM_ПолучитьНомерАктивнойИт ерации(БизнесПроцесс, ТочкаМаршрута);
Для каждого Запись Из регМаршрутБизнесПроцесса Цикл
Запись.Итерация = _Итерация + 1;
КонецЦикла;
регМаршрутБизнесПроцесса.� �аписать();
КонецПроцедуры
Функция ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочка, НомерРазделения, НомерВетки = 0, ТекущаяСтрокаДерева = Неопределено)
Перем НоваяСтрока;
Конец = Ложь;
Пока Не Конец Цикл
Если ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Или ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс Или ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Обработка Тогда
ПровСтрока = ТаблицаПройденныхТочек.На� �ти(ИсходящаяТочка, "Точка");
Если Не (ПровСтрока = Неопределено) Тогда
Конец = Истина;
Продолжить;
Иначе
НоваяСтрокаТЗ = ТаблицаПройденныхТочек.До� �авить();
НоваяСтрокаТЗ.Точка = ИсходящаяТочка;
КонецЕсли;
Если Не (ТекущаяСтрокаДерева = Неопределено) И (ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Действие Или ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВложенныйБизнесПроц� �сс) Тогда
ИначеЕсли ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.ВыборВарианта Тогда
ИсходящаяДляРазделения = Неопределено;
Для Ном = 0 По ИсходящаяТочка.Варианты.Ко личество() - 1 Цикл
ИсходящаяТочкаВарианта = ИсходящаяТочка.ПолучитьИс� �одящуюТочку(ИсходящаяТочк а.Варианты[Ном]);
Если ТекущаяСтрокаДерева = Неопределено Тогда
ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаВарианта, НомерРазделения);
Иначе
Исходящая = ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаВарианта, НомерРазделения, НомерВетки, ТекущаяСтрокаДерева);
Если Не (Исходящая = Неопределено) Тогда
ИсходящаяДляРазделения = Исходящая;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТекущаяСтрокаДерева = Неопределено Тогда
Конец = Истина;
Продолжить;
Иначе
Возврат ИсходящаяДляРазделения;
КонецЕсли;
ИначеЕсли ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Условие Тогда
ИсходящаяДляРазделения = Неопределено;
ИсходящаяТочкаУсловия = ИсходящаяТочка.ПолучитьИс� �одящуюТочку(Истина);
Если ТекущаяСтрокаДерева = Неопределено Тогда
ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаУсловия, НомерРазделения);
Иначе
Исходящая = ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаУсловия, НомерРазделения, НомерВетки, ТекущаяСтрокаДерева);
Если Не (Исходящая = Неопределено) Тогда
ИсходящаяДляРазделения = Исходящая;
КонецЕсли;
КонецЕсли;
ИсходящаяТочкаУсловия = ИсходящаяТочка.ПолучитьИс� �одящуюТочку(Ложь);
Если ТекущаяСтрокаДерева = Неопределено Тогда
ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаУсловия, НомерРазделения);
Иначе
Исходящая = ПолучитьТочкуСформировать СтрокуДерева(ДеревоТочекП� �Макету, ТаблицаПройденныхТочек, ИсходящаяТочкаУсловия, НомерРазделения, НомерВетки, ТекущаяСтрокаДерева);
Если Не (Исходящая = Неопределено) Тогда
ИсходящаяДляРазделения = Исходящая;
КонецЕсли;
КонецЕсли;
Если ТекущаяСтрокаДерева = Неопределено Тогда
Конец = Истина;
Продолжить;
Иначе
Возврат ИсходящаяДляРазделения;
КонецЕсли;
ИначеЕсли ИсходящаяТочка.Вид = ВидТочкиМаршрутаБизнесПро цесса.Разделение Тогда
Для Индекс = 0 По МассивИсходящихТочек.ВГра� �ица() Цикл
Если ТекущаяСтрокаДерева = Неопределено Тогда
СтрокаДерева = ДеревоТочекПоМакету;
Иначе
СтрокаДерева = НоваяСтрока;
КонецЕсли;
ByStep, хакер ты наш! не мог чтоли в личку кинуть? думаешь ЭТО ВСЕМ интересноИ?
Sintson
07.12.2010, 20:38
Тема раскрыта :) в архив.
Topic
09.12.2011, 19:50
глКомпонента - где описана?
Vlad12
11.12.2011, 13:19
Не надо прятаться, стесняться !
За публичность - молодца !!!
Topic
12.12.2011, 00:59
Это к чему комментарий?
Vlad12
12.12.2011, 01:05
Это к чему комментарий?
Обычно тему читают с начала...
см. страницу 1
AVS300
14.12.2011, 21:53
Да! Весьма развернутый был коментарий )))
Topic
14.12.2011, 22:26
Весь вопрос, что информации, которая была озвучена в данной теме мало...
qqq111qqq
10.01.2012, 07:45
ByStep, огромное спасибо!
Для всех, кто мучается с закрытыми модулями советую обработку http://help1c.com/files/view/60.html
sergey_echo
31.05.2015, 02:17
У кого-то есть опыт взлома защиты конфигураций Раруса? Судя по анализу защищенных модулей (декомпилировать,чтобы посмотреть их содержание, получилось), в них создается защищенная обработка, вот получить эту обработку или выгрузить в файл никак и не получается.
i-Demon-i
26.08.2015, 15:54
ByStep, если есть возможность отпишись как декомпилировал закрытые модули 1с, очень надо и интересно.
Sintson
26.08.2015, 19:17
Привет, могу помочь. Спрашивай.
polishchuk.i
17.02.2017, 21:29
Я извиняюсь, а если эта обработка пишет индекс за границами массива, возможно код обфусцирован. Тогда как?
ams11
16.06.2017, 13:33
Есть внешний модуль внутри файла обновления конфигурации. Кто может посмотреть?