diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index 230aab5b8..89c6174be 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -72,7 +72,7 @@ КонецПроцедуры -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ЭтоНовый() Тогда Автор = Пользователи.АвторизованныйПользователь(); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl index a026bf447..3ed4c4269 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -460,6 +460,7 @@ ВсеПодсистемы = Не ЗначениеЗаполнено(СтрокаДерева.ПолноеИмя); ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); Если ЗначениеЗаполнено(СтрокаПоиска) Тогда ПараметрыПоиска.Вставить("СтрокаПоиска", СтрокаПоиска); Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; @@ -528,9 +529,9 @@ КонецЕсли; Размещено = 0; - НачатьТранзакцию(); УжеРазмещены = ""; НеМогутРазмещаться = ""; + НачатьТранзакцию(); Попытка Для Каждого ВариантСсылка Из ПараметрыРазмещения.Варианты.Массив Цикл Если ВариантСсылка.ТипОтчета = Перечисления.ТипыОтчетов.Внешний Тогда diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form index 77f2a59da..ac65ab863 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form @@ -535,6 +535,10 @@ BeforeDeleteRow СписокПередУдалением + + BeforeRowChange + СписокПередНачаломИзменения + СписокСтрокаПоиска 55 diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl index 6dea2d6b9..87d3657f0 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl @@ -67,13 +67,35 @@ КонецПроцедуры +&НаКлиенте +Процедура СписокПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; + ОткрытьКарточкуФайла(); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ОткрытьКарточкуФайла() + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + + Версия = ТекущиеДанные.Ссылка; + + ПараметрыОткрытияФормы = Новый Структура("Ключ", Версия); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ВерсияПрисоединенногоФайла", ПараметрыОткрытияФормы); + + КонецЕсли; + +КонецПроцедуры + &НаСервереБезКонтекста Функция ВладелецФайла(ВыбраннаяСтрока) Возврат ВыбраннаяСтрока.Владелец; КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl index 433fac976..f0fab689a 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl @@ -27,3 +27,14 @@ #КонецОбласти #КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + Если ВидФормы = "ФормаОбъекта" Тогда + СтандартнаяОбработка = Ложь; + ВыбраннаяФорма = "Обработка.РаботаСФайлами.Форма.ВерсияПрисоединенногоФайла"; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl index 2d0612d04..60639e7d6 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl @@ -67,7 +67,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Выборка.Ссылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Выборка.Ссылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); Объект = Выборка.Ссылка.ПолучитьОбъект(); @@ -78,9 +77,8 @@ КонецЕсли; ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецЕсли; diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl index 0dc01b0c1..2c764f9a1 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -22,7 +22,6 @@ Иначе Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Тип.ТолькоПросмотр = Истина; - КонецЕсли; КонецЕсли; @@ -62,13 +61,6 @@ КонецЕсли; КонецЕсли; - Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено - И Метаданные.Обработки["РасширенныйВводКонтактнойИнформации"].Формы.Найти("НастройкиАдреса") <> Неопределено Тогда - Элементы.ДополнительныеНастройкиАдреса.Видимость = Истина; - Иначе - Элементы.ДополнительныеНастройкиАдреса.Видимость = Ложь; - КонецЕсли; - ДоступныДополнительныеНастройкиАдреса = (Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено И Метаданные.Обработки["РасширенныйВводКонтактнойИнформации"].Формы.Найти("НастройкиАдреса") <> Неопределено); diff --git a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..0d36ea7c8 --- /dev/null +++ b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Form.form @@ -0,0 +1,295 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + ПредставлениеСсылки + 40 + true + true + + true + + + Список.ПредставлениеСсылки + + + ПредставлениеСсылкиРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ПредставлениеСсылкиКонтекстноеМеню + 41 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Ссылка + 43 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 44 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Catalog.ВидыПроверок + true + true + true + true + +
+ + + + + +
diff --git a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..b7a28c399 --- /dev/null +++ b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,760 @@ + + + + ОсновнаяГруппировка + 50 + + Код + 1 + true + true + + true + + + Объект.Code + + + КодРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Наименование + 4 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Основная группировка</value> + + + ОсновнаяГруппировкаExtendedTooltip + 51 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Владелец + 52 + true + true + + true + + + ВладелецРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ВладелецКонтекстноеМеню + 53 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ГруппаОсновнаяПанель + 44 + + СтраницаГлавное + 46 + + Свойство1 + 29 + true + true + + true + + + Объект.Свойство1 + + + Свойство1РасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + Свойство1КонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + + true + true + true + false + true + ShowInInputField + true + true + true + Normal + + + + Свойство2 + 32 + true + true + + true + + + Объект.Свойство2 + + + Свойство2РасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + Свойство2КонтекстноеМеню + 33 + true + + InputField + Enter + true + Left + true + + true + true + true + false + true + ShowInInputField + true + true + true + Normal + + + + Свойство3 + 35 + true + true + + true + + + Объект.Свойство3 + + + Свойство3РасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + Свойство3КонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + true + true + true + false + true + ShowInInputField + true + true + true + Normal + + + + Свойство4 + 38 + true + true + + true + + + Объект.Свойство4 + + + Свойство4РасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + Свойство4КонтекстноеМеню + 39 + true + + InputField + Enter + true + Left + true + + true + true + true + false + true + ShowInInputField + true + true + true + Normal + + + + Свойство5 + 41 + true + true + + true + + + Объект.Свойство5 + + + Свойство5РасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + Свойство5КонтекстноеМеню + 42 + true + + InputField + Enter + true + Left + true + + true + true + true + false + true + ShowInInputField + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Главное</value> + + + СтраницаГлавноеРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаДополнительныеСвойства + 48 + + СвойстваОбъекта + 7 + + <key>ru</key> + <value>Свойства объекта</value> + + true + true + + true + + + Объект.СвойстваОбъекта + + None + + СвойстваОбъектаНомерСтроки + 20 + true + true + + true + + + Объект.СвойстваОбъекта.LineNumber + + + СвойстваОбъектаНомерСтрокиРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СвойстваОбъектаНомерСтрокиКонтекстноеМеню + 21 + true + + LabelField + Auto + true + Left + true + + true + true + + + + СвойстваОбъектаИмяСвойства + 23 + true + true + + true + + + Объект.СвойстваОбъекта.ИмяСвойства + + + СвойстваОбъектаИмяСвойстваРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + СвойстваОбъектаИмяСвойстваКонтекстноеМеню + 24 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СвойстваОбъектаЗначениеСвойства + 26 + true + true + + true + + + Объект.СвойстваОбъекта.ЗначениеСвойства + + + СвойстваОбъектаЗначениеСвойстваРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СвойстваОбъектаЗначениеСвойстваКонтекстноеМеню + 27 + true + + InputField + Auto + true + Left + true + + true + true + true + false + true + ShowInInputField + true + true + true + Normal + + + + СвойстваОбъектаКоманднаяПанель + 9 + Left + true + + + OnChange + СвойстваОбъектаПриИзменении + + + СвойстваОбъектаСтрокаПоиска + 11 + + СвойстваОбъектаСтрокаПоискаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СвойстваОбъектаСтрокаПоискаКонтекстноеМеню + 12 + true + + СвойстваОбъекта + + true + + + + СвойстваОбъектаСостояниеПросмотра + 14 + + СвойстваОбъектаСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СвойстваОбъектаСостояниеПросмотраКонтекстноеМеню + 15 + true + + ViewStatusAddition + СвойстваОбъекта + + true + + + + СвойстваОбъектаУправлениеПоиском + 17 + + СвойстваОбъектаУправлениеПоискомРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + СвойстваОбъектаУправлениеПоискомКонтекстноеМеню + 18 + true + + SearchControlAddition + СвойстваОбъекта + + true + + + + СвойстваОбъектаРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + СвойстваОбъектаКонтекстноеМеню + 8 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
+ true + true + + true + + + <key>ru</key> + <value>Дополнительные свойства</value> + + + СтраницаДополнительныеСвойстваРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
+ true + true + + true + + + <key>ru</key> + <value>Основная панель</value> + + + ГруппаОсновнаяПанельРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + CatalogObject.ВидыПроверок + + + true + + + true + +
true
+ true +
+ + + + + +
diff --git a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..eb1df4a90 --- /dev/null +++ b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,53 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ОбновитьСчетчикиСтрокТаблиц(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДополнительныеСвойства + +&НаКлиенте +Процедура СвойстваОбъектаПриИзменении(Элемент) + + ОбновитьСчетчикиСтрокТаблиц(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ОбновитьСчетчикиСтрокТаблиц() + + УстановитьЗаголовокСтраницы(Элементы.СтраницаДополнительныеСвойства, Объект.СвойстваОбъекта, НСтр("ru = 'Дополнительные свойства'")); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьЗаголовокСтраницы(ЭлементСтраница, РеквизитТабличнаяЧасть, ЗаголовокПоУмолчанию) + + ЗаголовокСтраницы = ЗаголовокПоУмолчанию; + Если РеквизитТабличнаяЧасть.Количество() > 0 Тогда + ЗаголовокСтраницы = ЗаголовокПоУмолчанию + " (" + РеквизитТабличнаяЧасть.Количество() + ")"; + КонецЕсли; + ЭлементСтраница.Заголовок = ЗаголовокСтраницы; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl b/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl new file mode 100644 index 000000000..19ac3bbf8 --- /dev/null +++ b/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl @@ -0,0 +1,60 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + НеРедактируемыеРеквизиты = Новый Массив; + + Возврат НеРедактируемыеРеквизиты; + +КонецФункции + +// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + +// СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов + +// См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. +Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт + + БлокируемыеРеквизиты = Новый Массив; + + Возврат БлокируемыеРеквизиты; + +КонецФункции + +// Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Поля.Добавить("ПредставлениеСсылки"); + +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Представление = Данные.ПредставлениеСсылки; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыПроверок/ObjectModule.bsl b/SSL/src/Catalogs/ВидыПроверок/ObjectModule.bsl new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/SSL/src/Catalogs/ВидыПроверок/ObjectModule.bsl @@ -0,0 +1 @@ + diff --git a/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo new file mode 100644 index 000000000..024b20927 --- /dev/null +++ b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo @@ -0,0 +1,411 @@ + + + + + + + + + + ВидыПроверок + + ru + Виды проверок + + Содержит проверяемые объекты, как конкретные (Ссылка на документ / справочник), так и абстрактные (Операция закрытия месяца). + true + Catalog.ВидыПроверок.StandardAttribute.Description + Catalog.ВидыПроверок.StandardAttribute.Code + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + + ru + Входит в группу + + + ru + Группа к которой относится вид проверок. + + true + + Catalog.ВидыПроверок.EmptyRef + + Use + + + + + Use + Description + + ru + Наименование + + + ru + Наименование вида проверок. + + + ShowError + Use + + + + + Use + Code + + ru + Код + + + ru + Код вида проверок. + + + Use + + + + Use + Catalog.ВидыПроверок.Attribute.Свойство1 + Catalog.ВидыПроверок.Attribute.Свойство2 + Catalog.ВидыПроверок.Attribute.Свойство3 + Catalog.ВидыПроверок.Attribute.Свойство4 + Catalog.ВидыПроверок.Attribute.Свойство5 + Managed + Use + + ru + Вид проверки + + true + 2 + true + 9 + 128 + String + Variable + true + true + AsDescription + InDialog + BothWays + Catalog.ВидыПроверок.Form.ФормаЭлемента + Catalog.ВидыПроверок.Form.ФормаСписка + + Свойство1 + + ru + Свойство1 + + + Boolean + String + Date + Number + AnyRef + + 16 + 2 + + + 64 + + + + + ru + Свойство №1 вида проблемы. + + + + + Use + Use + + + Свойство2 + + ru + Свойство2 + + + Boolean + String + Date + Number + AnyRef + + 16 + 2 + + + 64 + + + + + ru + Свойство №2 вида проблемы. + + + + + Use + Use + + + Свойство3 + + ru + Свойство3 + + + Boolean + String + Date + Number + AnyRef + + 16 + 2 + + + 64 + + + + + ru + Свойство №3 вида проблемы. + + + + + Use + Use + + + Свойство4 + + ru + Свойство4 + + + Boolean + String + Date + Number + AnyRef + + 16 + 2 + + + 64 + + + + + ru + Свойство №4 вида проблемы. + + + + + Use + Use + + + Свойство5 + + ru + Свойство5 + + + Boolean + String + Date + Number + AnyRef + + 16 + 2 + + + 64 + + + + + ru + Свойство №5 вида проблемы. + + + + + Use + Use + + + ПредставлениеСсылки + + ru + Представление ссылки + + + String + + + + ru + Поле, хранящее представление ссылки на вид проверки. + + + + + Use + Use + + + + + + + СвойстваОбъекта + + ru + Свойства объекта + + + Use + LineNumber + + Use + + + + + ИмяСвойства + + ru + Имя свойства + + + String + + 128 + + + + ru + Имя свойства. + + + + Use + Use + + + ЗначениеСвойства + + ru + Значение свойства + + + Boolean + String + Date + Number + AnyRef + + 16 + 2 + + + 64 + + + + + ru + Значение свойства. + + + + Use + Use + + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОшибкаЗагрузкиКомпоненты/Form.form b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОшибкаЗагрузкиКомпоненты/Form.form deleted file mode 100644 index 9b1f756d8..000000000 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОшибкаЗагрузкиКомпоненты/Form.form +++ /dev/null @@ -1,213 +0,0 @@ - - - - Описание - 9 - - Предупреждение32 - 6 - - <key>ru</key> - <value>Предупреждение32</value> - - true - true - - true - - - Предупреждение32РасширеннаяПодсказка - 8 - Label - true - true - - Left - - - - Предупреждение32КонтекстноеМеню - 7 - true - - true - true - - - CommonPicture.Предупреждение32 - - - - - ОписаниеОшибки - 17 - - <key>ru</key> - <value>В файле отсутствует информация о компоненте.</value> - - true - true - - true - - - ОписаниеОшибкиРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - - ОписаниеОшибкиКонтекстноеМеню - 18 - true - - Label - true - 2 - - Left - - - true - true - - true - - - <key>ru</key> - <value>Описание</value> - - - ОписаниеРасширеннаяПодсказка - 10 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОбщееОписание - 11 - - <key>ru</key> - <value>Необходимо указать zip-архив с внешней компонентой. -Подробнее: -<link http://its.1c.ru/db/metodtorg/content/3221/hdoc>http://its.1c.ru/db/metodtorg/content/3221/hdoc</>.</value> - - true - true - - true - - - ОбщееОписаниеРасширеннаяПодсказка - 13 - Label - true - true - - Left - - - - ОбщееОписаниеКонтекстноеМеню - 12 - true - - true - Label - true - true - - Left - - - Bottom - true - - ФормаКоманднаяПанель - -1 - - ФормаОК - 1 - - <key>ru</key> - <value> ОК </value> - - true - true - - true - - - ФормаОКРасширеннаяПодсказка - 2 - Label - true - true - - Left - - - Form.StandardCommand.OK - Normal - Auto - true - true - UserCmds - Auto - - Center - true - - - OnCreateAtServer - ПриСозданииНаСервере - - Abort - Cancel - Close - Help - Ignore - No - RestoreValues - Retry - SaveValues - Yes - 35 - LockOwner - true - true - true - Vertical - true - true - auto - true - - ОписаниеОшибки - - String - - - - - - - - diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОшибкаЗагрузкиКомпоненты/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОшибкаЗагрузкиКомпоненты/Module.bsl deleted file mode 100644 index 781860af5..000000000 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОшибкаЗагрузкиКомпоненты/Module.bsl +++ /dev/null @@ -1,15 +0,0 @@ - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Элементы.ОписаниеОшибки.Заголовок = Параметры.ОписаниеОшибки; - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl index 1820f742b..859a60da1 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl @@ -188,10 +188,13 @@ Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеОтображенияОшибки", ЭтотОбъект, Контекст); - ПараметрыФормы = Новый Структура("ОписаниеОшибки", Результат.ОписаниеОшибки); - ОткрытьФорму("Справочник.ВнешниеКомпоненты.Форма.ОшибкаЗагрузкиКомпоненты", ПараметрыФормы, ЭтотОбъект, - УникальныйИдентификатор,,, Оповещение); - + СтрокаСПредупреждением = Новый ФорматированнаяСтрока( + Результат.ОписаниеОшибки, Символы.ПС, + НСтр("ru = 'Необходимо указать zip-архив с внешней компонентой. + |Подробнее:'"), + Новый ФорматированнаяСтрока("http://its.1c.ru/db/metodtorg/content/3221/hdoc",,,, "http://its.1c.ru/db/metodtorg/content/3221/hdoc"), "."); + ПоказатьПредупреждение(Оповещение, СтрокаСПредупреждением); + Иначе // Успешно загружена. @@ -206,7 +209,7 @@ // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. &НаКлиенте -Процедура ЗагрузитьКомпонентуПослеОтображенияОшибки(РезультатЗакрытия, Контекст) Экспорт +Процедура ЗагрузитьКомпонентуПослеОтображенияОшибки(Контекст) Экспорт ЗагрузитьКомпонентуЗавершение(Контекст); diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo index 73e8b6764..8e2d0b7e4 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo @@ -498,13 +498,4 @@ PersonalComputer MobileDevice - - ОшибкаЗагрузкиКомпоненты - - ru - Ошибка загрузки компоненты - - PersonalComputer - MobileDevice - diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index c12953ede..08bb6cc29 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -8,6 +8,10 @@ Возврат; КонецЕсли; + Если Не ПользователиСлужебный.ВнешниеПользователиВнедрены() Тогда + Элементы.ОбъектАвторизации.Доступность = Ложь; + КонецЕсли; + // Заполнение вспомогательных данных. ЗапретРедактированияРолей = ПользователиСлужебный.ЗапретРедактированияРолей(); @@ -931,7 +935,7 @@ &НаСервере Процедура ОбновитьОтображаемыйТипПользователя() - Если Объект.ОбъектАвторизации <> Неопределено Тогда + Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект.ОбъектАвторизации)) Тогда Элементы.ОбъектАвторизации.Заголовок = Метаданные.НайтиПоТипу(ТипЗнч(Объект.ОбъектАвторизации)).ПредставлениеОбъекта; КонецЕсли; diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl index 78dc2e1b1..5d00882bf 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl @@ -100,13 +100,13 @@ ИзмененныеГруппы); Если СтарыйОбъектАвторизации <> ОбъектАвторизации Тогда - ИнтеграцияСтандартныхПодсистем.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя( + ИнтеграцияПодсистемБСП.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя( Ссылка, СтарыйОбъектАвторизации, ОбъектАвторизации); КонецЕсли; ПользователиСлужебный.ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости(Ссылка); - ИнтеграцияСтандартныхПодсистем.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + ИнтеграцияПодсистемБСП.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецПроцедуры diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl index e69de29bb..849dfe2b2 100644 --- a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl @@ -0,0 +1,17 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl index 10d4caacf..07d54e3eb 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl @@ -203,7 +203,7 @@ ПользователиСлужебный.ПослеОбновленияСоставовГруппВнешнихПользователей( УчастникиИзменений, ИзмененныеГруппы); - ИнтеграцияСтандартныхПодсистем.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + ИнтеграцияПодсистемБСП.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецПроцедуры @@ -215,14 +215,10 @@ Назначение.Очистить(); - Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл - - ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); - Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); - + ПустыеСсылки = ПользователиСлужебныйПовтИсп.ПустыеСсылкиТиповОбъектовАвторизации(); + Для Каждого ПустаяСсылка Из ПустыеСсылки Цикл НоваяСтрока = Назначение.Добавить(); - НоваяСтрока.ТипПользователей = Значение; - + НоваяСтрока.ТипПользователей = ПустаяСсылка; КонецЦикла; КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form index ae675c72e..cc328ff83 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form @@ -1348,6 +1348,10 @@ Объект.Комментарий None + + OnChange + КомментарийПриИзменении + КомментарийРасширеннаяПодсказка 402 diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index 5b0e4185c..c6ee399e7 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -212,6 +212,8 @@ УправлениеДоступомСлужебный.ПослеЗаписиНаСервереФормыРедактированияРазрешенныхЗначений( ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + + ОбновитьКартинкуКомментария(Элементы.СтраницаКомментарий, Объект.Комментарий); КонецПроцедуры @@ -475,6 +477,13 @@ КонецПроцедуры +&НаКлиенте +Процедура КомментарийПриИзменении(Элемент) + + ОбновитьКартинкуКомментария(Элементы.СтраницаКомментарий, Объект.Комментарий); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыПользователи @@ -949,7 +958,7 @@ Если ТекущийОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда ЗапретитьИзменениеВсегоКромеСоставаУчастников(); - Если Не УправлениеДоступом.ЕстьРоль("ПолныеПрава") Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда ТолькоПросмотр = Истина; ПользователиСлужебныйКлиентСервер.УстановитьДоступностьКнопкиЗаписатьИЗакрыть(ЭтотОбъект); КонецЕсли; @@ -1015,6 +1024,8 @@ КонецЦикла; ОбновитьПользователейГрупп(); + ОбновитьКартинкуКомментария(Элементы.СтраницаКомментарий, Объект.Комментарий); + КонецПроцедуры &НаСервере @@ -1537,4 +1548,11 @@ КонецФункции +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьКартинкуКомментария(Элемент, Комментарий) + + Элемент.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl index 787e099b0..787df382d 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl @@ -145,7 +145,7 @@ ПользователиСлужебный.ПослеОбновленияСоставовГруппПользователей( УчастникиИзменений, ИзмененныеГруппы); - ИнтеграцияСтандартныхПодсистем.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + ИнтеграцияПодсистемБСП.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецПроцедуры diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form index b7a2c1bec..481cc4414 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form @@ -32,7 +32,6 @@ true true - Center CommonPicture.Информация32 @@ -45,6 +44,7 @@ <key>ru</key> <value>Рекомендуется проверить совместимость дополнительных отчетов и обработок с текущей версией программы. + Устаревшие дополнительные отчеты и обработки могут работать некорректно, в этом случае их необходимо обновить (или временно отключить). </value> true @@ -187,6 +187,7 @@ Right + 52 LockOwner true true diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl index b6587ec90..27fc5ee83 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl @@ -2,6 +2,8 @@ &НаКлиенте Процедура ПерейтиКСписку(Команда) + Закрыть(); + Отборы = Новый Структура; Отборы.Вставить("Публикация", ПредопределенноеЗначение("Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется")); Отборы.Вставить("ПометкаУдаления", Ложь); diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index 2946f222b..dce8b8923 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -1025,15 +1025,16 @@ &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеБыстрогоДоступаПользователей(КоличествоПользователей) + Если КоличествоПользователей = 0 Тогда Возврат НСтр("ru = 'Нет'"); КонецЕсли; - БыстрыйДоступПредставление = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( - КоличествоПользователей, - НСтр("ru = 'пользователь'") + "," + НСтр("ru = 'пользователя'") + "," + НСтр("ru = 'пользователей'")); + БыстрыйДоступПредставление = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка( + НСтр("ru = ';%1 пользователь;;%1 пользователя;%1 пользователей;%1 пользователя'"), КоличествоПользователей); Возврат БыстрыйДоступПредставление; + КонецФункции //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form index 55c10f6da..32ec82304 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form @@ -142,10 +142,6 @@ Left true - - AutoComplete - ФильтрПоПредметуАвтоПодбор - 25 true true diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html index a97a90a69..72b3b819d 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html @@ -1,6 +1,6 @@

Список предназначен для работы с заметками. В списке находятся все заметки, созданные Вами в программе.

-

Открывается по команде Все заметки в разделе Органайзер.

+

Открывается по команде Все заметки.

В программе можно вести заметки - произвольную текстовую информацию, для которой не получается подобрать какого-либо подходящего справочника или документа и которая никому больше не должна быть доступна. Заметки доступны только их автору.

В заметки не следует помещать информацию, для хранения которой в программе предусмотрены соответствующие списки или документы. 

Заметки можно отмечать цветом, помещать на рабочий стол, объединять в группы. Заметки, которые видны на рабочем столе, в списках отмечены жирным шрифтом.

diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl index c9d36f092..47fc0c228 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl @@ -41,11 +41,6 @@ Список.Параметры.УстановитьЗначениеПараметра("Предмет", "%" + ВыбранныйПредмет + "%"); КонецПроцедуры -&НаКлиенте -Процедура ФильтрПоПредметуАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - Список.Параметры.УстановитьЗначениеПараметра("Предмет", "%" + Текст + "%"); -КонецПроцедуры - &НаКлиенте Процедура ФильтрПоЦветуПриИзменении(Элемент) Список.Параметры.УстановитьЗначениеПараметра("Пометка", ВыбранныйЦвет); diff --git a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html index 6ab559f74..adc978dda 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html @@ -3,7 +3,7 @@

Открывается из карточки объекта программы по команде Мои заметки панели навигации.

В списках объекты, с которыми связаны заметки, помечены значком .

Также заметки можно размещать на рабочем столе программы (для этого в окне заметки предусмотрен флажок), вводить на рабочем столе программы без связи с каким-либо предметом, использовать их вместо записной книжки или "стикеров на краях монитора".

-

Для того чтобы просмотреть все заметки, введенные Вами, выполните соответствующую команду на панели навигации раздела Органайзер.

+

Можно также просмотреть все заметки, введенные Вами, по соответствующей команде.

Заметки, размещенные на рабочем столе программы, выделены в списке жирным шрифтом.

В списке выводится:

  • diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html index 71d35478e..a6a382f0d 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html @@ -7,5 +7,5 @@

    Часть заметок в списке введены по поводу объектов программы. На панели навигации таких объектов имеется команда Мои заметки для просмотра списка заметок, связанных с ними. В списках эти объекты помечены значком . В этом случае в заметке поле Предмет автоматически заполняется ссылкой на объект программы.

    Ввод заметки

    • Нажмите Создать. Заполните необходимые поля. Введенная заметка будет существовать самостоятельно, без привязки к предмету.

    Просмотр всех заметок

    -
    • Выполните соответствующую команду на панели навигации  раздела Органайзер.

    См. также:

    +
    • Выполните соответствующую команду для просмотра списка Все заметки.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Help/ru.html index ea8f477d0..cf0b9bdb2 100644 --- a/SSL/src/Catalogs/Заметки/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Help/ru.html @@ -2,7 +2,6 @@

    Предназначен для управления заметками.

    Список Заметки относится к внутренним данным для администратора. Полезен для контроля всех заметок в программе, введенными всеми пользователями в программе.

    Для работы со своими заметками и ввода заметок используйте списки Все заметки или Мои заметки рабочего стола. Группы, введенные в списке Все заметки,  отражаются также и в этом списке.

    -

    Открывается по команде Органайзер - Заметки пользователя - Внутренние данные - Заметки.

    В программе можно вести заметки - произвольную текстовую информацию, для которой не получается подобрать какого-либо подходящего справочника или документа, и которая никому больше не должна быть доступна. Совместно с напоминаниями заметки хорошо подходят в качестве электронной замены "стикеров на краях монитора".

    В заметке можно быстро на короткое время записать какую-либо информацию, а затем перенести в более подходящий справочник (например, можно использовать заметку как временное место для быстрой записи адреса во время телефонного разговора с клиентом, для того чтобы затем не спеша перенести этот адрес в справочник Контрагенты). Также можно использовать заметки и для хранения информации, которая актуальна в течение длительного времени (например, как записную книжку, в которой можно сделать запись о дне рождения важного для вас клиента).

    Заметки можно отмечать цветом, помещать на рабочий стол, объединять в группы. Заметки доступны только их автору.

    diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl index 02678ac48..a0fa9eb9c 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl @@ -33,6 +33,7 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере Процедура УстановитьЗаголовок() ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl index 7c9b227ce..bdf51f9d1 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl @@ -72,6 +72,7 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере Процедура УстановитьЗаголовок() ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl index a1a28a61c..ecae78cce 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl @@ -72,6 +72,7 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере Процедура УстановитьЗаголовок() ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index 8b35b265c..d5d357713 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -562,7 +562,7 @@ ОбновитьДанные(ЕстьТекущиеИзменения, ЕстьУдаленные, ТолькоПроверка, ЕстьКритичныеИзменения, СписокКритичныхИзменений, ОбъектыРасширений); - + Если ЕстьТекущиеИзменения Тогда ЕстьИзменения = Истина; КонецЕсли; @@ -828,7 +828,7 @@ Итог.Вставить("ПорядокБиблиотек", Новый Соответствие); ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных(Итог); - ИнтеграцияСтандартныхПодсистем.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + ИнтеграцияПодсистемБСП.ПриДобавленииПереименованийОбъектовМетаданных(Итог); ТаблицаПереименования.Сортировать( "ПорядокБиблиотеки ВОЗР, @@ -1251,7 +1251,9 @@ РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); КонецЕсли; - Если Не ОбъектыРасширений И ПланыОбмена.ГлавныйУзел() = Неопределено Тогда + Если Не ОбъектыРасширений + И Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + ПодготовитьСписокНовыхПодсистемВГлавномУзле(Выгрузка); КонецЕсли; КонецЕсли; @@ -2694,9 +2696,8 @@ НомерОшибки = НомерОшибки + 1; ТекстВсехОшибок = ТекстВсехОшибок + ?(НомерОшибки = 1, "", Разделитель) + ОписаниеОшибки; Если НомерОшибки = 3 И КоличествоОшибок > 5 Тогда - ПредставлениеКоличества = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( - КоличествоОшибок - НомерОшибки, - НСтр("ru = 'ошибка,ошибки,ошибок'")); + ПредставлениеКоличества = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка( + НСтр("ru = ';%1 ошибка;; %1 ошибки; %1 ошибок; %1 ошибки'"), (КоличествоОшибок - НомерОшибки)); ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '... И еще %1'"), ПредставлениеКоличества); diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form index 33d786b37..9a80d5b16 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form @@ -110,7 +110,7 @@ true - Список.Ref + Список.Ссылка СсылкаРасширеннаяПодсказка @@ -146,7 +146,7 @@ true - Список.Description + Список.Наименование true @@ -486,31 +486,58 @@ Список.Ref + + Список.Ссылка + Список.ТребуетЗаполнения
    true
    ВЫБРАТЬ - СправочникГрафикиРаботы.Ссылка, - СправочникГрафикиРаботы.ВерсияДанных, - СправочникГрафикиРаботы.ПометкаУдаления, - СправочникГрафикиРаботы.Предопределенный, - СправочникГрафикиРаботы.Родитель, - СправочникГрафикиРаботы.ЭтоГруппа, - СправочникГрафикиРаботы.Наименование, - СправочникГрафикиРаботы.ПроизводственныйКалендарь, - СправочникГрафикиРаботы.СпособЗаполнения, - СправочникГрафикиРаботы.ДатаНачала, - СправочникГрафикиРаботы.ДатаОкончания, - СправочникГрафикиРаботы.ДатаОтсчета, - СправочникГрафикиРаботы.УчитыватьПраздники, - СправочникГрафикиРаботы.Описание, - СправочникГрафикиРаботы.УдалитьВидКалендаря, - СправочникГрафикиРаботы.ГоризонтПланирования, - СправочникГрафикиРаботы.ВладелецГрафика, + КалендарныеГрафики.Календарь КАК ГрафикРаботы, + МАКСИМУМ(КалендарныеГрафики.ДатаГрафика) КАК ДатаЗаполненности +ПОМЕСТИТЬ ВТДатыЗаполненностиГрафиков +ИЗ + РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики + +СГРУППИРОВАТЬ ПО + КалендарныеГрафики.Календарь +; + +//////////////////////////////////////////////////////////////////////////////// +ВЫБРАТЬ + ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь, + МАКСИМУМ(ДанныеПроизводственныхКалендарей.Дата) КАК ДатаЗаполненности +ПОМЕСТИТЬ ВТДатыЗаполненностиКалендарей +ИЗ + РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственныхКалендарей + +СГРУППИРОВАТЬ ПО + ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь +; + +//////////////////////////////////////////////////////////////////////////////// +ВЫБРАТЬ + СправочникГрафикиРаботы.Ссылка КАК Ссылка, + СправочникГрафикиРаботы.ВерсияДанных КАК ВерсияДанных, + СправочникГрафикиРаботы.ПометкаУдаления КАК ПометкаУдаления, + СправочникГрафикиРаботы.Предопределенный КАК Предопределенный, + СправочникГрафикиРаботы.Родитель КАК Родитель, + СправочникГрафикиРаботы.ЭтоГруппа КАК ЭтоГруппа, + СправочникГрафикиРаботы.Наименование КАК Наименование, + СправочникГрафикиРаботы.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь, + СправочникГрафикиРаботы.СпособЗаполнения КАК СпособЗаполнения, + СправочникГрафикиРаботы.ДатаНачала КАК ДатаНачала, + СправочникГрафикиРаботы.ДатаОкончания КАК ДатаОкончания, + СправочникГрафикиРаботы.ДатаОтсчета КАК ДатаОтсчета, + СправочникГрафикиРаботы.УчитыватьПраздники КАК УчитыватьПраздники, + СправочникГрафикиРаботы.Описание КАК Описание, + СправочникГрафикиРаботы.УдалитьВидКалендаря КАК УдалитьВидКалендаря, + СправочникГрафикиРаботы.ГоризонтПланирования КАК ГоризонтПланирования, + СправочникГрафикиРаботы.ВладелецГрафика КАК ВладелецГрафика, ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) КАК ДатаНеобходимойЗаполненности, - ДанныеГрафиков.ДатаЗаполненности, + ДанныеГрафиков.ДатаЗаполненности КАК ДатаЗаполненности, ДанныеПроизводственныхКалендарей.ДатаЗаполненности КАК ДатаЗаполненностиПроизводственногоКалендаря, ВЫБОР КОГДА ДанныеГрафиков.ДатаЗаполненности < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) @@ -542,23 +569,9 @@ КОНЕЦ КАК ВозможнаяПричина ИЗ Справочник.Календари КАК СправочникГрафикиРаботы - ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - КалендарныеГрафики.Календарь КАК ГрафикРаботы, - МАКСИМУМ(КалендарныеГрафики.ДатаГрафика) КАК ДатаЗаполненности - ИЗ - РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики - - СГРУППИРОВАТЬ ПО - КалендарныеГрафики.Календарь) КАК ДанныеГрафиков + ЛЕВОЕ СОЕДИНЕНИЕ ВТДатыЗаполненностиГрафиков КАК ДанныеГрафиков ПО СправочникГрафикиРаботы.Ссылка = ДанныеГрафиков.ГрафикРаботы - ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь, - МАКСИМУМ(ДанныеПроизводственныхКалендарей.Дата) КАК ДатаЗаполненности - ИЗ - РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственныхКалендарей - - СГРУППИРОВАТЬ ПО - ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь) КАК ДанныеПроизводственныхКалендарей + ЛЕВОЕ СОЕДИНЕНИЕ ВТДатыЗаполненностиКалендарей КАК ДанныеПроизводственныхКалендарей ПО СправочникГрафикиРаботы.ПроизводственныйКалендарь = ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь Catalog.Календари true diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index a9a088da3..7f4e4dd20 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -37,7 +37,7 @@ СформироватьШаблонЗаполнения(Объект.СпособЗаполнения, Объект.ШаблонЗаполнения, ДлинаЦикла, Объект.ДатаОтсчета); - ЗаполнитьПредставлениеРасписания(); + ЗаполнитьПредставлениеРасписания(ЭтотОбъект); УстановитьДоступностьУчитыватьПраздники(ЭтотОбъект); @@ -60,7 +60,7 @@ СформироватьШаблонЗаполнения(Объект.СпособЗаполнения, Объект.ШаблонЗаполнения, ДлинаЦикла, Объект.ДатаОтсчета); - ЗаполнитьПредставлениеРасписания(); + ЗаполнитьПредставлениеРасписания(ЭтотОбъект); УстановитьДоступностьУчитыватьПраздники(ЭтотОбъект); @@ -148,7 +148,7 @@ СформироватьШаблонЗаполнения(Объект.СпособЗаполнения, Объект.ШаблонЗаполнения, ДлинаЦикла, Объект.ДатаОтсчета); - ЗаполнитьПредставлениеРасписания(); + ЗаполнитьПредставлениеРасписания(ЭтотОбъект); УточнитьДатуЗаполненности(); @@ -227,7 +227,8 @@ УточнитьДатуОтсчета(); СформироватьШаблонЗаполнения(Объект.СпособЗаполнения, Объект.ШаблонЗаполнения, ДлинаЦикла, Объект.ДатаОтсчета); - + ЗаполнитьПредставлениеРасписания(ЭтотОбъект); + УстановитьСнятьПризнакСоответствияРезультатовШаблону(ЭтотОбъект, Ложь); УстановитьСнятьМодифицированностьШаблона(ЭтотОбъект, Истина); @@ -258,7 +259,8 @@ Процедура ДлинаЦиклаПриИзменении(Элемент) СформироватьШаблонЗаполнения(Объект.СпособЗаполнения, Объект.ШаблонЗаполнения, ДлинаЦикла, Объект.ДатаОтсчета); - + ЗаполнитьПредставлениеРасписания(ЭтотОбъект); + УстановитьСнятьПризнакСоответствияРезультатовШаблону(ЭтотОбъект, Ложь); УстановитьСнятьМодифицированностьШаблона(ЭтотОбъект, Истина); @@ -558,14 +560,14 @@ КонецПроцедуры -&НаСервере -Процедура ЗаполнитьПредставлениеРасписания() +&НаКлиентеНаСервереБезКонтекста +Процедура ЗаполнитьПредставлениеРасписания(Форма) - Для Каждого СтрокаШаблона Из Объект.ШаблонЗаполнения Цикл - СтрокаШаблона.ПредставлениеРасписания = ПредставлениеРасписанияДня(ЭтотОбъект, СтрокаШаблона.НомерСтроки); + Для Каждого СтрокаШаблона Из Форма.Объект.ШаблонЗаполнения Цикл + СтрокаШаблона.ПредставлениеРасписания = ПредставлениеРасписанияДня(Форма, СтрокаШаблона.НомерСтроки); КонецЦикла; - РасписаниеПредпраздничногоДня = ПредставлениеРасписанияДня(ЭтотОбъект, 0); + РасписаниеПредпраздничногоДня = ПредставлениеРасписанияДня(Форма, 0); КонецПроцедуры diff --git a/SSL/src/Catalogs/Календари/ManagerModule.bsl b/SSL/src/Catalogs/Календари/ManagerModule.bsl index 4ade63da1..87728fbae 100644 --- a/SSL/src/Catalogs/Календари/ManagerModule.bsl +++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl @@ -477,10 +477,11 @@ НомерДня = ДеньНедели(?(ЗначениеЗаполнено(ДанныеДня.ДатаПереноса), ДанныеДня.ДатаПереноса, ДанныеДня.Дата)); КонецЕсли; ПраздничныйДень = УчитыватьПраздники И ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник; + НерабочийДень = УчитыватьПраздники И ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Нерабочий; КонецЕсли; СтрокаДня = ШаблонЗаполнения[НомерДня - 1]; - Если СтрокаДня.ДеньВключенВГрафик И Не ПраздничныйДень Тогда + Если СтрокаДня.ДеньВключенВГрафик И Не ПраздничныйДень И Не НерабочийДень Тогда ДниВключенныеВГрафик.Вставить(ДатаДня, Истина); КонецЕсли; @@ -519,8 +520,14 @@ Возврат ДниВключенныеВГрафик; КонецЕсли; - ДанныеПраздничныхДней = ДанныеПроизводственногоКалендаря.НайтиСтроки(Новый Структура("ВидДня", Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник)); - + ОтборСтрок = Новый Структура("ВидДня"); + ОтборСтрок.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник; + ДанныеПраздничныхДней = ДанныеПроизводственногоКалендаря.НайтиСтроки(ОтборСтрок); + Для Каждого ДанныеДня Из ДанныеПраздничныхДней Цикл + ДниВключенныеВГрафик.Удалить(ДанныеДня.Дата); + КонецЦикла; + ОтборСтрок.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Нерабочий; + ДанныеПраздничныхДней = ДанныеПроизводственногоКалендаря.НайтиСтроки(ОтборСтрок); Для Каждого ДанныеДня Из ДанныеПраздничныхДней Цикл ДниВключенныеВГрафик.Удалить(ДанныеДня.Дата); КонецЦикла; diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html index 40a50e93b..88e9b6d56 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html @@ -1,11 +1,11 @@

    Описание свойств ключевых операций.

    -

    В программе имеются предопределенные ключевые операции. При необходимости можно добавить новые. В качестве ключевых операций могут выступать различные операции программы, например, проведение документа, формирование отчета и т.п. Для того чтобы оценивать производительность программы, необходимо в начале работы программы заполнить параметры ключевых операций (после установки программы параметры ключевых операций не заполнены).

    +

    В программе имеются предопределенные ключевые операции. При необходимости можно добавить новые. В качестве ключевых операций могут выступать различные операции программы, например, проведение документа, формирование отчета и т.п. Для того чтобы оценивать производительность программы, необходимо в начале работы программы заполнить параметры ключевых операций в профиле ключевых операций (после установки программы параметры ключевых операций не заполнены).

    Сведения о ключевых операциях

    • Наименование - для предопределенных операций заполнено по умолчанию, для вновь вводимых операций необходимо ввести. Поле является обязательным;
    • Приоритет - напишите приоритет каждой операции - целое число, при этом приоритет не должен повторяться. Поле является обязательным;
    • Целевое время - напишите время в секундах. Поле является обязательным;
    • Минимально допустимый уровень - выберите из списка, например, Удовлетворительно.

    Выбранные параметры ключевых операций будут применены при замерах производительности.

    Контроль замеров времени

    -
    • В ходе оценки производительности работы программы производятся замеры времени по каждой ключевой операции. Для просмотра истории замеров по каждой ключевой операции нажмите Замеры времени на панели навигации.

    См. также:

    +
    • В ходе оценки производительности работы программы производятся замеры времени по каждой ключевой операции. Для просмотра истории замеров по каждой ключевой операции нажмите Замеры времени на панели навигации.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html b/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html index c3496b010..9e34898a5 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html +++ b/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html @@ -1,12 +1,12 @@

    Предназначен для хранения параметров ключевых операций.

    -

    Параметры ключевых операций необходимы для оценки производительности работы программы. В программе предусмотрены встроенные средства для сбора и анализа данных о производительности работы по APDEX, которая является международным стандартом оценки производительности информационных систем.

    +

    Параметры ключевых операций необходимы для оценки производительности работы программы. В программе предусмотрены встроенные средства для сбора и анализа данных о производительности работы по APDEX, которая является международным стандартом оценки производительности информационных систем.

    Список открывается по команде Ключевые операции раздела Сервисные подсистемы.

    Для того чтобы оценивать производительность программы, необходимо в начале работы программы заполнить параметры ключевых операций (после установки программы параметры ключевых операций не заполнены). В программе имеются предопределенные ключевые операции. При необходимости можно добавить операции в список. Перечислены различные операции программы, например, проведение документа, формирование отчета и т.п. В списке выводятся сведения:

    • Наименование - полное наименование операции;
    • Приоритет - целое число, при этом приоритет не должен повторяться;
    • Целевое время - время, затраченное на операцию в секундах; -
    • Минимально допустимый уровень - для сравнения взяты оценки по apdex в цифровом выражении, например, Удовлетворительно (apdex > = 0.75).

    Выбранные параметры ключевых операций будут применены при замерах производительности.

    +
  • Минимально допустимый уровень - для сравнения взяты оценки по apdex в цифровом выражении, например, Удовлетворительно (apdex > = 0.75).

Выбранные параметры ключевых операций будут применены при замерах производительности.

Заполнение сведений о ключевых операциях

  • Выделите имеющиеся в списке ключевую операцию, нажмите Еще - Изменить и заполните необходимые поля.
  • Также можно воспользоваться двойным щелчком мыши.

Ввод новой ключевой операции

diff --git a/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo b/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo index 5dae38b50..fa43989ed 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo +++ b/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo @@ -187,7 +187,6 @@ - ShowError Index Use @@ -260,6 +259,25 @@ Index Use + + Длительная + + ru + Длительная + + + Boolean + + + ru + Свойство ключевой операции замера. Для длительных ключевых операций рассчитывается удельное время выполнения. + + + + + Index + Use + ФормаЭлемента diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form index c3120e2bd..0bf5f1639 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form @@ -461,33 +461,6 @@ Normal
- - ОткрытьСписокПапокИФайлов - 30 - true - true - - true - - - ОткрытьСписокПапокИФайловExtendedTooltip - 40 - Label - true - true - - Left - - - UsualButton - Form.Command.ОткрытьСписокПапокИФайлов - Normal - Auto - true - true - UserCmds - Auto - ФормаКоманднаяПанель -1 @@ -627,28 +600,6 @@ true - - ОткрытьСписокПапокИФайлов - - <key>ru</key> - <value>Открыть список папок и файлов</value> - - 1 - - ru - Открыть список папок и файлов - - - true - - - - ОткрытьСписокПапокИФайлов - - - DontUse - Auto - НастроитьСинхронизацию diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index 56f23ac60..5da54ca76 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -26,16 +26,7 @@ ОбновитьПолныйПуть(); ОбновитьПояснениеОблачногоСервиса(); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); - - Если Не МодульУправлениеДоступом.ЕстьРоль("НастройкаСинхронизацииФайлов") Тогда - Элементы.ФормаНастроитьСинхронизацию.Видимость = Ложь; - КонецЕсли; - - КонецЕсли; + Элементы.ФормаНастроитьСинхронизацию.Видимость = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов); КонецПроцедуры @@ -164,14 +155,6 @@ #Область ОбработчикиКомандФормы -&НаКлиенте -Процедура ОткрытьСписокПапокИФайлов(Команда) - - ПараметрыФормы = Новый Структура("Папка", Объект.Ссылка); - ОткрытьФорму("Справочник.Файлы.Форма.Файлы", ПараметрыФормы, ,Объект.Ссылка); - -КонецПроцедуры - &НаКлиенте Процедура НастроитьСинхронизацию(Команда) diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl index 34ee6e2ec..78b10ccf4 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl @@ -142,7 +142,7 @@ КонецПроцедуры -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) ДатаСоздания = ТекущаяДатаСеанса(); Ответственный = Пользователи.ТекущийПользователь(); КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl index ba8275800..a5baea76c 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl @@ -48,7 +48,7 @@ &НаСервере Процедура СоздатьЗапросНаСменуПочты() - ИнтеграцияСтандартныхПодсистем.ПриСозданииЗапросаНаСменуПочты(НоваяПочта, + ИнтеграцияПодсистемБСП.ПриСозданииЗапросаНаСменуПочты(НоваяПочта, Пользователь, ПарольПользователяСервиса); КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl index fba5f4afd..ca9c1d056 100644 --- a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl @@ -113,7 +113,7 @@ ПользователиСлужебный.ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости(Ссылка); - ИнтеграцияСтандартныхПодсистем.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + ИнтеграцияПодсистемБСП.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецПроцедуры diff --git a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo index 4f8da0b34..eca38d161 100644 --- a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo +++ b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo @@ -94,7 +94,6 @@ </standardAttributes> <createOnInput>Use</createOnInput> <dataLockControlMode>Managed</dataLockControlMode> - <fullTextSearch>Use</fullTextSearch> <objectPresentation> <key>ru</key> <value>Пользовательская настройка отчета</value> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl index 1521c0889..790e38520 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl @@ -1,5 +1,35 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Код"); + Результат.Добавить("Наименование"); + Результат.Добавить("КомпоновщикНастроек"); + Результат.Добавить("ПомещатьВПапку"); + Результат.Добавить("РеквизитДопУпорядочивания"); + Результат.Добавить("ПредставлениеОтбора"); + Возврат Результат; + +КонецФункции + +// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + +#КонецОбласти + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Применяет правила обработки писем. @@ -142,32 +172,6 @@ КонецПроцедуры -#Область ДляВызоваИзДругихПодсистем - -// СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов - -// Возвращает реквизиты объекта, которые не рекомендуется редактировать -// с помощью обработки группового изменения реквизитов. -// -// Возвращаемое значение: -// Массив - список имен реквизитов объекта. -Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт - - Результат = Новый Массив; - Результат.Добавить("Код"); - Результат.Добавить("Наименование"); - Результат.Добавить("КомпоновщикНастроек"); - Результат.Добавить("ПомещатьВПапку"); - Результат.Добавить("РеквизитДопУпорядочивания"); - Результат.Добавить("ПредставлениеОтбора"); - Возврат Результат; - -КонецФункции - -// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов - -#КонецОбласти - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..a003e67ae --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <item xsi:type="OrderItemField"> + <field>Наименование</field> + <orderType>Asc</orderType> + </item> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> + <itemsViewMode>Normal</itemsViewMode> + <itemsUserSettingID>911b6018-f537-43e8-a417-da56b22f9aec</itemsUserSettingID> +</Settings> diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..13611ae4f --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form @@ -0,0 +1,800 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>ГруппаПользовательскихНастроек</name> + <id>117</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа пользовательских настроек</value> + + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + КоманднаяПанель + 119 + + ФормаГруппаДействий + 123 + + ФормаВыполнитьПроверку + 125 + true + true + + true + + + ФормаВыполнитьПроверкуРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Form.Command.ВыполнитьПроверку + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа действий</value> + + + ФормаГруппаДействийРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Список + 1 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + Choose + Copy + Create + CreateFolder + LevelDown + LevelUp + + Использование + 100 + true + true + + true + + + Список.Использование + + None + + ИспользованиеРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + ИспользованиеКонтекстноеМеню + 101 + true + + CheckBoxField + Enter + true + Left + true + + + + Наименование + 127 + true + true + + true + + + Список.Наименование + + + НаименованиеРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 128 + true + + LabelField + Enter + true + Left + true + + true + true + + + + РегламентноеЗаданиеПредставление + 8 + + <key>ru</key> + <value>Выполняется</value> + + true + true + + true + + + Список.РегламентноеЗаданиеПредставление + + + РегламентноеЗаданиеПредставлениеExtendedTooltip + 14 + Label + true + true + + Left + + + + РегламентноеЗаданиеПредставлениеКонтекстноеМеню + 9 + true + + LabelField + Enter + true + true + Left + true + + true + true + + + + Важность + 48 + + <key>ru</key> + <value>Важность проблемы</value> + + true + true + + true + + + Список.ВажностьПроблемы + + + ru + Статус проблем, регистрируемых проверкой + + + ВажностьРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ВажностьКонтекстноеМеню + 49 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СпособВыполнения + 51 + + <key>ru</key> + <value>Запуск</value> + + true + + true + + + Список.СпособВыполнения + + + ru + Способ выполнения проверки + + + СпособВыполненияРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + СпособВыполненияКонтекстноеМеню + 52 + true + + LabelField + Enter + Left + true + + true + true + + + + ИдентификаторРегламентногоЗадания + 142 + true + + true + + + Список.ИдентификаторРегламентногоЗадания + + + ИдентификаторРегламентногоЗаданияРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + ИдентификаторРегламентногоЗаданияКонтекстноеМеню + 143 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ЭтоГруппа + 139 + true + + true + + + Список.ЭтоГруппа + + + ЭтоГруппаРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + ЭтоГруппаКонтекстноеМеню + 140 + true + + CheckBoxField + Enter + true + Left + true + + + + Ссылка + 136 + true + + true + + + Список.Ссылка + + + СсылкаРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 137 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + BeforeAddRow + СписокПередНачаломДобавления + + + OnActivateRow + СписокПриАктивизацииСтроки + + + СписокСтрокаПоиска + 19 + + СписокСтрокаПоискаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 20 + true + + Список + + true + + + + СписокСостояниеПросмотра + 22 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 23 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 25 + + СписокУправлениеПоискомРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 26 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + + СписокКонтекстноеМенюВыполнитьПроверку + 17 + true + true + + true + + + СписокКонтекстноеМенюВыполнитьПроверкуРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Form.Command.ВыполнитьПроверку + Normal + Auto + true + true + UserCmds + Auto + + true + + Tree + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandAllLevels + true + true + + Список.DefaultPicture + + true + + + OnGetDataAtServer + СписокПриПолученииДанныхНаСервере + + true + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + true + + true + true + ГруппаПользовательскихНастроек + +
+ + ПредставлениеОбщегоРасписания + 114 + + <key>ru</key> + <value><Представление общего расписания></value> + + true + true + + true + + + ПредставлениеОбщегоРасписанияРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ПредставлениеОбщегоРасписанияКонтекстноеМеню + 115 + true + + Label + true + + + URLProcessing + ПредставлениеОбщегоРасписанияОбработкаНавигационнойСсылки + + Left + Center + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + Copy + Create + CreateFolder + Delete + LevelDown + LevelUp + SetDeletionMark + DontBlock + Use + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + + <key>ru</key> + <value>Список</value> + + 1 + + DynamicList + + + true + + + true + + + Список.Ref + + + Список.ВыполняетсяТолькоВКонтексте + + + Список.Используется + + + Список.КонтекстВыполнения + + + Список.Кор_НастройкаРегламентов_ИдентификаторРегламентногоЗадания + + + Список.ИдентификаторРегламентногоЗадания + + + Список.СпособВыполнения + + + Список.Ссылка + + + Список.ЭтоГруппа + +
true
+ + ВЫБРАТЬ + Проверки.Родитель КАК Родитель, + Проверки.Ссылка КАК Ссылка, + Проверки.ВерсияДанных КАК ВерсияДанных, + Проверки.ПометкаУдаления КАК ПометкаУдаления, + Проверки.Предопределенный КАК Предопределенный, + Проверки.Наименование КАК Наименование, + Проверки.ВажностьПроблемы КАК ВажностьПроблемы, + Проверки.Идентификатор КАК Идентификатор, + Проверки.СпособВыполнения КАК СпособВыполнения, + Проверки.Использование КАК Использование, + ВЫРАЗИТЬ("" КАК СТРОКА(128)) КАК РегламентноеЗаданиеПредставление, + Проверки.ЭтоГруппа КАК ЭтоГруппа, + Проверки.ИдентификаторРегламентногоЗадания КАК ИдентификаторРегламентногоЗадания +ИЗ + Справочник.ПравилаПроверкиУчета КАК Проверки + Catalog.ПравилаПроверкиУчета + true + true + true + true + true + +
+ + ПредставлениеОбщегоРасписания + + <key>ru</key> + <value>Представление общего расписания</value> + + 14 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 15 + + + true + + + true + + + + ВыполнитьПроверку + + <key>ru</key> + <value>Выполнить проверку</value> + + 1 + + ru + Выполнить проверку состояния системы + + + true + + + StdPicture.GenerateReport + + + + ВыполнитьПроверку + + + TextPicture + DontUse + Auto + + + + + + + diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..259742e05 --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,340 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + МодульПользователи = ОбщегоНазначения.ОбщийМодуль("Пользователи"); + Если Не ( (Не ОбщегоНазначения.РазделениеВключено() И МодульПользователи.ЭтоПолноправныйПользователь()) + Или (ОбщегоНазначения.РазделениеВключено() И МодульПользователи.ЭтоПолноправныйПользователь(, Истина)) ) Тогда + + Элементы.ПредставлениеОбщегоРасписания.Видимость = Ложь; + Элементы.РегламентноеЗаданиеПредставление.Видимость = Ложь; + + Иначе + + ОбщееРегламентноеЗадание = РегламентныеЗаданияСервер.Задание(Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); + Если ОбщееРегламентноеЗадание <> Неопределено Тогда + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + ОбщееРасписаниеПредставление = Строка(ОбщееРегламентноеЗадание.Расписание) + Иначе + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ОбщееРасписаниеПредставление = Строка(ОбщееРегламентноеЗадание.Шаблон.Расписание.Получить()); + Элементы.РегламентноеЗаданиеПредставление.Видимость = Истина; + Иначе + Элементы.РегламентноеЗаданиеПредставление.Видимость = Ложь; + Элементы.ПредставлениеОбщегоРасписания.Видимость = Ложь; + ОбщееРасписаниеПредставление = ""; + КонецЕсли; + КонецЕсли; + Иначе + Если (ОбщегоНазначения.РазделениеВключено() И Пользователи.ЭтоПолноправныйПользователь(, Истина)) Или Не ОбщегоНазначения.РазделениеВключено() Тогда + ОбщееРасписаниеПредставление = НСтр("ru = 'Не найдено общее регламентное задание'"); + Иначе + ОбщееРасписаниеПредставление = ""; + Элементы.ПредставлениеОбщегоРасписания.Видимость = Ложь; + КонецЕсли; + КонецЕсли; + + Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ПредставлениеОбщегоРасписания", ОбщееРасписаниеПредставление); + + Элементы.ПредставлениеОбщегоРасписания.Заголовок = СформироватьСтрокуСРасписанием(); + + КонецЕсли; + + Элементы.ПредставлениеОбщегоРасписания.Доступность = РасписаниеДоступно(); + + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + Отказ = Истина; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) + + ДополнительныеСвойстваКомпоновщика = Настройки.ДополнительныеСвойства; + Если Не ДополнительныеСвойстваКомпоновщика.Свойство("ПредставлениеОбщегоРасписания") Тогда + Возврат; + КонецЕсли; + + ПредставлениеОбщегоРасписания = ДополнительныеСвойстваКомпоновщика.ПредставлениеОбщегоРасписания; + + КлючиСтрок = Строки.ПолучитьКлючи(); + Для Каждого КлючСтроки Из КлючиСтрок Цикл + ДанныеСтроки = Строки[КлючСтроки].Данные; + Если ДанныеСтроки.ЭтоГруппа Тогда + Продолжить; + КонецЕсли; + Если ДанныеСтроки.СпособВыполнения = Перечисления.СпособВыполненияПроверки.Вручную Тогда + ДанныеСтроки.РегламентноеЗаданиеПредставление = НСтр("ru = 'Вручную'"); + ИначеЕсли ДанныеСтроки.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию Тогда + ДанныеСтроки.РегламентноеЗаданиеПредставление = НСтр("ru = 'По общему расписанию'") + ИначеЕсли ДанныеСтроки.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОтдельномуРасписанию Тогда + ИдентификаторЗадания = ДанныеСтроки.ИдентификаторРегламентногоЗадания; + Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + ДанныеСтроки.РегламентноеЗаданиеПредставление = НСтр("ru = 'Пустой идентификатор индивидуального задания'"); + Иначе + НайденноеРегламентноеЗадание = РегламентныеЗаданияСервер.Задание(Новый УникальныйИдентификатор(ИдентификаторЗадания)); + Если НайденноеРегламентноеЗадание <> Неопределено Тогда + РасписаниеСтрокой = Строка(НайденноеРегламентноеЗадание.Расписание); + Иначе + + ОбъектПравила = КлючСтроки.ПолучитьОбъект(); + + Параметры = Новый Структура; + Параметры.Вставить("Использование", Истина); + Параметры.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); + Параметры.Вставить("Расписание", ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(ОбъектПравила.РасписаниеВыполненияПроверки.Получить())); + + ВосстановленноеЗадание = РегламентныеЗаданияСервер.ДобавитьЗадание(Параметры); + + ПараметрыЗадания = Новый Структура; + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(Строка(ВосстановленноеЗадание.УникальныйИдентификатор)); + ПараметрыЗадания.Вставить("Параметры", МассивПараметров); + + РегламентныеЗаданияСервер.ИзменитьЗадание(ВосстановленноеЗадание.УникальныйИдентификатор, ПараметрыЗадания); + + ОбъектПравила.ИдентификаторРегламентногоЗадания = Строка(ВосстановленноеЗадание.УникальныйИдентификатор); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОбъектПравила); + + РасписаниеСтрокой = Строка(ВосстановленноеЗадание.Расписание); + + КонецЕсли; + ДанныеСтроки.РегламентноеЗаданиеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По расписанию: ""%1""'"), РасписаниеСтрокой); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыполнитьПроверку(Команда) + + ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; + Если ВыделенныеСтроки.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не выделено ни одной проверки в списке. Выполнение невозможно.'"); + КонецЕсли; + + МассивПроверок = ПодготовкаМассиваПроверок(ВыделенныеСтроки); + + Если МассивПроверок.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'В списке выделены одни группы. Выполнение невозможно.'"); + КонецЕсли; + + ДлительнаяОперация = ВыполнитьПроверкиНаСервере(МассивПроверок); + Если ДлительнаяОперация <> Неопределено Тогда + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Истина; + ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Идет выполнение выбранных проверок. Это может занять некоторое время'"); + ПараметрыОжидания.Интервал = 2; + + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, , ПараметрыОжидания); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПодготовкаМассиваПроверок(МассивПроверок) + + ОтфильтрованныйМассив = Новый Массив; + Для Каждого Проверка Из МассивПроверок Цикл + Если Не Проверка.ЭтоГруппа Тогда + ОтфильтрованныйМассив.Добавить(Проверка); + КонецЕсли; + КонецЦикла; + Возврат ОтфильтрованныйМассив; + +КонецФункции + +&НаСервере +Функция ВыполнитьПроверкиНаСервере(МассивПроверок) + + Если МонопольныйРежим() Тогда + Возврат Неопределено; + КонецЕсли; + + Если ДлительнаяОперация <> Неопределено Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(ДлительнаяОперация.ИдентификаторЗадания); + КонецЕсли; + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выполнение списка проверок'"); + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + МассивПараметров = Новый Массив; + Для Каждого Проверка Из МассивПроверок Цикл + + РеквизитыПроверки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Проверка, + "Идентификатор, Наименование, ИдентификаторРегламентногоЗадания, + |ДатаНачалаПроверки, ЛимитПроблем, СпособВыполнения"); + + ПараметрыПроверки = Новый Структура; + ПараметрыПроверки.Вставить("Идентификатор", РеквизитыПроверки.Идентификатор); + ПараметрыПроверки.Вставить("Наименование", РеквизитыПроверки.Наименование); + ПараметрыПроверки.Вставить("ИдентификаторРегламентногоЗадания", РеквизитыПроверки.ИдентификаторРегламентногоЗадания); + ПараметрыПроверки.Вставить("ДатаНачалаПроверки", РеквизитыПроверки.ДатаНачалаПроверки); + ПараметрыПроверки.Вставить("ЛимитПроблем", РеквизитыПроверки.ЛимитПроблем); + ПараметрыПроверки.Вставить("СпособВыполнения", РеквизитыПроверки.СпособВыполнения); + ПараметрыПроверки.Вставить("ПроверкаБылаОстановлена", Ложь); + ПараметрыПроверки.Вставить("РучнойЗапуск", Истина); + + МассивПараметров.Добавить(ПараметрыПроверки); + + КонецЦикла; + + Результат = ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ВыполнитьПроверкиВФоновомЗадании", Новый Структура("МассивПараметров", МассивПараметров), ПараметрыВыполнения); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция СформироватьСтрокуСРасписанием() + + ОбщееРегламентноеЗадание = РегламентныеЗаданияСервер.Задание(Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); + Если ОбщееРегламентноеЗадание <> Неопределено Тогда + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + ОбщееРасписание = ОбщееРегламентноеЗадание.Расписание; + ОбщееРасписаниеПредставление = Строка(ОбщееРегламентноеЗадание.Расписание); + Иначе + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ОбщееРасписание = ОбщееРегламентноеЗадание.Шаблон.Расписание.Получить(); + ОбщееРасписаниеПредставление = Строка(ОбщееРасписание); + Иначе + ОбщееРасписание = Неопределено; + ОбщееРасписаниеПредставление = НСтр("ru = 'Просмотр расписания недоступен'"); + КонецЕсли; + КонецЕсли; + Иначе + ОбщееРасписание = Неопределено; + ОбщееРасписаниеПредставление = НСтр("ru = 'Не найдено общее регламентное задание'"); + КонецЕсли; + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + + ТекстоваяСсылка = ПоместитьВоВременноеХранилище(ОбщееРасписание, УникальныйИдентификатор); + + Возврат Новый ФорматированнаяСтрока(НСтр("ru='Общее расписание выполнения проверок:'") + " ", + Новый ФорматированнаяСтрока(ОбщееРасписаниеПредставление, , , , ТекстоваяСсылка)); + + Иначе + + Возврат Новый ФорматированнаяСтрока(НСтр("ru='Общее расписание выполнения проверок:'") + " ", + Новый ФорматированнаяСтрока(ОбщееРасписаниеПредставление, , ЦветаСтиля.ГиперссылкаЦвет)); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Процедура ПредставлениеОбщегоРасписанияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(ПолучитьИзВременногоХранилища(НавигационнаяСсылкаФорматированнойСтроки)); + Оповещение = Новый ОписаниеОповещения("ПредставлениеОбщегоРасписанияНажатиеНаКлиентеЗавершение", ЭтотОбъект); + Диалог.Показать(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеОбщегоРасписанияНажатиеНаКлиентеЗавершение(Расписание, ДополнительныеПараметры) Экспорт + ПредставлениеОбщегоРасписанияНажатиеНаСервереЗавершение(Расписание, ДополнительныеПараметры); +КонецПроцедуры + +&НаСервере +Процедура ПредставлениеОбщегоРасписанияНажатиеНаСервереЗавершение(Расписание, ДополнительныеПараметры) + + Если Расписание = Неопределено Тогда + Возврат; + КонецЕсли; + + ИдентификаторОбщегоЗадания = РегламентныеЗаданияСервер.УникальныйИдентификатор(Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); + РегламентныеЗаданияСервер.ИзменитьЗадание(ИдентификаторОбщегоЗадания, Новый Структура("Расписание", Расписание)); + + Элементы.ПредставлениеОбщегоРасписания.Заголовок = СформироватьСтрокуСРасписанием(); + + Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ПредставлениеОбщегоРасписания", Строка(Расписание)); + Элементы.Список.Обновить(); + +КонецПроцедуры + +&НаСервере +Функция РасписаниеДоступно() + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПравилаПроверкиУчета.Ссылка КАК ПравилоПроверки + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета"); + Результат = Запрос.Выполнить().Выбрать(); + + Пока Результат.Следующий() Цикл + Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(Результат.ПравилоПроверки).Обработан Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаСервере +Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..33f2c93f8 --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,1173 @@ + + + + ГруппаНаименованиеИспользование + 163 + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеExtendedTooltip + 11 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Использование + 155 + + <key>ru</key> + <value>Использование</value> + + true + true + + true + + + Объект.Использование + + Right + + ИспользованиеРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + ИспользованиеКонтекстноеМеню + 156 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Наименование использование</value> + + + ГруппаНаименованиеИспользованиеРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + Auto + + + + ОсновнаяПанель + 181 + + ПараметрыПроверки + 183 + + ГруппаШапка + 54 + + ПричиныПроблемы + 75 + + <key>ru</key> + <value>Причины проблемы</value> + + true + true + + true + + + Объект.Причины + + Left + + ПричиныПроблемыРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + ПричиныПроблемыКонтекстноеМеню + 76 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Рекомендации + 160 + true + true + + true + + + Объект.Рекомендация + + Left + + РекомендацииРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + РекомендацииКонтекстноеМеню + 161 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ВажностьПроблемы + 49 + + <key>ru</key> + <value>Важность проблемы</value> + + true + true + + true + + + Объект.ВажностьПроблемы + + Left + + ВажностьПроблемыРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ВажностьПроблемыКонтекстноеМеню + 50 + true + + InputField + Enter + true + Left + true + + 16 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Шапка</value> + + + ГруппаШапкаРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаРасписание + 212 + + ВыполняетсяВФонеПоРасписанию + 217 + true + true + + true + + + ВыполняетсяВФонеПоРасписанию + + Right + + OnChange + ВыполняетсяВФонеПоРасписаниюПриИзменении + + + ВыполняетсяВФонеПоРасписаниюРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + ВыполняетсяВФонеПоРасписаниюКонтекстноеМеню + 218 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаНастройкиРасписания + 220 + + СелекторРасписания + 222 + true + true + + true + + + СелекторРасписания + + None + + OnChange + СелекторРасписанияПриИзменении + + + СелекторРасписанияРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + + СелекторРасписанияКонтекстноеМеню + 223 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + по общему расписанию + + + 1 + + + + + ru + по индивидуальному расписанию + + + 2 + + + Vertical + + + + ГруппаПредставленийРасписаний + 225 + + ПредставлениеОбщегоРасписания + 214 + + <key>ru</key> + <value><Представление общего расписания></value> + + true + true + + true + + + ПредставлениеОбщегоРасписанияРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + + ПредставлениеОбщегоРасписанияКонтекстноеМеню + 215 + true + + Label + true + + Left + Center + + + + ПредставлениеИндивидуальногоРасписания + 172 + + <key>ru</key> + <value><Представление индивидуального расписания></value> + + true + true + + true + + + ПредставлениеИндивидуальногоРасписанияРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + + ПредставлениеИндивидуальногоРасписанияКонтекстноеМеню + 173 + true + + Label + true + + + URLProcessing + ПредставлениеИндивидуальногоРасписанияОбработкаНавигационнойСсылки + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Представлений расписаний</value> + + + ГруппаПредставленийРасписанийРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройки расписания</value> + + + ГруппаНастройкиРасписанияРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Расписание проверки</value> + + + ГруппаРасписаниеРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + Button + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры проверки</value> + + + ПараметрыПроверкиРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + Дополнительно + 185 + + ГруппаДатаНачалаЛимитПроблем + 190 + + ДатаНачалаПроверки + 178 + true + true + + true + + + Объект.ДатаНачалаПроверки + + + ДатаНачалаПроверкиРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + + ДатаНачалаПроверкиКонтекстноеМеню + 179 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЛимитПроблем + 192 + true + true + + true + + + Объект.ЛимитПроблем + + + ЛимитПроблемРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + ЛимитПроблемКонтекстноеМеню + 193 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Дата начала лимит проблем</value> + + + ГруппаДатаНачалаЛимитПроблемРасширеннаяПодсказка + 191 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + Auto + Auto + + + + ГруппаДляРазработчика + 198 + + Идентификатор + 78 + true + true + + + Объект.Идентификатор + + + ИдентификаторРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + ИдентификаторКонтекстноеМеню + 79 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ПутьДоПроцедурыОбработчика + 205 + + <key>ru</key> + <value>Процедура проверки</value> + + true + true + + true + + + ПутьДоПроцедурыОбработчика + + + ПутьДоПроцедурыОбработчикаРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + + ПутьДоПроцедурыОбработчикаКонтекстноеМеню + 206 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Для разработчика</value> + + + ГруппаДляРазработчикаРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + true + Button + NormalSeparation + true + true + Equal + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + + ДополнительноРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Основная панель</value> + + + ОсновнаяПанельРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + + + + Комментарий + 195 + true + true + + true + + + Объект.Комментарий + + + КомментарийРасширеннаяПодсказка + 197 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 196 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаВыполнитьПроверку + 17 + true + true + + true + + + ФормаВыполнитьПроверкуРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Form.Command.ВыполнитьПроверку + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьСтандартныеНастройки + 208 + true + true + + true + + + ФормаУстановитьСтандартныеНастройкиРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + Form.Command.УстановитьСтандартныеНастройки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.ПравилаПроверкиУчета + + + true + + + true + +
true
+ true +
+ + АдресИндивидуальногоРасписания + + <key>ru</key> + <value>Адрес индивидуального расписания</value> + + 16 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 17 + + + true + + + true + + + + ПутьДоПроцедурыОбработчика + + <key>ru</key> + <value>Путь до процедуры обработчика</value> + + 18 + + String + + + + true + + + true + + + + ВыполняетсяВФонеПоРасписанию + + <key>ru</key> + <value>Выполняется в фоне по расписанию</value> + + 19 + + Boolean + + + true + + + true + + + + СелекторРасписания + + <key>ru</key> + <value>Селектор расписания</value> + + 20 + + Number + + 1 + + + + true + + + true + + + + ВыполнитьПроверку + + <key>ru</key> + <value>Выполнить проверку</value> + + 1 + + ru + Выполнить проверку состояния системы + + + true + + + StdPicture.GenerateReport + + + + ВыполнитьПроверку + + + TextPicture + DontUse + Auto + + + УстановитьСтандартныеНастройки + + <key>ru</key> + <value>Установить стандартные настройки</value> + + 2 + + ru + Установить стандартные настройки + + + true + + + CommonPicture.СинхронизацияДанныхКоллизия + + + + УстановитьСтандартныеНастройки + + + DontUse + Auto + + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + + + + + OnReadAtServer + ПриЧтенииНаСервере + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + +
diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..873c3b943 --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,31 @@ + +

Предназначена для настройки проверки ведения учета.

+

Открыть проверку можно из списка Проверки ведения учета.

+

По умолчанию все проверки, предусмотренные в программе, уже включены, а часть из них выполняется автоматически в фоне.

+

В редких случаях может возникнуть необходимость что-либо перенастроить. В этом случае можно изменить настройки проверки.

+

В поле Комментарий можно написать дополнительную информацию о проверке.

+

Использование

+
  • Если проверку в данный момент не нужно проводить, ее можно отключить с помощью флажка Использование.

Важность проблемы

+
  • В соответствующем поле можно указать Важность проблемы: +
    • Информация; +
    • Предупреждение; +
    • Ошибка (по умолчанию) +
    • Полезный совет.

Автоматическое выполнение

+
  • +
    Для того чтобы проверка проходила в автоматическом режиме, включите флажок Выполняется в фоне по расписанию.
    +
  • +
    С помощью переключателя можно указать параметры проведения автоматической проверки:
    +
    • +
      По общему расписанию (по умолчанию);
      +
    • +
      По индивидуальному расписанию. После выбора становится доступной ссылка Настроить индивидуальное расписание.

Выполнение проверки вручную

+
  • При необходимости можно произвести в любой момент вручную с помощью кнопки Выполнить проверку.

Дополнительные настройки

+
  • +
    На вкладке Дополнительно можно указать следующие параметры проверки:
    +
    • +
      Дата начала проверки - для документов и других объектов программы, привязанных к временной оси, имеется возможность задания пороговой даты. Например, это полезно для того, чтобы не выполнять проверки в уже закрытых или архивных периодах. По умолчанию эта дата не заполнена, т.е. проверяется все.
      +
    • +
      Лимит проблем - предусмотрена возможность наложить ограничения на количество проблем, выявляемых конкретной проверкой. Например, проверка заполнения обязательных реквизитов в списке с большим количеством элементов может быть ограничена определенным лимитом выводимых проблем.

Возврат к стандартным настройкам

+
  • +
    С помощью команды Еще - Установить стандартные настройки можно вернуть стандартные настройки проверки.

См. также:

+ \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..18e44c590 --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,490 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); + + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда + Отказ = Истина; + ВызватьИсключение НСтр("ru='Интерактивное создание запрещено.'"); + КонецЕсли; + + МетаданныеТекущейПроверки = МетаданныеТекущейПроверки(Объект.Идентификатор); + + УстановитьДоступностьПоляВажности(ЭтотОбъект, МетаданныеТекущейПроверки); + УстановитьПутьДоПроцедурыОбработчика(ЭтотОбъект, МетаданныеТекущейПроверки); + + Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(Объект).Обработан Тогда + + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Ложь; + + Иначе + + УстановитьНачальныеНастройкиРасписания(); + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + СформироватьРасписания(); + Иначе + + МодульПользователи = ОбщегоНазначения.ОбщийМодуль("Пользователи"); + Если МодульПользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + СформироватьРасписания(); + Элементы.ГруппаРасписание.ТолькоПросмотр = Истина; + Иначе + Элементы.ГруппаРасписание.Видимость = Ложь; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если Не ЗначениеЗаполнено(ТекущийОбъект.Код) Тогда + ТекущийОбъект.УстановитьНовыйКод(); + КонецЕсли; + + Если ЗначениеЗаполнено(АдресИндивидуальногоРасписания) Тогда + ТекущийОбъект.РасписаниеВыполненияПроверки = ПолучитьИзВременногоХранилища(АдресИндивидуальногоРасписания); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура ПредставлениеИндивидуальногоРасписанияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ДанныеХранилища = ПолучитьИзВременногоХранилища(НавигационнаяСсылкаФорматированнойСтроки); + Если ДанныеХранилища = "ДобавитьЗадание" Тогда + ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Новый РасписаниеРегламентногоЗадания); + ОповещениеИзменения = Новый ОписаниеОповещения("ДобавитьЗаданиеНаКлиентеЗавершение", ЭтотОбъект); + ДиалогРасписания.Показать(ОповещениеИзменения); + Иначе + ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(ДанныеХранилища); + ОповещениеИзменения = Новый ОписаниеОповещения("ИзменитьЗаданиеНаКлиентеЗавершение", ЭтотОбъект); + ДиалогРасписания.Показать(ОповещениеИзменения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполняетсяВФонеПоРасписаниюПриИзменении(Элемент) + + Если ВыполняетсяВФонеПоРасписанию Тогда + УстановитьНастройкиРасписанияНаСервере(); + Иначе + СкрытьНастройкиРасписанияНаСервере(); + КонецЕсли; + + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура СелекторРасписанияПриИзменении(Элемент) + + УстановитьНастройкиРасписанияНаСервере(); + Модифицированность = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыполнитьПроверку(Команда) + + ДлительнаяОперация = ВыполнитьПроверкуНаСервере(); + Если ДлительнаяОперация <> Неопределено Тогда + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Истина; + ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Идет выполнение проверки. Это может занять некоторое время'"); + ПараметрыОжидания.Интервал = 2; + + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, , ПараметрыОжидания); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСтандартныеНастройки(Команда) + + ТекстВопроса = НСтр("ru = 'Установить стандартные настройки?'"); + Обработчик = Новый ОписаниеОповещения("УстановитьСтандартныеНастройкиНаКлиенте", ЭтотОбъект); + ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ВыполнитьПроверкуНаСервере() + + Если МонопольныйРежим() Тогда + Возврат Неопределено; + КонецЕсли; + + Если ДлительнаяОперация <> Неопределено Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(ДлительнаяОперация.ИдентификаторЗадания); + КонецЕсли; + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнение проверки ""%1""'"), Объект.Наименование); + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + МассивПараметров = Новый Массив; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Идентификатор", Объект.Идентификатор); + ПараметрыЗадания.Вставить("Наименование", Объект.Наименование); + ПараметрыЗадания.Вставить("ИдентификаторРегламентногоЗадания", Объект.ИдентификаторРегламентногоЗадания); + ПараметрыЗадания.Вставить("ДатаНачалаПроверки", Объект.ДатаНачалаПроверки); + ПараметрыЗадания.Вставить("ЛимитПроблем", Объект.ЛимитПроблем); + ПараметрыЗадания.Вставить("СпособВыполнения", Объект.СпособВыполнения); + ПараметрыЗадания.Вставить("ПроверкаБылаОстановлена", Ложь); + ПараметрыЗадания.Вставить("РучнойЗапуск", Истина); + + МассивПараметров.Добавить(ПараметрыЗадания); + + Результат = ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ВыполнитьПроверкиВФоновомЗадании", Новый Структура("МассивПараметров", МассивПараметров), ПараметрыВыполнения); + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура СформироватьРасписания() + + СформироватьСтрокуСОбщимРасписанием(); + СформироватьСтрокуСИндивидуальнымРасписанием(); + +КонецПроцедуры + +&НаСервере +Процедура СформироватьСтрокуСИндивидуальнымРасписанием() + + ИдентификаторРегламентногоЗадания = Объект.ИдентификаторРегламентногоЗадания; + ОтдельноеРегламентноеЗадание = Неопределено; + ОтдельноеРасписаниеПредставление = ""; + + Если ЗначениеЗаполнено(ИдентификаторРегламентногоЗадания) Тогда + ОтдельноеРегламентноеЗадание = РегламентныеЗаданияСервер.Задание(ИдентификаторРегламентногоЗадания); + Если ОтдельноеРегламентноеЗадание <> Неопределено Тогда + ОтдельноеРасписаниеПредставление = Строка(ОтдельноеРегламентноеЗадание.Расписание) + ". "; + КонецЕсли; + КонецЕсли; + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + + Если ОтдельноеРегламентноеЗадание = Неопределено Тогда + Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = + Новый ФорматированнаяСтрока(НСтр("ru='Настроить индивидуальное расписание?'"), , , , ПоместитьВоВременноеХранилище("ДобавитьЗадание", УникальныйИдентификатор)); + Иначе + Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = + Новый ФорматированнаяСтрока(ОтдельноеРасписаниеПредставление, , , , ПоместитьВоВременноеХранилище(ОтдельноеРегламентноеЗадание.Расписание, УникальныйИдентификатор)); + КонецЕсли; + + Иначе + + Если ОтдельноеРегламентноеЗадание = Неопределено Тогда + Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = + Новый ФорматированнаяСтрока(ОтдельноеРасписаниеПредставление + ". ", , ЦветаСтиля.ГиперссылкаЦвет); + Иначе + Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = + Новый ФорматированнаяСтрока(ОтдельноеРасписаниеПредставление, , ЦветаСтиля.ГиперссылкаЦвет); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СформироватьСтрокуСОбщимРасписанием() + + ОбщееРегламентноеЗадание = РегламентныеЗаданияСервер.Задание(Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); + Если ОбщееРегламентноеЗадание <> Неопределено Тогда + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + ОбщееРасписаниеПредставление = Строка(ОбщееРегламентноеЗадание.Расписание); + Иначе + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ОбщееРасписаниеПредставление = Строка(ОбщееРегламентноеЗадание.Шаблон.Расписание.Получить()); + КонецЕсли; + КонецЕсли; + Иначе + ОбщееРасписаниеПредставление = НСтр("ru = 'Не найдено общее регламентное задание'"); + КонецЕсли; + + Элементы.ПредставлениеОбщегоРасписания.Заголовок = + Новый ФорматированнаяСтрока(ОбщееРасписаниеПредставление, , ЦветаСтиля.ГиперссылкаЦвет); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьЗаданиеНаКлиентеЗавершение(Расписание, ДополнительныеПараметры) Экспорт + ИзменитьЗаданиеНаСервереЗавершение(Расписание, ДополнительныеПараметры); +КонецПроцедуры + +&НаСервере +Процедура ИзменитьЗаданиеНаСервереЗавершение(Расписание, ДополнительныеПараметры) + + Если Расписание = Неопределено Тогда + Возврат; + КонецЕсли; + + РегламентноеЗадание = РегламентныеЗаданияСервер.Задание(Объект.ИдентификаторРегламентногоЗадания); + Если РегламентноеЗадание = Неопределено Тогда + ДобавитьЗаданиеНаСервереЗавершение(Расписание, ДополнительныеПараметры); + Иначе + + РегламентныеЗаданияСервер.ИзменитьЗадание(Объект.ИдентификаторРегламентногоЗадания, Новый Структура("Расписание", Расписание)); + Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = + Новый ФорматированнаяСтрока(Строка(Расписание), , , , ПоместитьВоВременноеХранилище(Расписание, УникальныйИдентификатор)); + + АдресИндивидуальногоРасписания = ПоместитьВоВременноеХранилище(Новый ХранилищеЗначения(ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание)), УникальныйИдентификатор); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьЗаданиеНаКлиентеЗавершение(Расписание, ДополнительныеПараметры) Экспорт + ДобавитьЗаданиеНаСервереЗавершение(Расписание, ДополнительныеПараметры); +КонецПроцедуры + +&НаСервере +Процедура ДобавитьЗаданиеНаСервереЗавершение(Расписание, ДополнительныеПараметры) + + Если Расписание = Неопределено Тогда + Возврат; + КонецЕсли; + + КлючЗадания = Строка(Новый УникальныйИдентификатор); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Расписание", Расписание); + ПараметрыЗадания.Вставить("Использование", Истина); + ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); + + РегламентноеЗадание = РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания); + + Объект.ИдентификаторРегламентногоЗадания = Строка(РегламентноеЗадание.УникальныйИдентификатор); + + ПараметрыЗадания = Новый Структура; + + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(Строка(РегламентноеЗадание.УникальныйИдентификатор)); + + ПараметрыЗадания.Вставить("Параметры", МассивПараметров); + РегламентныеЗаданияСервер.ИзменитьЗадание(РегламентноеЗадание.УникальныйИдентификатор, ПараметрыЗадания); + + Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = + Новый ФорматированнаяСтрока(Строка(Расписание), , , , ПоместитьВоВременноеХранилище(Расписание, УникальныйИдентификатор)); + + АдресИндивидуальногоРасписания = ПоместитьВоВременноеХранилище(Новый ХранилищеЗначения(ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание)), УникальныйИдентификатор); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция МетаданныеТекущейПроверки(Идентификатор) + + СтруктураПроверки = Новый Структура; + Проверки = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета().Проверки; + СтрокаПроверки = Проверки.Найти(Идентификатор, "Идентификатор"); + + Если СтрокаПроверки = Неопределено Тогда + Возврат Неопределено; + Иначе + КолонкиПроверок = Проверки.Колонки; + Для Каждого ТекущаяКолонка Из КолонкиПроверок Цикл + СтруктураПроверки.Вставить(ТекущаяКолонка.Имя, СтрокаПроверки[ТекущаяКолонка.Имя]); + КонецЦикла; + КонецЕсли; + + Возврат СтруктураПроверки; + +КонецФункции + +&НаСервереБезКонтекста +Процедура УстановитьДоступностьПоляВажности(Форма, МетаданныеТекущейПроверки) + Форма.Элементы.ВажностьПроблемы.Доступность = Не (МетаданныеТекущейПроверки <> Неопределено И МетаданныеТекущейПроверки.ЗапрещеноИзменениеВажности); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура УстановитьПутьДоПроцедурыОбработчика(Форма, МетаданныеТекущейПроверки) + Форма.ПутьДоПроцедурыОбработчика = ?(МетаданныеТекущейПроверки = Неопределено, НСтр("ru = 'Не задан обработчик'"), МетаданныеТекущейПроверки.ОбработчикПроверки); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСтандартныеНастройкиНаКлиенте(Ответ, ПараметрыВыполнения) Экспорт + + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + + УстановитьСтандартныеНастройкиНаСервере(); + Модифицированность = Истина; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьСтандартныеНастройкиНаСервере() + + МетаданныеТекущейПроверки = МетаданныеТекущейПроверки(Объект.Идентификатор); + Если МетаданныеТекущейПроверки = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Рассинхронизация проверок учета. Проверка с идентификатором ""%1"" не найдена в метаданных.'"), Объект.Идентификатор); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, МетаданныеТекущейПроверки, , "Идентификатор"); + Объект.ПроверкаВеденияУчетаИзменена = Ложь; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьНастройкиРасписанияНаСервере() + + Если СелекторРасписания = 0 Тогда + + Если Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию Тогда + + СелекторРасписания = 1; + + Элементы.СелекторРасписания.Доступность = Истина; + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Истина; + + ИначеЕсли Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОтдельномуРасписанию Тогда + + СелекторРасписания = 2; + + Элементы.СелекторРасписания.Доступность = Истина; + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Истина; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Ложь; + + КонецЕсли; + + ИначеЕсли СелекторРасписания = 1 Тогда + + Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию; + Элементы.СелекторРасписания.Доступность = Истина; + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Истина; + + ИначеЕсли СелекторРасписания = 2 Тогда + + Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОтдельномуРасписанию; + Элементы.СелекторРасписания.Доступность = Истина; + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Истина; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Ложь; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СкрытьНастройкиРасписанияНаСервере() + + Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.Вручную; + Элементы.СелекторРасписания.Доступность = Ложь; + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Ложь; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьНачальныеНастройкиРасписания() + + Если Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию Тогда + + ВыполняетсяВФонеПоРасписанию = Истина; + СелекторРасписания = 1; + + Элементы.СелекторРасписания.Доступность = Истина; + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Истина; + + ИначеЕсли Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОтдельномуРасписанию Тогда + + ВыполняетсяВФонеПоРасписанию = Истина; + СелекторРасписания = 2; + + Элементы.СелекторРасписания.Доступность = Истина; + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Истина; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Ложь; + + Иначе + + ВыполняетсяВФонеПоРасписанию = Ложь; + СелекторРасписания = 1; + + Элементы.СелекторРасписания.Доступность = Ложь; + Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; + Элементы.ПредставлениеОбщегоРасписания.Доступность = Ложь + + КонецЕсли; + +КонецПроцедуры + +// СтандартныеПодсистемы.ПодключаемыеКоманды + +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); +КонецПроцедуры + +&НаСервере +Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Help/ru.html b/SSL/src/Catalogs/ПравилаПроверкиУчета/Help/ru.html new file mode 100644 index 000000000..d68d4c395 --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Help/ru.html @@ -0,0 +1,23 @@ + +

Предназначен для хранения правил проверки учета.

+

Открывается с помощью ссылки Правила проверки учета в разделе Администрирование - Обслуживание - Корректировка данных.

+

В списке выводится:

+
  • Использование проверки (в графе проставлен флажок, если проверка используется); +
  • Наименование; +
  • Расписание проверки; +
  • Важность проблемы.

Способы проведения проверок

+
  • Вручную - с помощью кнопки Выполнить. +
  • По общему расписанию - для корректировки расписания перейдите по ссылке в нижней части окна. Если расписание заполнено, ссылка показывает расписание. +
  • По индивидуальному расписанию - для этого откройте проверку двойным щелчком мыши, измените необходимые поля.

Просмотр выявленных проблем

+
  • +
    Результаты проверки выводятся в отчете Контроль ведения учета.
    +
  • +
    Отчет можно открыть:
    +
    • +
      с помощью кнопки Отчеты - Результаты проверки учета;
      +
    • +
       из проблемного объекта;
      +
    • +
      из списка Текущие дела на Начальной странице.

См. также:

+ \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl new file mode 100644 index 000000000..b2e7b98f2 --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl @@ -0,0 +1,71 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Если Не ЭтоГруппа И Использование = Ссылка.Использование Тогда + Использование = Не ПометкаУдаления; + КонецЕсли; + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + + ПроверкаВеденияУчетаИзменена = ОбъектБылИзменен(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ОбъектБылИзменен() + + Если ЭтоНовый() Тогда + Возврат Ложь; + КонецЕсли; + + Если ПроверкаВеденияУчетаИзменена Тогда + Возврат Истина; + КонецЕсли; + + Если ДополнительныеСвойства.Свойство("ПроверятьИзмененность") И Не ДополнительныеСвойства.ПроверятьИзмененность Тогда + Возврат Ложь; + КонецЕсли; + + ПроверяемыеРеквизиты = Новый Массив; + ПроверяемыеРеквизиты.Добавить("Наименование"); + + Если Не ЭтоГруппа Тогда + + Реквизиты = Метаданные().Реквизиты; + Для Каждого Реквизит Из Реквизиты Цикл + + Если Реквизит.Имя = "ДополнительныеПараметры" + Или Реквизит.Имя = "РасписаниеВыполненияПроверки" + Или Реквизит.Имя = "ПроверкаВеденияУчетаИзменена" Тогда + Продолжить; + КонецЕсли; + + ПроверяемыеРеквизиты.Добавить(Реквизит.Имя); + + КонецЦикла; + + КонецЕсли; + + Для Каждого ПроверяемыйРеквизит Из ПроверяемыеРеквизиты Цикл + + Если Ссылка[ПроверяемыйРеквизит] <> ЭтотОбъект[ПроверяемыйРеквизит] Тогда + Возврат Истина; + КонецЕсли; + + КонецЦикла; + +КонецФункции; + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo b/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo new file mode 100644 index 000000000..ed876b3ee --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo @@ -0,0 +1,472 @@ + + + + + + + + + + ПравилаПроверкиУчета + + ru + Правила проверки учета + + true + Catalog.ПравилаПроверкиУчета.StandardAttribute.Description + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + + ru + Входит в группу + + + ru + Группа к которой относится правило проверки + + true + + Catalog.ПравилаПроверкиУчета.EmptyRef + + Use + + + + + Use + Description + + ru + Наименование + + + ru + Название проверки + + + ShowError + Use + + + + + Use + Code + + ru + Код + + + ru + Код правила проверки (не используется). + + + Use + + + + Use + + + ru + + + Managed + Use + + ru + Правило проверки учета + + true + true + 2 + true + 150 + String + Variable + AsDescription + InDialog + BothWays + Catalog.ПравилаПроверкиУчета.Form.ФормаЭлемента + Catalog.ПравилаПроверкиУчета.Form.ФормаСписка + + ВажностьПроблемы + + ru + Важность проблемы + + + EnumRef.ВажностьПроблемыУчета + + + ru + Важность проблемы. + + + + ShowError + + Use + Use + + + Идентификатор + + ru + Идентификатор + + + String + + 255 + + + + ru + Строковый идентификатор проверки. + + + + + Index + Use + ForFolderAndItem + Use + + + Использование + + ru + Использование + + + Boolean + + + ru + Флаг использования проверки. + + + + + true + + Use + Use + + + Причины + + ru + Причины + + + String + + + + ru + Предполагаемая причина проблемы. + + + + + Use + Use + + + Рекомендация + + ru + Рекомендация + + + String + + + + ru + Рекомендация по решению проблемы. + + + + + Use + Use + + + СпособВыполнения + + ru + Способ выполнения + + + EnumRef.СпособВыполненияПроверки + + + ru + Способ выполнения проверки. + + + + + Use + Use + + + ИдентификаторРегламентногоЗадания + + ru + Идентификатор регламентного задания + + + String + + 128 + + + + ru + Строковый идентификатор связанного регламентного задания. + + + + + Use + + + ДополнительныеПараметры + + ru + Дополнительные параметры + + + ValueStorage + + + ru + Произвольный набор дополнительных сведений, связанных с проверкой. + + + + + Use + Use + + + ДатаНачалаПроверки + + ru + Дата начала проверки + + + Date + + + + ru + Дата начала проверки. + + + + + Use + Use + + + ЛимитПроблем + + ru + Лимит проблем + + + Number + + 8 + + + + ru + Лимит количества проблем. + + + + + 0 + + Use + Use + + + РасписаниеВыполненияПроверки + + ru + Расписание выполнения проверки + + + ValueStorage + + + ru + Для хранения расписания регламентного задания, на случай интерактивного удаления. + + + + + Use + Use + + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольная строка + + + + + Use + Use + + + КонтекстПроверокВеденияУчета + + ru + Контекст проверок ведения учета + + + DefinedType.КонтекстПроверокВеденияУчета + + + ru + Определяет контекст проверок учета. + + + + + Use + Use + + + УточнениеКонтекстаПроверкиСостоянияСистемы + + ru + Уточнение контекста проверки состояния системы + + + DefinedType.УточнениеКонтекстаПроверкиСостоянияСистемы + + + ru + Уточнение контекста выполнения проверки. Например может отвечать на вопрос: когда выполнять? До? После? Во время? + + + + + Use + Use + + + ПроверкаВеденияУчетаИзменена + + ru + Проверка ведения учета изменена + + + Boolean + + + ru + Флаг определяющий находится ли данное правило на поддержке. + + + + + Use + ForFolderAndItem + Use + + + ФормаЭлемента + + ru + Форма элемента + + + + ru + + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo index 98b0e9728..a03ef132e 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo @@ -108,7 +108,6 @@ Use Managed - Use ru Предопределенный вариант отчета diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo index 8289d843d..2f7f31dd4 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo @@ -108,7 +108,6 @@ Use Managed - Use ru Предопределенный вариант отчета diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl new file mode 100644 index 000000000..c4c772ce6 --- /dev/null +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl @@ -0,0 +1,16 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + Если ЭтоПрограммаОблачногоСервиса Тогда + ПроверяемыеРеквизиты.Очистить(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91b5f1b9c --- /dev/null +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,25 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + БазовыйКалендарь + Asc + + + Код + Asc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..7abdfced0 --- /dev/null +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Form.form @@ -0,0 +1,488 @@ + + + + КоманднаяПанель + 22 + + Создать + 24 + + ФормаПодборИзКлассификатора + 26 + true + true + + true + + + ФормаПодборИзКлассификатораРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Form.Command.ПодборИзКлассификатора + Normal + Auto + true + true + UserCmds + Auto + + + СоздатьКалендарь + 28 + + <key>ru</key> + <value>Новый</value> + + true + true + + true + + + СоздатьКалендарьРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Создать</value> + + + СоздатьРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + КомандыФормы + 30 + true + true + + true + + + <key>ru</key> + <value>Команды формы</value> + + + КомандыФормыРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + Form + + + + Справка + 34 + true + true + + true + + + СправкаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + CommandBar + + Left + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + Наименование + 16 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Код + 19 + true + true + + true + + + Список.Code + + + КодРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + Left + + + ChoiceProcessing + ОбработкаВыбора + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Catalog.ПроизводственныеКалендари + true + true + true + true + +
+ + ПодборИзКлассификатора + + <key>ru</key> + <value>По классификатору...</value> + + 1 + + ru + Подобрать валюты из Общероссийского классификатора валют + + + true + + + + ПодборИзКлассификатора + + + DontUse + Auto + + + + + + +
diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..a1ff5e80b --- /dev/null +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,48 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ДоступноДобавлениеИзКлассификатора = Истина; + Если Не ПравоДоступа("Добавление", Метаданные.Справочники.ПроизводственныеКалендари) Тогда + ДоступноДобавлениеИзКлассификатора = Ложь; + Иначе + Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") = Неопределено Тогда + ДоступноДобавлениеИзКлассификатора = Ложь; + КонецЕсли; + КонецЕсли; + + Элементы.ФормаПодборИзКлассификатора.Видимость = ДоступноДобавлениеИзКлассификатора; + Если Не ДоступноДобавлениеИзКлассификатора Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СоздатьКалендарь", "Заголовок", НСтр("ru = 'Создать'")); + Элементы.Создать.Вид = ВидГруппыФормы.ГруппаКнопок; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора) + + Элементы.Список.Обновить(); + Элементы.Список.ТекущаяСтрока = РезультатВыбора; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПодборИзКлассификатора(Команда) + + ИмяФормыПодбора = "Обработка.ЗаполнениеКалендарныхГрафиков.Форма.ПодборКалендарейИзКлассификатора"; + ОткрытьФорму(ИмяФормыПодбора, , ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form index 94ba217b8..ae474612d 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form @@ -166,6 +166,121 @@ Auto
+ + БазовыйКалендарьГруппа + 50 + + ЕстьБазовыйКалендарь + 52 + + <key>ru</key> + <value>Является региональным календарем, федеральный календарь</value> + + true + true + + true + + + ЕстьБазовыйКалендарь + + Right + + OnChange + ЕстьБазовыйКалендарьПриИзменении + + + ЕстьБазовыйКалендарьРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ЕстьБазовыйКалендарьКонтекстноеМеню + 53 + true + + CheckBoxField + Enter + true + Left + true + + + + БазовыйКалендарь + 55 + true + true + + true + + + Объект.БазовыйКалендарь + + None + + БазовыйКалендарьРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + БазовыйКалендарьКонтекстноеМеню + 56 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Базовый календарь</value> + + + БазовыйКалендарьГруппаРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + КалендарьГруппа 17 @@ -628,6 +743,10 @@ OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlock true true @@ -819,6 +938,23 @@
+ + ЕстьБазовыйКалендарь + + <key>ru</key> + <value>Есть базовый календарь</value> + + 11 + + Boolean + + + true + + + true + + ИзменитьДень diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html index d7836c9c5..a7cd94095 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html @@ -12,20 +12,25 @@ </li><li> <div><strong>Код</strong> - не более 3 знаков;</div> </li><li> -<div><strong>Год</strong> - по умолчанию проставляется текущий.</div></li></ul></li><li>Нажмите <strong>Изменить день</strong>, расставьте дни календаря. +<div><strong>Год</strong> - по умолчанию проставляется текущий.</div></li></ul></li></ul><h3>Региональный календарь</h3> +<ul><li> +<div>Если необходимо ввести новый календарь, зависимый от федерального, включите флажок <strong>Является региональным календарем</strong>, выберите федеральный календарь из выпадающего списка.</div></li></ul><h3>Изменение дней календаря</h3> +<ul><li>По умолчанию новый производственный календарь заполнен выходными днями. +</li><li>Нажмите <strong>Изменить день</strong>, расставьте дни календаря. <ul><li>Виды дней производственного календаря обозначаются разными цветами: <ul><li>черным – рабочий день, </li><li><font color="#8b0000">темно-красным</font> – суббота, </li><li><font color="#ff0000">красным</font> – воскресенье, </li><li><font color="#00008b">темно-синим</font> – предпраздничный, -</li><li><font color="#ee82ee">фиолетовым</font> – праздник.</li></ul></li><li>По умолчанию новый производственный календарь заполнен выходными днями. </li></ul></li></ul><h3 style="MARGIN-RIGHT: 0px" dir="ltr">Перенос праздничного дня на другой день</h3> +</li><li><font color="#ee82ee">фиолетовым</font> – праздник.</li></ul></li></ul></li></ul><h3 style="MARGIN-RIGHT: 0px" dir="ltr">Перенос праздничного дня на другой день</h3> <p>Пользоваться этой возможностью имеет смысл в том случае, если данные календаря нужны, но официально он еще не принят и в программе его еще нет, т.к. не все переносы правительство утвердило. Можно заполнить переносы раньше, а потом, когда данные общегосударственного календаря будут утверждены и войдут в поставку программы, переносы автоматически корректируются.</p> <ul><li>Выделите в производственном календаре праздничный день, который необходимо перенести. </li><li>Нажмите <strong>Перенести день</strong>. </li><li>Выберите в <a href="CommonForm.ВыборДаты/Help">календаре</a> дату переноса, нажмите <strong>ОК</strong>. </li><li>Сведения о переносах дней отображаются в правой части производственного календаря в списке <strong>Переносы дней</strong>.</li></ul><h3>Заполнение по умолчанию</h3> -<ul><li>С помощью команды <strong>Заполнить по умолчанию</strong> можно заполнить календарь на основании общегосударственного производственного календаря, входящего в поставку программы. -</li><li>На текущий год автоматическое формирование производственного календаря производится на основании уже утвержденных сведений о рабочих днях, праздниках и переносах праздничных дней, на будущие годы - согласно ТК РФ (для российского производственного календаря).</li></ul><h3>Печать производственного календаря</h3> +<ul><li>С помощью команды <strong>Заполнить по умолчанию</strong> можно заполнить календарь: +<ul><li>Если флажок <strong>Является региональным календарем</strong> включен - на основании общегосударственного производственного календаря, входящего в поставку программы. +<ul><li>На текущий год автоматическое формирование производственного календаря производится на основании уже утвержденных сведений о рабочих днях, праздниках и переносах праздничных дней, на будущие годы - согласно ТК РФ (для российского производственного календаря).</li></ul></li><li>Если флажок <strong>Является региональным календарем</strong> выключен - согласно ТК РФ.</li></ul></li></ul><h3>Печать производственного календаря</h3> <ul><li>Нажмите <strong>Печать</strong>, для того чтобы вывести сводные сведения о производственном календаре на указанный год. <ul><li>Предусмотрен вывод сведений о годовом балансе рабочего времени, а также по месяцам, за квартал, полугодие. </li><li>Выводится статистика по количеству календарных дней, рабочих, выходных и праздничных дней, а также рабочее время в часах при 40-часовой, 36-часовой и 24-часовой рабочей неделе.</li></ul></li></ul><h3>См. также:</h3> diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl index dab608114..d7286fa79 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl @@ -10,6 +10,7 @@ Если Объект.Ссылка.Пустая() Тогда ЗаполнитьДаннымиТекущегоГода(Параметры.ЗначениеКопирования); + УстановитьСвойстваПоляБазовогоКалендаря(ЭтотОбъект); КонецЕсли; ЦветаВидовДней = Новый ФиксированноеСоответствие(Справочники.ПроизводственныеКалендари.ЦветаОформленияВидовДнейПроизводственногоКалендаря()); @@ -28,6 +29,11 @@ ЗаполнитьДаннымиТекущегоГода(); + УстановитьВидимостьБазовогоКалендаря(); + + ЕстьБазовыйКалендарь = ЗначениеЗаполнено(Объект.БазовыйКалендарь); + УстановитьСвойстваПоляБазовогоКалендаря(ЭтотОбъект); + КонецПроцедуры &НаКлиенте @@ -46,6 +52,16 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + Если ЕстьБазовыйКалендарь И Не ЗначениеЗаполнено(Объект.БазовыйКалендарь) Тогда + ТекстСообщения = НСтр("ru = 'Федеральный календарь не заполнен.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , "Объект.БазовыйКалендарь", Отказ); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) @@ -95,6 +111,17 @@ КонецПроцедуры +&НаКлиенте +Процедура ЕстьБазовыйКалендарьПриИзменении(Элемент) + + УстановитьСвойстваПоляБазовогоКалендаря(ЭтотОбъект); + + Если Не ЕстьБазовыйКалендарь Тогда + Объект.БазовыйКалендарь = Неопределено; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -209,8 +236,15 @@ // Заполняет форму данными производственного календаря, // составленными на основе сведений о праздничных днях и переносах. - ПреобразоватьДанныеПроизводственногоКалендаря( - Справочники.ПроизводственныеКалендари.РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(Объект.Код, НомерТекущегоГода)); + КодБазовогоКалендаря = Неопределено; + Если ЗначениеЗаполнено(Объект.БазовыйКалендарь) Тогда + КодБазовогоКалендаря = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.БазовыйКалендарь, "Код"); + КонецЕсли; + + ДанныеПоУмолчанию = Справочники.ПроизводственныеКалендари.РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию( + Объект.Код, НомерТекущегоГода, КодБазовогоКалендаря); + + ПреобразоватьДанныеПроизводственногоКалендаря(ДанныеПоУмолчанию); Модифицированность = Истина; @@ -377,7 +411,7 @@ КонецЕсли; ВидДняИсточник = ПредставлениеВидаДняПереноса(Форма.ВидыДней.Получить(ДатаПриемник), ДатаИсточник); ВидДняПриемник = ПредставлениеВидаДняПереноса(Форма.ВидыДней.Получить(ДатаИсточник), ДатаПриемник); - Форма.СписокПереносов.Добавить(ДатаИсточник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%3) перенесен на %2 (%4)'"), Формат(ДатаИсточник, "ДФ='д ММММ'"), Формат(ДатаПриемник, "ДФ='д ММММ'"), ВидДняИсточник, ВидДняПриемник)); + Форма.СписокПереносов.Добавить(ДатаИсточник, ПредставлениеПереноса(ДатаИсточник, ДатаПриемник, ВидДняИсточник, ВидДняПриемник)); КонецЦикла; Форма.СписокПереносов.СортироватьПоЗначению(); @@ -385,6 +419,47 @@ КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеПереноса(ДатаИсточник, ДатаПриемник, ВидДняИсточник, ВидДняПриемник) + + Представление = ""; + + ШаблонМР = НСтр("ru = '%1 %3 перенесен на %2 %4'"); + ШаблонСР = НСтр("ru = '%1 %3 перенесено на %2 %4'"); + ШаблонЖР = НСтр("ru = '%1 %3 перенесена на %2 %4'"); + + ДниЖР = Новый Соответствие; + ДниЖР.Вставить(НСтр("ru = 'среда'"), НСтр("ru = 'среду'")); + ДниЖР.Вставить(НСтр("ru = 'пятница'"), НСтр("ru = 'пятницу'")); + ДниЖР.Вставить(НСтр("ru = 'суббота'"), НСтр("ru = 'субботу'")); + + ДниСР = Новый Соответствие; + ДниСР.Вставить(НСтр("ru = 'воскресенье'"), Истина); + + Шаблон = ШаблонМР; + Если ДниЖР[ВидДняИсточник] <> Неопределено Тогда + Шаблон = ШаблонЖР; + КонецЕсли; + Если ДниСР[ВидДняИсточник] <> Неопределено Тогда + Шаблон = ШаблонСР; + КонецЕсли; + + ПредставлениеДняПриемника = ВидДняПриемник; + Если ДниЖР[ВидДняПриемник] <> Неопределено Тогда + ПредставлениеДняПриемника = ДниЖР[ВидДняПриемник]; + КонецЕсли; + + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + Формат(ДатаИсточник, "ДФ='д ММММ'"), + Формат(ДатаПриемник, "ДФ='д ММММ'"), + ВидДняИсточник, + ПредставлениеДняПриемника); + + Возврат Представление; + +КонецФункции + &НаКлиентеНаСервереБезКонтекста Процедура УстановитьВидимостьСпискаПереносов(Форма) @@ -467,4 +542,37 @@ КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСвойстваПоляБазовогоКалендаря(Форма) + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Форма.Элементы, + "БазовыйКалендарь", + "Доступность", + Форма.ЕстьБазовыйКалендарь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Форма.Элементы, + "БазовыйКалендарь", + "АвтоОтметкаНеЗаполненного", + Форма.ЕстьБазовыйКалендарь); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Форма.Элементы, + "БазовыйКалендарь", + "ОтметкаНеЗаполненного", + Не ЗначениеЗаполнено(Форма.Объект.БазовыйКалендарь)); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьБазовогоКалендаря() + + ТаблицаКалендарей = КалендарныеГрафики.ТаблицаПроизводственныхКалендарей(); + Если ТаблицаКалендарей.Найти(СокрЛП(Объект.Код), "Code") <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "БазовыйКалендарьГруппа", "Видимость", Ложь); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html b/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html index 8f5ed592c..9ca71bda6 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html @@ -2,8 +2,10 @@ <p>Предназначен для формирования и хранения производственных календарей.</p> <p>Открывается по соответствующей команде в разделе <strong>Справочники</strong>.</p> <p>Производственный календарь - это своеобразный классификатор, постоянные сведения, которые не меняются в течение года. Их может быть несколько, т.к. в разных регионах предусмотрен разный состав праздничных дней и соответственно переносов. </p> -<p>Производственный календарь РФ (который является общегосударственным) входит в поставляемые данные программы и обновляется по мере утверждения календаря и переносов праздников в РФ. При необходимости можно ввести несколько производственных календарей. Рекомендуется ввести производственный календарь в начале года на основании общегосударственного календаря на весь год сразу. Это поможет избежать ошибок в расчетах в течение года.</p> -<p>Производственные календари сами по себе не используются в учете. На основании производственного календаря формируются <a href="Catalog.Календари/Help">графики работы</a> подразделений, а также графики работы сотрудников.  </p> +<p><strong>Производственный календарь РФ</strong> (который является общегосударственным) входит в поставляемые данные программы и обновляется по мере утверждения календаря и переносов праздников в РФ. При необходимости можно ввести несколько производственных календарей. Рекомендуется ввести производственный календарь в начале года на основании общегосударственного календаря на весь год сразу. Это поможет избежать ошибок в расчетах в течение года.</p><a name="СтандартныеПодсистемы.ГрафикиРаботы"> +<p>Производственные календари сами по себе не используются в учете. На основании производственного календаря формируются <a href="Catalog.Календари/Help">графики работы</a> подразделений, а также графики работы сотрудников.  </p></a> <h3>Ввод производственного календаря</h3> -<ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="Catalog.ПроизводственныеКалендари.Form.ФормаЭлемента/Help">поля</a>.</li></ul><h3>См. также:</h3> +<ul><li>Нажмите <strong>Создать</strong>, выберите способ создания производственного календаря: +<ul><li><strong>По классификатору</strong> - добавить из классификатора, рекомендуется. Программа поставляется с <a href="DataProcessor.ЗаполнениеКалендарныхГрафиков.Form.ПодборКалендарейИзКлассификатора/Help">классификатором производственных календарей</a>. +</li><li><strong>Новый </strong>(ввести вручную (если в классификаторе нет соответствующего производственного календаря.</li></ul></li><li>Заполните необходимые <a href="Catalog.ПроизводственныеКалендари.Form.ФормаЭлемента/Help">поля</a>.</li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index af968002f..b955c7054 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -1,3 +1,4 @@ + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -97,89 +98,73 @@ // в противном случае данные производственного календаря формируются на основе // сведений о праздниках, а также с учетом действующих правил переноса выходных дней. // -Функция РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(КодПроизводственногоКалендаря, НомерГода) Экспорт +Функция РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(КодКалендаря, НомерГода, Знач КодБазовогоКалендаря = Неопределено) Экспорт - ДлинаСуток = 24 * 3600; + ВидыДней = Новый Соответствие; + ПереносыДней = Новый Соответствие; + // Если есть данные в макете - используем их. + // Сразу получаем данные еще и по базовому календарю, если он задан. + КодыКалендарей = Новый Массив; + КодыКалендарей.Добавить(КодКалендаря); + ЕстьБазовыйКалендарь = Ложь; + Если КодБазовогоКалендаря <> Неопределено Тогда + КодыКалендарей.Добавить(КодБазовогоКалендаря); + ЕстьБазовыйКалендарь = Истина; + КонецЕсли; + + // Отбираем данные из макета по обоим календарям. + // Получаем не полный набор, а только праздничные дни и переносы. + ДанныеИзМакета = ДанныеПроизводственныхКалендарейИзМакета(КодыКалендарей, Ложь); + + ОтборСтрок = Новый Структура("КодПроизводственногоКалендаря,Год"); + ОтборСтрок.Год = НомерГода; + + ЕстьДанныеКалендаря = Ложь; + ОтборСтрок.КодПроизводственногоКалендаря = КодКалендаря; + ДанныеКалендаря = ДанныеИзМакета.НайтиСтроки(ОтборСтрок); + Если ДанныеКалендаря.Количество() > 0 Тогда + ЕстьДанныеКалендаря = Истина; + ЗаполнитьВидыДнейДаннымиКалендаря(ДанныеКалендаря, ВидыДней, ПереносыДней); + КонецЕсли; + + // Проверяем, есть ли в макете данные базового календаря. + ЕстьДанныеБазовогоКалендаря = Ложь; + Если ЕстьБазовыйКалендарь Тогда + ОтборСтрок.КодПроизводственногоКалендаря = КодБазовогоКалендаря; + ДанныеКалендаря = ДанныеИзМакета.НайтиСтроки(ОтборСтрок); + Если ДанныеКалендаря.Количество() > 0 Тогда + ЕстьДанныеБазовогоКалендаря = Истина; + Если Не ЕстьДанныеКалендаря Тогда + ЗаполнитьВидыДнейДаннымиКалендаря(ДанныеКалендаря, ВидыДней, ПереносыДней); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Дополняем данными по умолчанию на остальные дни. + ДатаДня = Дата(НомерГода, 1, 1); + Пока ДатаДня <= Дата(НомерГода, 12, 31) Цикл + Если ВидыДней[ДатаДня] = Неопределено Тогда + ВидыДней.Вставить(ДатаДня, ВидДняПоДате(ДатаДня)); + КонецЕсли; + ДатаДня = ДатаДня + ДлинаСуток(); + КонецЦикла; + + // Если данных в макете не было, то обращаемся к заполнению постоянных праздников. + Если Не ЕстьДанныеКалендаря Тогда + Если ЕстьБазовыйКалендарь И ЕстьДанныеБазовогоКалендаря Тогда + // Постоянные праздники базового календаря запрашиваем только если их не было в макете. + КодБазовогоКалендаря = Неопределено; + КонецЕсли; + ЗаполнитьПостоянныеПраздничныеДни(ВидыДней, ПереносыДней, НомерГода, КодКалендаря, КодБазовогоКалендаря); + КонецЕсли; + + // Преобразовываем в таблицу. ДанныеПроизводственногоКалендаря = Новый ТаблицаЗначений; ДанныеПроизводственногоКалендаря.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); ДанныеПроизводственногоКалендаря.Колонки.Добавить("ВидДня", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыДнейПроизводственногоКалендаря")); ДанныеПроизводственногоКалендаря.Колонки.Добавить("ДатаПереноса", Новый ОписаниеТипов("Дата")); - // Если есть данные в макете - используем их. - ПредопределенныеДанные = ДанныеПроизводственныхКалендарейИзМакета().НайтиСтроки( - Новый Структура("КодПроизводственногоКалендаря, Год", КодПроизводственногоКалендаря, НомерГода)); - Если ПредопределенныеДанные.Количество() > 0 Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ПредопределенныеДанные, ДанныеПроизводственногоКалендаря); - Возврат ДанныеПроизводственногоКалендаря; - КонецЕсли; - - // Если нет - заполняем праздники и переносы. - ПраздничныеДни = ПраздничныеДниПроизводственногоКалендаря(КодПроизводственногоКалендаря, НомерГода); - // Дополним таблицу также праздниками следующего года, - // т.к. они влияют на заполнение текущего года (31 декабря - предпраздничный, например). - ПраздничныеДниСледующегоГода = ПраздничныеДниПроизводственногоКалендаря(КодПроизводственногоКалендаря, НомерГода + 1); - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ПраздничныеДниСледующегоГода, ПраздничныеДни); - - ВидыДней = Новый Соответствие; - - ДатаДня = Дата(НомерГода, 1, 1); - Пока ДатаДня <= Дата(НомерГода, 12, 31) Цикл - // "Непраздничный" день - определяем в соответствии с днем недели. - НомерДняНедели = ДеньНедели(ДатаДня); - Если НомерДняНедели <= 5 Тогда - ВидыДней.Вставить(ДатаДня, Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий); - ИначеЕсли НомерДняНедели = 6 Тогда - ВидыДней.Вставить(ДатаДня, Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота); - ИначеЕсли НомерДняНедели = 7 Тогда - ВидыДней.Вставить(ДатаДня, Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье); - КонецЕсли; - ДатаДня = ДатаДня + ДлинаСуток; - КонецЦикла; - - // При совпадении выходного и нерабочего праздничного дней - // выходной день переносится на следующий после праздничного рабочий день - // за исключением выходных дней, совпадающих с нерабочими праздничными днями - // в период Новогодних каникул и Рождества Христова. - - ПереносыДней = Новый Соответствие; - Для Каждого СтрокаТаблицы Из ПраздничныеДни Цикл - ПраздничныйДень = СтрокаТаблицы.Дата; - // Отметим как предпраздничный день, - // рабочий день непосредственно предшествующий праздничному дню. - ДатаПредпраздничногоДня = ПраздничныйДень - ДлинаСуток; - Если Год(ДатаПредпраздничногоДня) <> НомерГода Тогда - // Предпраздничные дни другого года пропускаем. - Продолжить; - КонецЕсли; - Если ВидыДней[ДатаПредпраздничногоДня] = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий - И ПраздничныеДни.Найти(ДатаПредпраздничногоДня, "Дата") = Неопределено Тогда - ВидыДней.Вставить(ДатаПредпраздничногоДня, Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный); - КонецЕсли; - Если Год(ПраздничныйДень) <> НомерГода Тогда - // Праздничные дни другого года далее также пропускаем. - Продолжить; - КонецЕсли; - Если ВидыДней[ПраздничныйДень] <> Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий - И СтрокаТаблицы.ПереноситьВыходной Тогда - // Если праздничный день выпадает на выходной, - // и выходной, на который выпадает этот праздник, переносится - - // переносим выходной на ближайший рабочий день. - ДатаДня = ПраздничныйДень; - Пока Истина Цикл - ДатаДня = ДатаДня + ДлинаСуток; - Если ВидыДней[ДатаДня] = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий - И ПраздничныеДни.Найти(ДатаДня, "Дата") = Неопределено Тогда - ВидыДней.Вставить(ДатаДня, ВидыДней[ПраздничныйДень]); - ПереносыДней.Вставить(ДатаДня, ПраздничныйДень); - ПереносыДней.Вставить(ПраздничныйДень, ДатаДня); - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - ВидыДней.Вставить(ПраздничныйДень, Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник); - КонецЦикла; - Для Каждого КлючИЗначение Из ВидыДней Цикл НоваяСтрока = ДанныеПроизводственногоКалендаря.Добавить(); НоваяСтрока.Дата = КлючИЗначение.Ключ; @@ -196,12 +181,62 @@ КонецФункции +Функция РезультатЗаполненияПроизводственныхКалендарейПоУмолчанию(КодыКалендарей) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("КодыКалендарей", КодыКалендарей); + Запрос.Текст = + "ВЫБРАТЬ + | ПроизводственныеКалендари.Ссылка КАК Ссылка, + | ПроизводственныеКалендари.Код КАК КодКалендаря, + | ПроизводственныеКалендари.БазовыйКалендарь КАК БазовыйКалендарь, + | ПроизводственныеКалендари.БазовыйКалендарь.Код КАК КодБазовогоКалендаря + |ИЗ + | Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари + |ГДЕ + | ПроизводственныеКалендари.Код В(&КодыКалендарей)"; + РезультатЗапроса = Запрос.Выполнить(); + + // Запрашиваем данные всех календарей из макета для определения годов заполнения. + КодыДанныхМакета = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("КодКалендаря"); + ДанныеИзМакета = ДанныеПроизводственныхКалендарейИзМакета(КодыДанныхМакета, Ложь); + + ТаблицаДанных = НовыеДанныеПроизводственныхКалендарей(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ОтборСтрок = Новый Структура("КодПроизводственногоКалендаря"); + ОтборСтрок.КодПроизводственногоКалендаря = Выборка.КодКалендаря; + ДанныеКалендаряИзМакета = ДанныеИзМакета.НайтиСтроки(ОтборСтрок); + НомераГодов = ОбщегоНазначения.ВыгрузитьКолонку(ДанныеКалендаряИзМакета, "Год", Истина); + Если НомераГодов.Количество() = 0 Тогда + // Заполняем по умолчанию на текущий год. + НомераГодов.Добавить(Год(ТекущаяДатаСеанса())); + КонецЕсли; + Для Каждого НомерГода Из НомераГодов Цикл + ДанныеКалендаря = РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(Выборка.КодКалендаря, НомерГода, Выборка.КодБазовогоКалендаря); + Для Каждого СтрокаДанных Из ДанныеКалендаря Цикл + НоваяСтрока = ТаблицаДанных.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДанных); + НоваяСтрока.КодПроизводственногоКалендаря = Выборка.КодКалендаря; + НоваяСтрока.Год = НомерГода; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Возврат ТаблицаДанных; + +КонецФункции + // Преобразовывает данные производственных календарей, поставляемые в виде макета в конфигурации. // +// Параметры: +// КодыКалендарей - необязательный, массив, если не задан, то будут получены все имеющиеся данные из макета. +// ФормироватьПолныйНабор - необязательный, булево, если ложь, то будут сформированы только данные по отклонениям от календаря по умолчанию. +// // Возвращаемое значение: // ТаблицаЗначений - см. ДанныеПроизводственныхКалендарейИзXML. // -Функция ДанныеПроизводственныхКалендарейИзМакета() Экспорт +Функция ДанныеПроизводственныхКалендарейИзМакета(КодыКалендарей = Неопределено, ФормироватьПолныйНабор = Истина) Экспорт Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") = Неопределено Тогда Возврат НовыеДанныеПроизводственныхКалендарей(); @@ -210,14 +245,16 @@ МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков"); ТекстовыйДокумент = МодульКалендарныеГрафики.ПолучитьМакет("ДанныеПроизводственныхКалендарей"); - Возврат ДанныеПроизводственныхКалендарейИзXML(ТекстовыйДокумент.ПолучитьТекст()); + Возврат ДанныеПроизводственныхКалендарейИзXML(ТекстовыйДокумент.ПолучитьТекст(), КодыКалендарей, ФормироватьПолныйНабор); КонецФункции // Преобразовывает данные производственных календарей, представленные в виде XML. // // Параметры: -// XML - документ с данными +// XML - документ с данными. +// КодыКалендарей - необязательный, массив, если не задан, то отбор не будет установлен. +// ФормироватьПолныйНабор - необязательный, булево, если ложь, то будут сформированы только данные по отклонениям от календаря по умолчанию. // // Возвращаемое значение: // ТаблицаЗначений - таблица с колонками: @@ -227,39 +264,62 @@ // * Дата // * ДатаПереноса. // -Функция ДанныеПроизводственныхКалендарейИзXML(Знач XML) Экспорт +Функция ДанныеПроизводственныхКалендарейИзXML(Знач XML, КодыКалендарей = Неопределено, ФормироватьПолныйНабор = Истина) Экспорт ТаблицаДанных = НовыеДанныеПроизводственныхКалендарей(); + ТаблицаКалендарей = КалендарныеГрафики.ТаблицаПроизводственныхКалендарей(); КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(XML).Данные; - Для Каждого СтрокаКлассификатора Из КлассификаторТаблица Цикл - НоваяСтрока = ТаблицаДанных.Добавить(); - НоваяСтрока.КодПроизводственногоКалендаря = СтрокаКлассификатора.Calendar; - НоваяСтрока.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря[СтрокаКлассификатора.DayType]; - НоваяСтрока.Год = Число(СтрокаКлассификатора.Year); - НоваяСтрока.Дата = Дата(СтрокаКлассификатора.Date); - Если ЗначениеЗаполнено(СтрокаКлассификатора.SwapDate) Тогда - НоваяСтрока.ДатаПереноса = Дата(СтрокаКлассификатора.SwapDate); + ГодыКалендарей = КлассификаторТаблица.Скопировать(, "Calendar,Year"); + ГодыКалендарей.Свернуть("Calendar,Year"); + + ОтборСтрок = Новый Структура("Calendar,Year"); + Для Каждого Сочетание Из ГодыКалендарей Цикл + Если КодыКалендарей <> Неопределено И КодыКалендарей.Найти(Сочетание.Calendar) = Неопределено Тогда + Продолжить; КонецЕсли; + ДатыГода = Новый Соответствие; + ЗаполнитьЗначенияСвойств(ОтборСтрок, Сочетание); + СтрокиДанныхКалендаря = КлассификаторТаблица.НайтиСтроки(ОтборСтрок); + Для Каждого СтрокаКлассификатора Из СтрокиДанныхКалендаря Цикл + НоваяСтрока = НоваяСтрокаДанныхКалендаряИзКлассификатора(ТаблицаДанных, СтрокаКлассификатора); + ДатыГода.Вставить(НоваяСтрока.Дата, Истина); + КонецЦикла; + КодБазовогоКалендаря = КодБазовогоКалендаря(Сочетание.Calendar, ТаблицаКалендарей); + Если КодБазовогоКалендаря <> Неопределено Тогда + ОтборСтрок.Calendar = КодБазовогоКалендаря; + СтрокиДанныхКалендаря = КлассификаторТаблица.НайтиСтроки(ОтборСтрок); + Для Каждого СтрокаКлассификатора Из СтрокиДанныхКалендаря Цикл + СтрокаКлассификатора.Calendar = Сочетание.Calendar; + НоваяСтрока = НоваяСтрокаДанныхКалендаряИзКлассификатора(ТаблицаДанных, СтрокаКлассификатора, Истина, Ложь); + СтрокаКлассификатора.Calendar = КодБазовогоКалендаря; + Если НоваяСтрока <> Неопределено Тогда + ДатыГода.Вставить(НоваяСтрока.Дата, Истина); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если Не ФормироватьПолныйНабор Тогда + Продолжить; + КонецЕсли; + НомерГода = Число(Сочетание.Year); + ДатаДня = Дата(НомерГода, 1, 1); + Пока ДатаДня <= Дата(НомерГода, 12, 31) Цикл + Если ДатыГода[ДатаДня] = Неопределено Тогда + НоваяСтрока = ТаблицаДанных.Добавить(); + НоваяСтрока.КодПроизводственногоКалендаря = Сочетание.Calendar; + НоваяСтрока.Год = НомерГода; + НоваяСтрока.Дата = ДатаДня; + НоваяСтрока.ВидДня = ВидДняПоДате(ДатаДня); + КонецЕсли; + ДатаДня = ДатаДня + ДлинаСуток(); + КонецЦикла; КонецЦикла; Возврат ТаблицаДанных; КонецФункции -Функция НовыеДанныеПроизводственныхКалендарей() - - ТаблицаДанных = Новый ТаблицаЗначений; - ТаблицаДанных.Колонки.Добавить("КодПроизводственногоКалендаря", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(2))); - ТаблицаДанных.Колонки.Добавить("ВидДня", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыДнейПроизводственногоКалендаря")); - ТаблицаДанных.Колонки.Добавить("Год", Новый ОписаниеТипов("Число")); - ТаблицаДанных.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); - ТаблицаДанных.Колонки.Добавить("ДатаПереноса", Новый ОписаниеТипов("Дата")); - Возврат ТаблицаДанных; - -КонецФункции - // Обновляет справочник Производственные календари из XML файла. // // Параметры: @@ -271,6 +331,7 @@ Запрос.Текст = "ВЫБРАТЬ | ВЫРАЗИТЬ(КлассификаторТаблица.Code КАК СТРОКА(2)) КАК Код, + | ВЫРАЗИТЬ(КлассификаторТаблица.Base КАК СТРОКА(2)) КАК КодБазового, | ВЫРАЗИТЬ(КлассификаторТаблица.Description КАК СТРОКА(100)) КАК Наименование |ПОМЕСТИТЬ КлассификаторТаблица |ИЗ @@ -279,30 +340,41 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | КлассификаторТаблица.Код, - | КлассификаторТаблица.Наименование, + | КлассификаторТаблица.Код КАК Код, + | КлассификаторТаблица.КодБазового КАК КодБазового, + | КлассификаторТаблица.Наименование КАК Наименование, | ПроизводственныеКалендари.Ссылка КАК Ссылка, | ЕСТЬNULL(ПроизводственныеКалендари.Код, """") КАК ПроизводственныйКалендарьКод, | ЕСТЬNULL(ПроизводственныеКалендари.Наименование, """") КАК ПроизводственныйКалендарьНаименование |ИЗ | КлассификаторТаблица КАК КлассификаторТаблица | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари - | ПО КлассификаторТаблица.Код = ПроизводственныеКалендари.Код"; + | ПО КлассификаторТаблица.Код = ПроизводственныеКалендари.Код + | + |УПОРЯДОЧИТЬ ПО + | КодБазового"; Запрос.УстановитьПараметр("КлассификаторТаблица", ТаблицаКалендарей); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если СокрЛП(Выборка.Код) = СокрЛП(Выборка.ПроизводственныйКалендарьКод) - И Выборка.Наименование = Выборка.ПроизводственныйКалендарьНаименование Тогда + И СокрЛП(Выборка.Наименование) = СокрЛП(Выборка.ПроизводственныйКалендарьНаименование) Тогда Продолжить; КонецЕсли; Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); Иначе + Если ЗначениеЗаполнено(Выборка.КодБазового) Тогда + // Зависимые календари не создаем автоматически при обновлении. + Продолжить; + КонецЕсли; СправочникОбъект = СоздатьЭлемент(); КонецЕсли; СправочникОбъект.Код = СокрЛП(Выборка.Код); СправочникОбъект.Наименование = СокрЛП(Выборка.Наименование); + Если ЗначениеЗаполнено(Выборка.КодБазового) Тогда + СправочникОбъект.БазовыйКалендарь = НайтиПоКоду(Выборка.КодБазового); + КонецЕсли; СправочникОбъект.Записать(); КонецЦикла; @@ -523,6 +595,8 @@ ПраздничныеДни = Новый ТаблицаЗначений; ПраздничныеДни.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); ПраздничныеДни.Колонки.Добавить("ПереноситьВыходной", Новый ОписаниеТипов("Булево")); + ПраздничныеДни.Колонки.Добавить("ДобавлятьПредпраздничный", Новый ОписаниеТипов("Булево")); + ПраздничныеДни.Колонки.Добавить("ТолькоНерабочий", Новый ОписаниеТипов("Булево")); Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") <> Неопределено Тогда МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков"); @@ -545,6 +619,166 @@ КонецФункции +Функция ДлинаСуток() + Возврат 24 * 3600; +КонецФункции + +Функция НовыеДанныеПроизводственныхКалендарей() + + ТаблицаДанных = Новый ТаблицаЗначений; + ТаблицаДанных.Колонки.Добавить("КодПроизводственногоКалендаря", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(2))); + ТаблицаДанных.Колонки.Добавить("ВидДня", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыДнейПроизводственногоКалендаря")); + ТаблицаДанных.Колонки.Добавить("Год", Новый ОписаниеТипов("Число")); + ТаблицаДанных.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); + ТаблицаДанных.Колонки.Добавить("ДатаПереноса", Новый ОписаниеТипов("Дата")); + Возврат ТаблицаДанных; + +КонецФункции + +Процедура ЗаполнитьПостоянныеПраздничныеДни(ВидыДней, ПереносыДней, НомерГода, КодКалендаря, КодБазовогоКалендаря = Неопределено) + + // Если нет - заполняем праздники и переносы. + ПраздничныеДни = ПраздничныеДниПроизводственногоКалендаря(КодКалендаря, НомерГода); + // Дополним таблицу также праздниками следующего года, + // т.к. они влияют на заполнение текущего года (31 декабря - предпраздничный, например). + ПраздничныеДниСледующегоГода = ПраздничныеДниПроизводственногоКалендаря(КодКалендаря, НомерГода + 1); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ПраздничныеДниСледующегоГода, ПраздничныеДни); + + Если КодБазовогоКалендаря <> Неопределено Тогда + // Дополним таблицу также праздниками базового календаря. + ПраздничныеБазовогоКалендаря = ПраздничныеДниПроизводственногоКалендаря(КодБазовогоКалендаря, НомерГода); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ПраздничныеБазовогоКалендаря, ПраздничныеДни); + ПраздничныеДниСледующегоГода = ПраздничныеДниПроизводственногоКалендаря(КодБазовогоКалендаря, НомерГода + 1); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ПраздничныеДниСледующегоГода, ПраздничныеДни); + КонецЕсли; + + // При совпадении выходного и нерабочего праздничного дней + // выходной день переносится на следующий после праздничного рабочий день + // за исключением выходных дней, совпадающих с нерабочими праздничными днями + // в период Новогодних каникул и Рождества Христова. + + Для Каждого СтрокаТаблицы Из ПраздничныеДни Цикл + ПраздничныйДень = СтрокаТаблицы.Дата; + // Отметим как предпраздничный день, + // рабочий день непосредственно предшествующий праздничному дню. + Если СтрокаТаблицы.ДобавлятьПредпраздничный Тогда + ДатаПредпраздничногоДня = ПраздничныйДень - ДлинаСуток(); + Если Год(ДатаПредпраздничногоДня) = НомерГода Тогда + // Предпраздничные дни другого года пропускаем. + Если ВидыДней[ДатаПредпраздничногоДня] = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий + И ПраздничныеДни.Найти(ДатаПредпраздничногоДня, "Дата") = Неопределено Тогда + ВидыДней.Вставить(ДатаПредпраздничногоДня, Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Год(ПраздничныйДень) <> НомерГода Тогда + // Праздничные дни другого года далее также пропускаем. + Продолжить; + КонецЕсли; + Если ВидыДней[ПраздничныйДень] <> Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий + И СтрокаТаблицы.ПереноситьВыходной Тогда + // Если праздничный день выпадает на выходной, + // и выходной, на который выпадает этот праздник, переносится - + // переносим выходной на ближайший рабочий день. + ДатаДня = ПраздничныйДень; + Пока Истина Цикл + ДатаДня = ДатаДня + ДлинаСуток(); + Если ВидыДней[ДатаДня] = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий + И ПраздничныеДни.Найти(ДатаДня, "Дата") = Неопределено Тогда + ВидыДней.Вставить(ДатаДня, ВидыДней[ПраздничныйДень]); + ПереносыДней.Вставить(ДатаДня, ПраздничныйДень); + ПереносыДней.Вставить(ПраздничныйДень, ДатаДня); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если СтрокаТаблицы.ТолькоНерабочий Тогда + ВидыДней.Вставить(ПраздничныйДень, Перечисления.ВидыДнейПроизводственногоКалендаря.Нерабочий); + Иначе + ВидыДней.Вставить(ПраздничныйДень, Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьВидыДнейДаннымиКалендаря(ДанныеКалендаря, ВидыДней, ПереносыДней) + + Для Каждого СтрокаДанных Из ДанныеКалендаря Цикл + ВидыДней.Вставить(СтрокаДанных.Дата, СтрокаДанных.ВидДня); + Если ЗначениеЗаполнено(СтрокаДанных.ДатаПереноса) Тогда + ПереносыДней.Вставить(СтрокаДанных.Дата, СтрокаДанных.ДатаПереноса); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ВидДняПоДате(Дата) + + НомерДняНедели = ДеньНедели(Дата); + + Если НомерДняНедели <= 5 Тогда + Возврат Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий; + КонецЕсли; + + Если НомерДняНедели = 6 Тогда + Возврат Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота; + КонецЕсли; + + Если НомерДняНедели = 7 Тогда + Возврат Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье; + КонецЕсли; + +КонецФункции + +Функция КодБазовогоКалендаря(КодКалендаря, КлассификаторКалендарей = Неопределено) + + Если КлассификаторКалендарей = Неопределено Тогда + КлассификаторКалендарей = КалендарныеГрафики.ТаблицаПроизводственныхКалендарей(); + КонецЕсли; + + СтрокаКалендаря = КлассификаторКалендарей.Найти(КодКалендаря, "Code"); + + Если СтрокаКалендаря = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если Не ЗначениеЗаполнено(СтрокаКалендаря["Base"]) Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат СтрокаКалендаря["Base"]; + +КонецФункции + +Функция НоваяСтрокаДанныхКалендаряИзКлассификатора(ДанныеКалендаря, СтрокаКлассификатора, Проверять = Ложь, Замещать = Ложь) + + Если Проверять Тогда + ОтборСтрок = Новый Структура("КодПроизводственногоКалендаря,Дата"); + ЗаполнитьЗначенияСвойств(ОтборСтрок, СтрокаКлассификатора); + НайденныеСтроки = ДанныеКалендаря.НайтиСтроки(ОтборСтрок); + Если НайденныеСтроки.Количество() > 0 Тогда + Если Не Замещать Тогда + Возврат Неопределено; + КонецЕсли; + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + ДанныеКалендаря.Удалить(НайденнаяСтрока); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + НоваяСтрока = ДанныеКалендаря.Добавить(); + НоваяСтрока.КодПроизводственногоКалендаря = СтрокаКлассификатора.Calendar; + НоваяСтрока.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря[СтрокаКлассификатора.DayType]; + НоваяСтрока.Год = Число(СтрокаКлассификатора.Year); + НоваяСтрока.Дата = Дата(СтрокаКлассификатора.Date); + Если ЗначениеЗаполнено(СтрокаКлассификатора.SwapDate) Тогда + НоваяСтрока.ДатаПереноса = Дата(СтрокаКлассификатора.SwapDate); + КонецЕсли; + + Возврат НоваяСтрока; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Печатная форма производственного календаря. @@ -599,6 +833,7 @@ ВидыНерабочихДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота); ВидыНерабочихДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье); ВидыНерабочихДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник); + ВидыНерабочихДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Нерабочий); Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Год", НомерГода); @@ -655,9 +890,7 @@ ВыборкаПоВидуДня = ВыборкаПоМесяцу.Выбрать(ОбходРезультатаЗапроса.Прямой); Пока ВыборкаПоВидуДня.Следующий() Цикл - Если ВыборкаПоВидуДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота - Или ВыборкаПоВидуДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье - Или ВыборкаПоВидуДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник Тогда + Если ВидыНерабочихДней.Найти(ВыборкаПоВидуДня.ВидДня) <> Неопределено Тогда ВыходныеДни = ВыходныеДни + ВыборкаПоВидуДня.КалендарныеДни ИначеЕсли ВыборкаПоВидуДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий Тогда РабочееВремя40 = РабочееВремя40 + ВыборкаПоВидуДня.КалендарныеДни * 8; @@ -762,4 +995,4 @@ #КонецОбласти -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl index 2e1bcfc38..93888ca0e 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl @@ -2,6 +2,10 @@ #Область ОбработчикиСобытий +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + ПроверитьИспользованиеБазовогоКалендаря(Отказ); +КонецПроцедуры + Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда @@ -13,5 +17,49 @@ КонецПроцедуры #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПроверитьИспользованиеБазовогоКалендаря(Отказ) + Если ЭтотОбъект.Ссылка.Пустая() Или Не ЗначениеЗаполнено(ЭтотОбъект.БазовыйКалендарь) Тогда + Возврат; + КонецЕсли; + + // Запрещаем ссылку на самого себя. + Если ЭтотОбъект.Ссылка = ЭтотОбъект.БазовыйКалендарь Тогда + ТекстСообщения = НСтр("ru = 'В качестве базового не может быть выбран тот же самый календарь.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , "Объект.БазовыйКалендарь", Отказ); + Возврат; + КонецЕсли; + + // Если календарь уже является базовым для какого-то другого календаря, + // то запрещаем заполнить базовый, чтобы избежать циклических зависимостей. + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Календарь", ЭтотОбъект.Ссылка); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Ссылка + |ИЗ + | Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари + |ГДЕ + | ПроизводственныеКалендари.БазовыйКалендарь = &Календарь"; + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Календарь уже является базовым для календаря «%1» и не может зависеть от другого.'"), + Выборка.Ссылка); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Выборка.Ссылка, , "Объект.БазовыйКалендарь", Отказ); + +КонецПроцедуры + +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ПроизводственныеКалендари.mdo b/SSL/src/Catalogs/ПроизводственныеКалендари/ПроизводственныеКалендари.mdo index 1080a307d..93704962e 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ПроизводственныеКалендари.mdo +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ПроизводственныеКалендари.mdo @@ -125,6 +125,32 @@ <quickChoice>true</quickChoice> <choiceMode>BothWays</choiceMode> <defaultObjectForm>Catalog.ПроизводственныеКалендари.Form.ФормаЭлемента</defaultObjectForm> + <defaultListForm>Catalog.ПроизводственныеКалендари.Form.ФормаСписка</defaultListForm> + <attributes uuid="1e9e115a-e65b-4346-b0d3-47cf1dbe75f2"> + <name>БазовыйКалендарь</name> + <synonym> + <key>ru</key> + <value>Базовый календарь</value> + </synonym> + <type> + <types>CatalogRef.ПроизводственныеКалендари</types> + </type> + <toolTip> + <key>ru</key> + <value>Календарь, заполнение которого берется за основу при заполнении настоящего календаря.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <choiceParameters> + <name>Отбор.БазовыйКалендарь</name> + <value xsi:type="core:ReferenceValue"> + <value>Catalog.ПроизводственныеКалендари.EmptyRef</value> + </value> + </choiceParameters> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <forms uuid="9e1be65e-986f-4d21-91f0-15c66db0c947"> <name>ФормаЭлемента</name> <synonym> @@ -139,6 +165,15 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="67993b79-6aca-4641-b2e2-0a15f44e47d5"> + <name>ФормаСписка</name> + <synonym> + <key>ru</key> + <value>Форма списка</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <templates uuid="d2fe4578-a1f8-4586-b052-fa71d25365c9"> <name>ПФ_MXL_ПроизводственныйКалендарь</name> <synonym> diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index 858034cfd..80b49aa43 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -433,10 +433,6 @@ &НаКлиенте Процедура ВосстановитьПоНачальномуЗаполнению(Команда) - Если Модифицированность ИЛИ ОбъектЗаписывался Тогда - РазблокироватьДанныеФормыДляРедактирования(); - КонецЕсли; - ПоказатьВопрос( Новый ОписаниеОповещения("ВосстановитьПоНачальномуЗаполнениюПродолжение", ЭтотОбъект), НСтр("ru = 'Восстановить профиль по содержимому начального заполнения?'"), @@ -557,9 +553,14 @@ Возврат; КонецЕсли; + Если Модифицированность ИЛИ ОбъектЗаписывался Тогда + РазблокироватьДанныеФормыДляРедактирования(); + КонецЕсли; + ОбновитьГруппыДоступа = (Ответ = КодВозвратаДиалога.Да); - НачальноеЗаполнениеПрофиляГруппДоступа(ОбновитьГруппыДоступа); + ГруппыДоступаПрофиля = Неопределено; + НачальноеЗаполнениеПрофиляГруппДоступа(ОбновитьГруппыДоступа, ГруппыДоступаПрофиля); Прочитать(); ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект); @@ -574,7 +575,19 @@ |группы доступа профиля не обновлены.'"); КонецЕсли; - ПоказатьОповещениеПользователя(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Объект.Наименование)); + ПоказатьОповещениеПользователя(НСтр("ru = 'Профиль восстановлен'"), + ПолучитьНавигационнуюСсылку(Объект.Ссылка), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Объект.Наименование)); + + Оповестить("Запись_ПрофилиГруппДоступа", Новый Структура, Объект.Ссылка); + + Если ОбновитьГруппыДоступа Тогда + ОповеститьОбИзменении(Тип("СправочникСсылка.ГруппыДоступа")); + + Для каждого ГруппаДоступаПрофиля Из ГруппыДоступаПрофиля Цикл + Оповестить("Запись_ГруппыДоступа", Новый Структура, ГруппаДоступаПрофиля); + КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -658,11 +671,27 @@ КонецПроцедуры &НаСервере -Процедура НачальноеЗаполнениеПрофиляГруппДоступа(Знач ОбновитьГруппыДоступа) +Процедура НачальноеЗаполнениеПрофиляГруппДоступа(Знач ОбновитьГруппыДоступа, ГруппыДоступаПрофиля) Справочники.ПрофилиГруппДоступа.ЗаполнитьПоставляемыйПрофиль( Объект.Ссылка, ОбновитьГруппыДоступа); + Если Не ОбновитьГруппыДоступа Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Профиль", Объект.Ссылка); + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Профиль = &Профиль"; + + ГруппыДоступаПрофиля = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index 81a897248..0c7c7cff2 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -1029,7 +1029,7 @@ ОписанияПрофилей = Новый Массив; - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииПоставляемыхПрофилейГруппДоступа( + ИнтеграцияПодсистемБСП.ПриЗаполненииПоставляемыхПрофилейГруппДоступа( ОписанияПрофилей, ПараметрыОбновления); УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа( diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> + <itemsViewMode>Normal</itemsViewMode> + <itemsUserSettingID>911b6018-f537-43e8-a417-da56b22f9aec</itemsUserSettingID> +</Settings> diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Form.form new file mode 100644 index 000000000..08d5cda07 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Form.form @@ -0,0 +1,301 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>СписокКомпоновщикНастроекПользовательскиеНастройки</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + Код + 19 + true + true + + true + + + Список.Code + + + КодРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Наименование + 16 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Список + + <key>ru</key> + <value>Список</value> + + 1 + + DynamicList + + + true + + + true + +
true
+ + Catalog.ПрофилиКлючевыхОпераций + true + true + true + true + +
+ + + + + + diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..52171e771 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Form.form @@ -0,0 +1,300 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + Код + 22 + true + true + + true + + + Список.Code + + + КодРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Наименование + 16 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + + <key>ru</key> + <value>Список</value> + + 1 + + DynamicList + + + true + + + true + +
true
+ + Catalog.ПрофилиКлючевыхОпераций + true + true + true + true + +
+ + + + + +
diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..9bd38e195 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,546 @@ + + + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + Normal + + + + КлючевыеОперацииПрофиля + 6 + + <key>ru</key> + <value>Ключевые операции профиля</value> + + true + true + + true + + + Объект.КлючевыеОперацииПрофиля + + None + + КлючевыеОперацииПрофиляКлючеваяОперация + 59 + true + true + + true + + + Объект.КлючевыеОперацииПрофиля.КлючеваяОперация + + + КлючевыеОперацииПрофиляКлючеваяОперацияРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + КлючевыеОперацииПрофиляКлючеваяОперацияКонтекстноеМеню + 60 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючевыеОперацииПрофиляЦелевоеВремя + 28 + true + true + + true + + + Объект.КлючевыеОперацииПрофиля.ЦелевоеВремя + + + КлючевыеОперацииПрофиляЦелевоеВремяРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + КлючевыеОперацииПрофиляЦелевоеВремяКонтекстноеМеню + 29 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючевыеОперацииПрофиляВажность + 31 + true + true + + true + + + Объект.КлючевыеОперацииПрофиля.Приоритет + + + КлючевыеОперацииПрофиляВажностьРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + КлючевыеОперацииПрофиляВажностьКонтекстноеМеню + 32 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + КлючевыеОперацииПрофиляКоманднаяПанель + 8 + + КлючевыеОперацииПрофиляСортироватьСписокПоВозрастанию + 37 + true + true + + true + + + КлючевыеОперацииПрофиляСортироватьСписокПоВозрастаниюРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Item.КлючевыеОперацииПрофиля.StandardCommand.SortListAsc + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + КлючевыеОперацииПрофиляСортироватьСписокПоУбыванию + 39 + true + true + + true + + + КлючевыеОперацииПрофиляСортироватьСписокПоУбываниюРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Item.КлючевыеОперацииПрофиля.StandardCommand.SortListDesc + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + КлючевыеОперацииПрофиляЗаполнить + 62 + true + true + + true + + + КлючевыеОперацииПрофиляЗаполнитьРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.Command.Заполнить + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + КлючевыеОперацииПрофиляСтрокаПоиска + 10 + + КлючевыеОперацииПрофиляСтрокаПоискаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + КлючевыеОперацииПрофиляСтрокаПоискаКонтекстноеМеню + 11 + true + + КлючевыеОперацииПрофиля + + true + + + + КлючевыеОперацииПрофиляСостояниеПросмотра + 13 + + КлючевыеОперацииПрофиляСостояниеПросмотраРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + КлючевыеОперацииПрофиляСостояниеПросмотраКонтекстноеМеню + 14 + true + + ViewStatusAddition + КлючевыеОперацииПрофиля + + true + + + + КлючевыеОперацииПрофиляУправлениеПоиском + 16 + + КлючевыеОперацииПрофиляУправлениеПоискомРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + КлючевыеОперацииПрофиляУправлениеПоискомКонтекстноеМеню + 17 + true + + SearchControlAddition + КлючевыеОперацииПрофиля + + true + + + + КлючевыеОперацииПрофиляРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + КлючевыеОперацииПрофиляКонтекстноеМеню + 7 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
+ + ФормаКоманднаяПанель + -1 + + ФормаСохранитьПрофильКлючевыхОпераций + 49 + true + true + + true + + + ФормаСохранитьПрофильКлючевыхОперацийРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.СохранитьПрофильКлючевыхОпераций + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗагрузитьПрофильКлючевыхОпераций + 4 + true + true + + true + + + ФормаЗагрузитьПрофильКлючевыхОперацийРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Command.ЗагрузитьПрофильКлючевыхОпераций + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + CatalogObject.ПрофилиКлючевыхОпераций + + + true + + + true + +
true
+ true + + + Объект.КлючевыеОперацииПрофиля + + +
+ + ЗагрузитьПрофильКлючевыхОпераций + + <key>ru</key> + <value>Загрузить профиль</value> + + 1 + + ru + Загрузить профиль ключевых операций + + + true + + + StdPicture.LoadReportSettings + + + + ЗагрузитьПрофильКлючевыхОпераций + + + TextPicture + DontUse + Auto + + + СохранитьПрофильКлючевыхОпераций + + <key>ru</key> + <value>Сохранить профиль</value> + + 3 + + ru + Сохранить профиль ключевых операций + + + true + + + StdPicture.Write + + + + СохранитьПрофильКлючевыхОпераций + + + TextPicture + DontUse + Auto + + + Заполнить + + <key>ru</key> + <value>Заполнить</value> + + 5 + + ru + Заполнить + + + true + + + + Заполнить + + + DontUse + Auto + + + + + + +
diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..9a008b8c9 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,18 @@ + +

Для дальнейшей оценки производительности программы необходимо заполнить профиль ключевых операций.

+

Создание нового профиля

+

Загрузка имеющегося профиля

+
  • Нажмите кнопку Загрузить профиль. С помощью кнопки можно воспользоваться ранее сохраненным профилем или полученным в файле. +
  • Укажите путь к профилю на компьютере. После этого указанный профиль будет загружен. Поле Наименование будет заполнено из ранее сохраненного профиля.

Заполнение профиля

+
  • Нажмите кнопку Заполнить. +
  • После этого все ключевые операции из списка ключевых операций переносятся автоматически. +
  • При этом по умолчанию заполняются поля Целевое время (значением 1.00) и Приоритет (значением 5).

Ввод ключевых операций

+
  • Нажмите кнопку Добавить. Выберите ключевую операцию из списка. +
  • Заполните поля Целевое время (например, 1.00) и Приоритет (например, 5).

Сохранение профиля

+
  • Нажмите кнопку Сохранить профиль. Укажите путь для сохранения файла на компьютер.

См. также:

+ \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..0e2a73626 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,185 @@ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗагрузитьПрофильКлючевыхОпераций(Команда) + + ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ДиалогВыбора.Заголовок = НСтр("ru = 'Выберите файл профиля ключевых операций'"); + ДиалогВыбора.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; + + ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораФайлаЗавершение", ЭтотОбъект, Неопределено); + ДиалогВыбора.Показать(ОписаниеОповещения); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьПрофильКлючевыхОпераций(Команда) + + ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогВыбора.Заголовок = НСтр("ru = 'Сохранить профиль ключевых операций в файл'"); + ДиалогВыбора.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; + + ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогСохраненияФайлаЗавершение", ЭтотОбъект, Неопределено); + ДиалогВыбора.Показать(ОписаниеОповещения); + +КонецПроцедуры + +&НаКлиенте +Процедура Заполнить(Команда) + ЗаполнитьНаСервере(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ДиалогВыбораФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы <> Неопределено Тогда + + Если НЕ ЗначениеЗаполнено(Объект.Наименование) Тогда + ФайлИмя = Новый Файл(ВыбранныеФайлы[0]); + Объект.Наименование = ФайлИмя.ИмяБезРасширения; + КонецЕсли; + + ДвоичныеДанные = Новый ДвоичныеДанные(ВыбранныеФайлы[0]); + АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); + ЗагрузитьПрофильКлючевыхОперацийНаСервере(АдресХранилища); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДиалогСохраненияФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы <> Неопределено Тогда + АдресХранилища = СохранитьПрофильКлючевыхОперацийНаСервере(); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища); + ДвоичныеДанные.Записать(ВыбранныеФайлы[0]); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция СохранитьПрофильКлючевыхОперацийНаСервере() + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Items"); + ЗаписьXML.ЗаписатьАтрибут("Description", Объект.Наименование); + ЗаписьXML.ЗаписатьАтрибут("Columns", "Имя,ЦелевоеВремя,Важность"); + + Для Каждого ТекСтрока Из Объект.КлючевыеОперацииПрофиля Цикл + ЗаписьXML.ЗаписатьНачалоЭлемента("Item"); + ЗаписьXML.ЗаписатьАтрибут("Имя", ТекСтрока.КлючеваяОперация.Имя); + ЗаписьXML.ЗаписатьАтрибут("ЦелевоеВремя", Формат(ТекСтрока.ЦелевоеВремя, "ЧГ=0")); + ЗаписьXML.ЗаписатьАтрибут("Важность", Формат(ТекСтрока.Приоритет, "ЧГ=0")); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.Закрыть(); + + ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла); + АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); + + УдалитьФайлы(ИмяВременногоФайла); + + Возврат АдресХранилища; + +КонецФункции + +&НаСервере +Функция ЗагрузитьПрофильКлючевыхОперацийНаСервере(АдресХранилища) + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища); + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); + ДвоичныеДанные.Записать(ИмяВременногоФайла); + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(ИмяВременногоФайла); + КлючевыеОперации = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + + Колонки = СтрРазделить(КлючевыеОперации["Columns"], ",",Ложь); + + Если ТипЗнч(КлючевыеОперации["Item"]) = Тип("ОбъектXDTO") Тогда + ЗагрузитьОбъектXDTO(КлючевыеОперации["Item"], Колонки); + Иначе + Для Каждого ТекЭлемент Из КлючевыеОперации["Item"] Цикл + ЗагрузитьОбъектXDTO(ТекЭлемент, Колонки); + КонецЦикла; + КонецЕсли; + + ЧтениеXML.Закрыть(); + УдалитьФайлы(ИмяВременногоФайла); + +КонецФункции + +&НаСервере +Процедура ЗагрузитьОбъектXDTO(ОбъектXDTO, Колонки) + + ТекЭлемент = ОбъектXDTO; + + КлючеваяОперация = Справочники.КлючевыеОперации.НайтиПоРеквизиту("Имя", ТекЭлемент.Имя); + Если КлючеваяОперация.Пустая() Тогда + КлючеваяОперация = ОценкаПроизводительности.СоздатьКлючевуюОперацию(ТекЭлемент.Имя); + КонецЕсли; + ПараметрыОтбора = Новый Структура("КлючеваяОперация", КлючеваяОперация); + НайденныеСтроки = Объект.КлючевыеОперацииПрофиля.НайтиСтроки(ПараметрыОтбора); + + Если НайденныеСтроки.Количество() = 0 Тогда + + НовСтрока = Объект.КлючевыеОперацииПрофиля.Добавить(); + НовСтрока.КлючеваяОперация = КлючеваяОперация; + + Для Каждого ТекКолонка Из Колонки Цикл + ИмяКолонки = ?(ТекКолонка = "Важность", "Приоритет", ТекКолонка); + Если НовСтрока.Свойство(ИмяКолонки) И ТекЭлемент.Свойства().Получить(ТекКолонка) <> Неопределено Тогда + НовСтрока[ИмяКолонки] = ТекЭлемент[ТекКолонка]; + КонецЕсли; + КонецЦикла; + + Если НЕ ЗначениеЗаполнено(НовСтрока.Приоритет) Тогда + НовСтрока.Приоритет = 5; + КонецЕсли; + Иначе + Для Каждого НовСтрока Из НайденныеСтроки Цикл + Для Каждого ТекКолонка Из Колонки Цикл + ИмяКолонки = ?(ТекКолонка = "Важность", "Приоритет", ТекКолонка); + Если НовСтрока.Свойство(ИмяКолонки) И ТекЭлемент.Свойства().Получить(ТекКолонка) <> Неопределено Тогда + НовСтрока[ИмяКолонки] = ТекЭлемент[ТекКолонка]; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьНаСервере() + Запрос = Новый Запрос("ВЫБРАТЬ + | КлючевыеОперации.Ссылка КАК КлючеваяОперация, + | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + | ВЫБОР + | КОГДА КлючевыеОперации.Приоритет = 0 + | ТОГДА 5 + | ИНАЧЕ КлючевыеОперации.Приоритет + | КОНЕЦ КАК Приоритет + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | НЕ КлючевыеОперации.ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | КлючевыеОперации.Наименование"); + Объект.КлючевыеОперацииПрофиля.Загрузить(Запрос.Выполнить().Выгрузить()); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Help/ru.html b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Help/ru.html new file mode 100644 index 000000000..d20026536 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Help/ru.html @@ -0,0 +1,6 @@ + +

Для оценки производительности программы необходимо заполнить профиль ключевых операций.

+

Список открывается по соответствующей ссылке из раздела Администрирование - Обслуживание - Оценка производительности.

+

Для ввода профиля нажмите кнопку Создать.

+

См. также:

+ \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ObjectModule.bsl new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ObjectModule.bsl @@ -0,0 +1 @@ + diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ПрофилиКлючевыхОпераций.mdo b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ПрофилиКлючевыхОпераций.mdo new file mode 100644 index 000000000..367089362 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ПрофилиКлючевыхОпераций.mdo @@ -0,0 +1,249 @@ + + + + + + + + + + ПрофилиКлючевыхОпераций + + ru + Профили ключевых операций + + true + Catalog.ПрофилиКлючевыхОпераций.StandardAttribute.Description + Catalog.ПрофилиКлючевыхОпераций.StandardAttribute.Code + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + true + + Use + + + + + Use + Description + + ru + Наименование профиля ключевых операций + + + ShowError + Use + + + + + Use + Code + + ru + Код профиля ключевых операций + + + Use + + + + Use + + + ru + + + Managed + + ru + Профиль ключевых операций + + + ru + Профиль ключевых операций замера производительности + + + ru + Профили ключевых операций замера производительности + + 2 + true + 9 + 100 + String + Variable + true + true + AsDescription + InDialog + BothWays + Catalog.ПрофилиКлючевыхОпераций.Form.ФормаЭлемента + Catalog.ПрофилиКлючевыхОпераций.Form.ФормаСписка + Catalog.ПрофилиКлючевыхОпераций.Form.ФормаВыбора + + + + + + КлючевыеОперацииПрофиля + + ru + Ключевые операции профиля + + + Use + LineNumber + + Use + + + + + КлючеваяОперация + + ru + Ключевая операция + + + CatalogRef.КлючевыеОперации + + + ru + Ключевая операция профиля + + + + Use + Use + + + ЦелевоеВремя + + ru + Целевое время + + + Number + + 5 + 1 + + + + ru + Целевое время ключевой операции с точки зрения пользователя профиля + + + + Use + Use + + + Приоритет + + ru + Приоритет + + + Number + + 5 + true + + + + ru + Приоритет ключевой операции с точки зрения пользователя профиля + + + + Use + Use + + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЭлемента + + ru + Форма элемента + + + + ru + + + PersonalComputer + MobileDevice + + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl index 3e4d4bd4f..69febf150 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl @@ -3,12 +3,12 @@ &НаКлиенте Процедура ОбработкаКоманды(Рассылка, Параметры) - ПараметрыФормыЖурналаРегистрации = ПараметрыФормыЖурналаРегистрации(Рассылка); - Если ПараметрыФормыЖурналаРегистрации = Неопределено Тогда + ПараметрыЖурналаРегистрации = ПараметрыЖурналаРегистрации(Рассылка); + Если ПараметрыЖурналаРегистрации = Неопределено Тогда ПоказатьПредупреждение(, НСтр("ru = 'Рассылка еще не выполнялась.'")); Возврат; КонецЕсли; - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормыЖурналаРегистрации, ЭтотОбъект); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыЖурналаРегистрации, ЭтотОбъект); КонецПроцедуры #КонецОбласти @@ -16,34 +16,8 @@ #Область СлужебныеПроцедурыИФункции &НаСервере -Функция ПараметрыФормыЖурналаРегистрации(Рассылка) - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Состояния.ПоследнийЗапуск, - | Состояния.НомерСеанса - |ИЗ - | РегистрСведений.СостоянияРассылокОтчетов КАК Состояния - |ГДЕ - | Состояния.Рассылка = &Рассылка"; - Запрос.УстановитьПараметр("Рассылка", Рассылка); - - УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); - Если Не Выборка.Следующий() Тогда - Возврат Неопределено; - КонецЕсли; - Результат = Новый Структура; - Результат.Вставить("ДатаНачала", Выборка.ПоследнийЗапуск); - Если Не ЗначениеЗаполнено(Выборка.НомерСеанса) Тогда - Результат.Вставить("Данные", Рассылка); - Иначе - Сеансы = Новый СписокЗначений; - Сеансы.Добавить(Выборка.НомерСеанса); - Результат.Вставить("Сеанс", Сеансы); - КонецЕсли; - Возврат Результат; +Функция ПараметрыЖурналаРегистрации(Рассылка) + Возврат РассылкаОтчетов.ПараметрыЖурналаРегистрации(Рассылка); КонецФункции - #КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form index 394e4bfa5..c2991c36e 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form @@ -1,5 +1,219 @@ + + ГруппаОтборы + 157 + + СостояниеОтбор + 165 + true + true + + true + + + СостояниеОтбор + + None + + OnChange + СостояниеОтборПриИзменении + + + СостояниеОтборРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + СостояниеОтборКонтекстноеМеню + 166 + true + + InputField + Enter + true + Left + true + + 15 + true + true + true + true + true + true + true + + + ru + Все + + + Все + + + + + ru + Выполненные + + + Выполненные + + + + + ru + Невыполненные + + + Невыполненные + + + Normal + + ru + Все рассылки + + + + + ОтветственныйОтбор + 159 + true + true + + true + + + ОтветственныйОтбор + + + OnChange + ОтветственныйОтборПриИзменении + + + ОтветственныйОтборРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + + ОтветственныйОтборКонтекстноеМеню + 160 + true + + InputField + Enter + true + Left + true + + 35 + true + true + true + true + false + true + true + true + Normal + + ru + Все + + + + + ОтчетОтбор + 162 + true + true + + true + + + ОтчетОтбор + + + OnChange + ОтчетОтборПриИзменении + + + ОтчетОтборРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + + ОтчетОтборКонтекстноеМеню + 163 + true + + InputField + Enter + true + Left + true + + 35 + true + true + true + true + false + true + true + true + Normal + + ru + Все + + + + true + true + + true + + + <key>ru</key> + <value>Отборы</value> + + + ГруппаОтборыРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ГруппаПользовательскихНастроек 83 @@ -1683,8 +1897,8 @@ Left - OnOpen - ПриОткрытии + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере OnCreateAtServer @@ -1767,18 +1981,18 @@ Рассылки.АдресОтвета, Рассылки.Архивировать, Рассылки.ИмяАрхива, - Состояние.ПоследнийЗапуск, + Состояние.ПоследнийЗапускНачало Как ПоследнийЗапуск, Состояние.СОшибками, ВЫБОР КОГДА Состояние.Выполнена - ТОГДА Состояние.ПоследнийЗапуск + ТОГДА Состояние.ПоследнийЗапускНачало ИНАЧЕ Состояние.УспешныйЗапуск КОНЕЦ КАК УспешныйЗапуск, ВЫБОР - КОГДА Состояние.ПоследнийЗапуск ЕСТЬ NULL + КОГДА Состояние.ПоследнийЗапускНачало ЕСТЬ NULL ИЛИ Рассылки.ПометкаУдаления = ИСТИНА ТОГДА 0 - КОГДА Состояние.ПоследнийЗапуск = &ПустаяДата + КОГДА Состояние.ПоследнийЗапускНачало = &ПустаяДата ТОГДА 0 КОГДА НЕ Состояние.Выполнена ТОГДА 1 @@ -1787,10 +2001,10 @@ ИНАЧЕ 2 КОНЕЦ КАК ИндексКартинкиПоследнегоЗапуска, ВЫБОР - КОГДА Состояние.ПоследнийЗапуск ЕСТЬ NULL + КОГДА Состояние.ПоследнийЗапускНачало ЕСТЬ NULL ИЛИ Рассылки.ПометкаУдаления = ИСТИНА ТОГДА ВЫРАЗИТЬ("" КАК СТРОКА(50)) - КОГДА Состояние.ПоследнийЗапуск = &ПустаяДата + КОГДА Состояние.ПоследнийЗапускНачало = &ПустаяДата ТОГДА &ПредставлениеСостоянияНовая КОГДА НЕ Состояние.Выполнена ТОГДА &ПредставлениеСостоянияНеВыполнена @@ -1800,8 +2014,15 @@ КОНЕЦ КАК Состояние ИЗ Справочник.РассылкиОтчетов КАК Рассылки - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияРассылокОтчетов КАК Состояние - ПО (Состояние.Рассылка = Рассылки.Ссылка) +ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияРассылокОтчетов КАК Состояние +ПО (Состояние.Рассылка = Рассылки.Ссылка) +{ГДЕ ИСТИНА В +( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + Справочник.РассылкиОтчетов.Отчеты КАК Отчеты + ГДЕ Отчеты.Ссылка = Рассылки.Ссылка И Отчеты.Отчет = &ОтчетОтбор +)} Catalog.РассылкиОтчетов true true @@ -1831,12 +2052,46 @@
- ТекстОшибкиПриОткрытии + ОтветственныйОтбор <key>ru</key> - <value>Текст ошибки при открытии</value> + <value>Ответственный</value> - 3 + 4 + + CatalogRef.Пользователи + + + true + + + true + + + + ОтчетОтбор + + <key>ru</key> + <value>Отчет</value> + + 5 + + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + СостояниеОтбор + + <key>ru</key> + <value>Состояние</value> + + 6 String @@ -1870,6 +2125,13 @@ DontUse Auto
+ + Отчет + + CatalogRef.ВариантыОтчетов + + true + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl index ec4db16f4..8eddcaa22 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl @@ -2,6 +2,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -10,19 +12,9 @@ Элементы.Список.Отображение = ОтображениеТаблицы[Параметры.Отображение]; КонецЕсли; - СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата( - Список, - "ПоследнийЗапуск", - Элементы.ПоследнийЗапуск.Имя); - - СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата( - Список, - "УспешныйЗапуск", - Элементы.УспешныйЗапуск.Имя); - ТекстОшибкиПриОткрытии = РассылкаОтчетовПовтИсп.ТекстОшибкиПроверкиПраваДобавления(); Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда - Возврат; + ВызватьИсключение ТекстОшибкиПриОткрытии; КонецЕсли; // Установка отборов динамического списка. @@ -53,32 +45,21 @@ Если Параметры.РежимВыбора Тогда РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "ФОРМАВЫБРАТЬ", - "КнопкаПоУмолчанию", - Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФОРМАВЫБРАТЬ", "КнопкаПоУмолчанию", Истина); Иначе - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "ФОРМАВЫБРАТЬ", - "Видимость", - Ложь); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФОРМАВЫБРАТЬ", "Видимость", Ложь); КонецЕсли; Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеРассылокОтчетов") Тогда // Режим показа только личных рассылок - скрываются группы и лишние колонки. Элементы.Список.Отображение = ОтображениеТаблицы.Список; - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, - "ЭтоГруппа", - Ложь, - , - , - Истина, + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ЭтоГруппа", Ложь, , , Истина, РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); КонецЕсли; + ОтчетОтбор = Параметры.Отчет; + УстановитьОтбор(Ложь); + Список.Параметры.УстановитьЗначениеПараметра("ПустаяДата", '00010101'); Список.Параметры.УстановитьЗначениеПараметра("ПредставлениеСостоянияНовая", НСтр("ru = 'Новая'")); Список.Параметры.УстановитьЗначениеПараметра("ПредставлениеСостоянияНеВыполнена", НСтр("ru = 'Не выполнена'")); @@ -96,12 +77,28 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + УстановитьОтборСписка(Настройки); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + &НаКлиенте -Процедура ПриОткрытии(Отказ) - Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда - Отказ = Истина; - ПоказатьПредупреждение(, ТекстОшибкиПриОткрытии); - КонецЕсли; +Процедура СостояниеОтборПриИзменении(Элемент) + УстановитьОтбор(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетОтборПриИзменении(Элемент) + УстановитьОтбор(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтветственныйОтборПриИзменении(Элемент) + УстановитьОтбор(); КонецПроцедуры #КонецОбласти @@ -118,6 +115,34 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере +Процедура УстановитьУсловноеОформление() + + СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "Список.ПоследнийЗапуск", Элементы.ПоследнийЗапуск.Имя); + СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "Список.УспешныйЗапуск", Элементы.УспешныйЗапуск.Имя); + + ЭлементУсловногоОформления = Список.УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + + // Неподготовленные рассылки отчетов + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоГруппа"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Ложь; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Подготовлена"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Ложь; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("ЦветТекста"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьПараметрСписка(Ключ) Если Параметры.Свойство(Ключ) И ЗначениеЗаполнено(Параметры[Ключ]) Тогда @@ -125,4 +150,29 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Процедура УстановитьОтбор(СнятьФиксированныеОтборы = Истина) + + Если СнятьФиксированныеОтборы Тогда + Список.Отбор.Элементы.Очистить(); + КонецЕсли; + ПараметрыОтбора = Новый Соответствие(); + ПараметрыОтбора.Вставить("СОшибками", СостояниеОтбор); + ПараметрыОтбора.Вставить("Отчет", ОтчетОтбор); + ПараметрыОтбора.Вставить("Автор", ОтветственныйОтбор); + УстановитьОтборСписка(ПараметрыОтбора); +КонецПроцедуры + +&НаСервере +Процедура УстановитьОтборСписка(ПараметрыОтбора) + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Автор", ПараметрыОтбора["Автор"],,, + Не ПараметрыОтбора["Автор"].Пустая()); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "СОшибками", ПараметрыОтбора["СОшибками"] = "Невыполненные",,, + ПараметрыОтбора["СОшибками"] <> "Все"); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "ОтчетОтбор", ПараметрыОтбора["Отчет"], + ЗначениеЗаполнено(ПараметрыОтбора["Отчет"]) И Не ПараметрыОтбора["Отчет"].Пустая()); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form index 370fafec5..44b084839 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -1628,7 +1628,7 @@ Left
- Form.Command.ИспользоватьПолучателяРассылкиВНастройкеОтчета + Form.Command.УказатьПолучателяРассылки Normal Auto true @@ -1753,7 +1753,33 @@ Left - Form.Command.ИспользоватьПолучателяРассылкиВНастройкеОтчета + Form.Command.УказатьПолучателяРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ПользовательскиеНастройкиКонтекстноеМенюУдалитьПолучателяРассылки + 1183 + true + true + + true + + + ПользовательскиеНастройкиКонтекстноеМенюУдалитьПолучателяРассылкиРасширеннаяПодсказка + 1184 + Label + true + true + + Left + + + Form.Command.УдалитьПолучателяРассылки Normal Auto true @@ -1994,7 +2020,7 @@ Left - Form.Command.ИспользоватьПолучателяРассылкиВНастройкеОтчета + Form.Command.УказатьПолучателяРассылки Normal Auto true @@ -2110,7 +2136,7 @@ Left - Form.Command.ИспользоватьПолучателяРассылкиВНастройкеОтчета + Form.Command.УказатьПолучателяРассылки Normal Auto true @@ -10256,7 +10282,7 @@ ПредварительныйПросмотрОтчета <key>ru</key> - <value>Просмотр</value> + <value>Предварительный просмотр...</value> 11 @@ -10566,7 +10592,7 @@ Auto - ИспользоватьПолучателяРассылкиВНастройкеОтчета + УказатьПолучателяРассылки <key>ru</key> <value>Указать получателя рассылки</value> @@ -10574,7 +10600,7 @@ <id>24</id> <toolTip> <key>ru</key> - <value>Указать получателя рассылки в выбранной настройке</value> + <value>Указать получателя рассылки в настройке отчета</value> </toolTip> <use> <common>true</common> @@ -10584,7 +10610,7 @@ </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>ИспользоватьПолучателяРассылкиВНастройкеОтчета</name> + <name>УказатьПолучателяРассылки</name> </handler> </action> <representation>TextPicture</representation> @@ -10694,6 +10720,28 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>УдалитьПолучателяРассылки</name> + <title> + <key>ru</key> + <value>Удалить получателя рассылки</value> + + 28 + + ru + Удалить получателя рассылки из настройки отчета + + + true + + + + УдалитьПолучателяРассылки + + + DontUse + Auto + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html index af018358b..ba6b07706 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -34,7 +34,7 @@
  • Если выбрана личная рассылка автора, то доставка выполняется только по электронной почте по единственному адресу, который указывается в поле Почтовый адрес.
  • Если выбран Свой отчет для каждого получателя, то доставка также выполняется только по электронной почте, но уже не одному, а нескольким получателям.
  • Если выбраны Отчеты указанным получателям, то кроме доставки по почте появляется возможность сохранить (опубликовать) готовые отчеты. Для этого включите флажок Публиковать - признак необходимости публикации рассылки. Выберите соответствующее значение: -
    • В папку - отчеты будут сохранены в указанную папку подсистемы "Работа с файлами". +
      • В папку - отчеты будут сохранены в указанную папку подсистемы "Работа с файлами". С помощью этого способа доставки можно организовать регулярную архивацию отчетов в папку файлов (при этом отключив отправку по электронной почте);
      • В сетевой каталог - отчеты будут сохранены в выбранный сетевой каталог. Запись производится с сервера, поэтому рекомендуется указывать сетевой путь в формате UNC, например: \\server\folder\. Укажите адрес этого каталога в поле Windows (если вы работаете на компьютере под управлением этой операционной системы) или в поле Linux (если вы работаете на компьютере под управлением Linux).
      • На FTP ресурс - отчеты будут сохранены на ftp-сервере. Заполните необходимые параметры.
    • Проверить - проверка публикации путем записи и удаления тестового файла. Тест считается успешным, если ошибок не возникло.
    • Отправлять по электронной почте - признак использования электронной почты для отправки отчетов (или уведомлений). @@ -56,7 +56,9 @@
      [ЗаголовокСистемы] - заголовок информационной базы 1С:Предприятие для всех пользователей. Устанавливается в разделе Администрирование - Общие настройки.
    • [СпособДоставки] - представление ресурса, на котором был опубликован отчет.
  • -
    По умолчанию установлен формат письма HTML, можно изменить его на Обычный. В формате HTML доступны стандартные команды форматирования текста (часть из них размещена в виде кнопок, остальные можно найти в меню Еще).
  • Дополнительно

    +
    По умолчанию установлен формат письма HTML, можно изменить его на Обычный. В формате HTML доступны стандартные команды форматирования текста (часть из них размещена в виде кнопок, остальные можно найти в меню Еще).
    +
  • +
    С помощью соответствующего флажка можно Транслитерировать имена файлов. В этом случае сохраненные файлы будут иметь имена, содержащие только латинские буквы и цифры, для возможности переноса между различными операционными системами. Например, файл Отчет.mxl будет сохранен с именем Otchet.mxl.
  • Дополнительно

    • Форматы сохранения отчетов (по умолчанию) - определяет форматы, в которых будут по умолчанию сохранены отчеты.  Выберите общие форматы для всех отчетов с помощью флажков. Можно выбрать несколько форматов.
    • В таблице ниже для каждого отчета можно задать свой набор форматов в колонке Форматы.
    • В колонке Отправлять пустой установите флажок для отправки сформированного отчета, даже если он пустой. По умолчанию флажок снят. Отчеты с графикой всегда считаются не пустыми. diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index a13da6b12..7d45613e9 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -353,10 +353,10 @@ // [2] Поиск незаполненных но обязательных для заполнения настроек. // Анализ выполняется для СКД отчетов, если рассылка подготовлена. ПроверитьОбязательные = Объект.Подготовлена; - // [3] Поиск персонализированных полей если эта рассылка не персонализирована. + // [3] Поиск персонализированных полей, если эта рассылка не персонализирована. // Анализ выполняется для всех отчетов, если пользователь сменил вид рассылки с персонализированной на любой // другой. - ПроверитьПерсонализированные = (Не Объект.Персонализирована И РассылкаБылаПерсонализирована); + РассылкаНеПерсонализирована = (Не Объект.Персонализирована И РассылкаБылаПерсонализирована); Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл ОбъектСтрокаОтчеты = ТекущийОбъект.Отчеты.Получить(СтрокаОтчеты.НомерСтроки-1); @@ -368,13 +368,13 @@ // [1] Запись настроек. ОбъектСтрокаОтчеты.Настройки = Новый ХранилищеЗначения(ПользовательскиеНастройки, Новый СжатиеДанных(9)); - Если Не ПроверитьОбязательные И Не ПроверитьПерсонализированные Тогда + Если Не ПроверитьОбязательные И Не РассылкаНеПерсонализирована Тогда Продолжить; КонецЕсли; Иначе - Если Не ПроверитьОбязательные И Не ПроверитьПерсонализированные Тогда + Если Не ПроверитьОбязательные И Не РассылкаНеПерсонализирована Тогда Продолжить; КонецЕсли; @@ -390,11 +390,7 @@ // [2] и [3] Инициализация настроек. ПараметрыОтчета = ИнициализироватьОтчет(СтрокаОтчеты, Истина, ПользовательскиеНастройки, Ложь); НастройкиОтчета = ?(СтрокаОтчеты.СКД, ПараметрыОтчета.КомпоновщикНастроекКД, ПользовательскиеНастройки); - - // [3] Заполнение переменных. - Если ПроверитьПерсонализированные Тогда - ОтчетПерсонализирован = Ложь; - КонецЕсли; + ОтчетПерсонализирован = Ложь; // [2] и [3] Анализ СКД отчетов. Если СтрокаОтчеты.СКД Тогда @@ -441,26 +437,31 @@ КонецЕсли; // СтрокаОтчеты.СКД // [3] Анализ обычных отчетов. - Если ПроверитьПерсонализированные Тогда - // [3] Анализ обычных отчетов. - Если ТипЗнч(НастройкиОтчета) = Тип("ТаблицаЗначений") Тогда - Найденные = НастройкиОтчета.НайтиСтроки(Новый Структура("Значение, Использование", "[Получатель]", Истина)); - Если Найденные.Количество() > 0 Тогда - ОтчетПерсонализирован = Истина; - КонецЕсли; - КонецЕсли; - // [3] Вывод ошибки. - Если ОтчетПерсонализирован Тогда - Отказ = Истина; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для отчета ''%1'' задан отбор по получателям рассылки. Необходимо отключить отбор по получателям или изменить вид рассылки на ''Свой отчет для каждого получателя''.'"), - Строка(СтрокаОтчеты.Отчет)); - Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление"; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); + Если ТипЗнч(НастройкиОтчета) = Тип("ТаблицаЗначений") Тогда + Найденные = НастройкиОтчета.НайтиСтроки(Новый Структура("Значение, Использование", "[Получатель]", Истина)); + Если Найденные.Количество() > 0 Тогда + ОтчетПерсонализирован = Истина; КонецЕсли; КонецЕсли; + Если РассылкаНеПерсонализирована И ОтчетПерсонализирован Тогда + Отказ = Истина; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В настройках отчета ''%1'' задан отбор по получателю рассылки. Необходимо отключить этот отбор или изменить вид рассылки на ''Свой отчет для каждого получателя''.'"), + Строка(СтрокаОтчеты.Отчет)); + Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление"; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); + КонецЕсли; - КонецЦикла; // Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл + Если Объект.Персонализирована И НЕ ОтчетПерсонализирован Тогда + Отказ = Истина; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В настройках отчета ""%1"" не указан отбор по получателю рассылки.'"), + Строка(СтрокаОтчеты.Отчет)); + Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление"; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); + КонецЕсли; + + КонецЦикла; ТекущийОбъект.КартинкиПисьмаВФорматеHTML = Неопределено; Если ТекущийОбъект.ПисьмоВФорматеHTML Тогда @@ -730,7 +731,7 @@ СтандартнаяОбработка = Ложь; ПолныйАдрес = "ftp://"+ Объект.FTPСервер +":"+ Формат(Объект.FTPПорт, "ЧН=21; ЧГ=0") + Объект.FTPКаталог; - ОбщегоНазначенияКлиент.ПерейтиПоСсылке(ПолныйАдрес); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ПолныйАдрес); КонецПроцедуры @@ -1315,7 +1316,7 @@ КонецПроцедуры &НаКлиенте -Процедура ИспользоватьПолучателяРассылкиВНастройкеОтчета(Команда) +Процедура УказатьПолучателяРассылки(Команда) ОчиститьСообщения(); // Проверка - включена ли возможность персонализации рассылки. @@ -1327,8 +1328,6 @@ Возврат; КонецЕсли; - СКД = (Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаКомпоновщик); - // Получение основного типа получателей. КоличествоТипов = ТипПолучателейРассылки.Типы().Количество(); Если КоличествоТипов <> 1 И КоличествоТипов <> 2 Тогда @@ -1336,12 +1335,6 @@ Возврат; КонецЕсли; - Если СКД Тогда - Инициатор = Элементы.ПользовательскиеНастройки; - Иначе - Инициатор = Элементы.НастройкиТекущегоОтчета; - КонецЕсли; - НайденныеИОМД = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); Если НайденныеИОМД.Количество() <> 1 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Тип получателей не найден'")); @@ -1356,21 +1349,107 @@ ОсновнойТипПолучателей = МассивТипов[0]; + Настройка = ОпределитьНастройку(); + Если Настройка = Неопределено Тогда + Возврат; + КонецЕсли; + + // Проверка на содержание типа получателей. + Если Не Настройка.ОписаниеДоступныхТипов.СодержитТип(ОсновнойТипПолучателей) Тогда + ТекстПредупреждения = НСтр("ru = 'Тип ""%1"" не подходит по типу к выбранной настройке. + |Необходимо выбрать другой тип получателей рассылки или другую настройку.'"); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Строка(ОсновнойТипПолучателей)); + ПоказатьПредупреждение(, ТекстПредупреждения); + Возврат; + КонецЕсли; + + Настройка.Инициатор.ЗакончитьРедактированиеСтроки(Ложь); + Настройка.СтрокаНастроек.Использование = Истина; + Если Настройка.СКД Тогда + Если Настройка.ЭтоЭлементОтбора Тогда + Если Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке + Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии + Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке + Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии + Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + КонецЕсли; + Настройка.СтрокаНастроек.ПравоеЗначение = "[Получатель]"; + Иначе + Настройка.СтрокаНастроек.Значение = "[Получатель]"; + КонецЕсли; + Иначе + Настройка.СтрокаНастроек.Значение = "[Получатель]"; + КонецЕсли; + + РассылкаБылаПерсонализирована = Истина; + Элементы.Отчеты.ТекущиеДанные.ВнесеныИзменения = Истина; + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьПолучателяРассылки(Команда) + ОчиститьСообщения(); + + Настройка = ОпределитьНастройку(); + Если Настройка = Неопределено Тогда + Возврат; + КонецЕсли; + + Настройка.Инициатор.ЗакончитьРедактированиеСтроки(Ложь); + ВнесеныИзменения = Ложь; + Если Настройка.СКД Тогда + Если Настройка.ЭтоЭлементОтбора Тогда + Если Настройка.СтрокаНастроек.ПравоеЗначение = "[Получатель]" Тогда + Настройка.СтрокаНастроек.ПравоеЗначение = Неопределено; + ВнесеныИзменения = Истина; + КонецЕсли; + Иначе + Если Настройка.СтрокаНастроек.Значение = "[Получатель]" Тогда + Настройка.СтрокаНастроек.Значение = Неопределено; + ВнесеныИзменения = Истина; + КонецЕсли; + КонецЕсли; + Иначе + Если Настройка.СтрокаНастроек.Значение = "[Получатель]" Тогда + Настройка.СтрокаНастроек.Значение = Неопределено; + ВнесеныИзменения = Истина; + КонецЕсли; + КонецЕсли; + + Если ВнесеныИзменения Тогда + Элементы.Отчеты.ТекущиеДанные.ВнесеныИзменения = Истина; + Модифицированность = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ОпределитьНастройку() + + СКД = (Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаКомпоновщик); + Если СКД Тогда + Инициатор = Элементы.ПользовательскиеНастройки; + Иначе + Инициатор = Элементы.НастройкиТекущегоОтчета; + КонецЕсли; + // Получения описания типов, доступных для выбора. Если СКД Тогда // Идентификатор пользовательской настройки. ИдентификаторНастройки = Инициатор.ТекущаяСтрока; Если ИдентификаторНастройки = Неопределено Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите настройку отчета'")); - Возврат; + ПоказатьПредупреждение(, НСтр("ru = 'Не выбрана настройка отчета.'")); + Возврат Неопределено; КонецЕсли; // Получение строки из состава настроек компоновки данных. СтрокаНастроек = КомпоновщикНастроекКД.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторНастройки); Если СтрокаНастроек = Неопределено Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Настройка отчета не найдена'")); - Возврат; + ПоказатьПредупреждение(, НСтр("ru = 'Не выбрана настройка отчета.'")); + Возврат Неопределено; КонецЕсли; // Проверка типа настройки. @@ -1379,17 +1458,15 @@ ИначеЕсли ТипЗнч(СтрокаНастроек) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда ЭтоЭлементОтбора = Ложь; Иначе - ПоказатьПредупреждение(, НСтр("ru = 'Указывать получателя можно только для параметров и отборов отчетов'")); - Возврат; + ПоказатьПредупреждение(, НСтр("ru = 'Указывать получателя можно только для параметров и отборов отчетов.'")); + Возврат Неопределено; КонецЕсли; // Поле компоновки данных. Если ЭтоЭлементОтбора Тогда Если ЗначениеЗаполнено(СтрокаНастроек.ЛевоеЗначение) Тогда - ПолеКД = СтрокаНастроек.ЛевоеЗначение; - Иначе ПолеКД = ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, КомпоновщикНастроекКД.Настройки.Отбор.Элементы); @@ -1398,21 +1475,18 @@ КонецЕсли; Если ПолеКД = Неопределено Тогда ПоказатьПредупреждение(, НСтр("ru = 'Для настройки отчета не найдено описание доступного поля'")); - Возврат; + Возврат Неопределено; КонецЕсли; КонецЕсли; - ДоступноеПолеКД = КомпоновщикНастроекКД.Настройки.Отбор.ДоступныеПоляОтбора.НайтиПоле(ПолеКД); Иначе - ДоступноеПолеКД = КомпоновщикНастроекКД.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(СтрокаНастроек.Параметр); - КонецЕсли; Если ДоступноеПолеКД = Неопределено Тогда - Возврат; + Возврат Неопределено; КонецЕсли; ОписаниеДоступныхТипов = ДоступноеПолеКД.ТипЗначения; @@ -1421,48 +1495,22 @@ // Массив типов для произвольных отчетов. СтрокаНастроек = Инициатор.ТекущиеДанные; Если СтрокаНастроек = Неопределено Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите настройку отчета'")); - Возврат; + ПоказатьПредупреждение(, НСтр("ru = 'Не выбрана настройка отчета.'")); + Возврат Неопределено; КонецЕсли; ОписаниеДоступныхТипов = СтрокаНастроек.Тип; - КонецЕсли; - // Проверка на содержание типа получателей. - Если Не ОписаниеДоступныхТипов.СодержитТип(ОсновнойТипПолучателей) Тогда - ТекстПредупреждения = НСтр("ru = 'Тип ""%1"" не подходит по типу к выбранной настройке. - |Необходимо выбрать другой тип получателей или другую настройку.'"); - ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Строка(ОсновнойТипПолучателей)); - ПоказатьПредупреждение(, ТекстПредупреждения); - Возврат; - КонецЕсли; + Результат = Новый Структура; + Результат.Вставить("СКД", СКД); + Результат.Вставить("Инициатор", Инициатор); + Результат.Вставить("ОписаниеДоступныхТипов", ОписаниеДоступныхТипов); + Результат.Вставить("СтрокаНастроек", СтрокаНастроек); + Результат.Вставить("ЭтоЭлементОтбора", ЭтоЭлементОтбора); + Возврат Результат; - Инициатор.ЗакончитьРедактированиеСтроки(Ложь); - СтрокаНастроек.Использование = Истина; - Если СКД Тогда - Если ЭтоЭлементОтбора Тогда - Если СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке - Или СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии - Или СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - Или СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке - Или СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии - Или СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - КонецЕсли; - СтрокаНастроек.ПравоеЗначение = "[Получатель]"; - Иначе - СтрокаНастроек.Значение = "[Получатель]"; - КонецЕсли; - Иначе - СтрокаНастроек.Значение = "[Получатель]"; - КонецЕсли; - - РассылкаБылаПерсонализирована = Истина; - Элементы.Отчеты.ТекущиеДанные.ВнесеныИзменения = Истина; - Модифицированность = Истина; - -КонецПроцедуры +КонецФункции &НаКлиенте Функция ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, Коллекция) @@ -3461,41 +3509,17 @@ &НаКлиенте Процедура СобытияРассылки() - ПараметрыФормыЖурналаРегистрации = ПараметрыФормыЖурналаРегистрации(Объект.Ссылка); + ПараметрыФормыЖурналаРегистрации = ПараметрыЖурналаРегистрации(Объект.Ссылка); Если ПараметрыФормыЖурналаРегистрации = Неопределено Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Рассылка еще не выполнялась.'")); Возврат; КонецЕсли; ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормыЖурналаРегистрации, ЭтотОбъект); КонецПроцедуры &НаСервереБезКонтекста -Функция ПараметрыФормыЖурналаРегистрации(Рассылка) - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Состояния.ПоследнийЗапуск, - | Состояния.НомерСеанса - |ИЗ - | РегистрСведений.СостоянияРассылокОтчетов КАК Состояния - |ГДЕ - | Состояния.Рассылка = &Рассылка"; - Запрос.УстановитьПараметр("Рассылка", Рассылка); - - УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); - Если Не Выборка.Следующий() Тогда - Возврат Неопределено; - КонецЕсли; - Результат = Новый Структура; - Результат.Вставить("ДатаНачала", Выборка.ПоследнийЗапуск); - Если Не ЗначениеЗаполнено(Выборка.НомерСеанса) Тогда - Результат.Вставить("Данные", Рассылка); - Иначе - Сеансы = Новый СписокЗначений; - Сеансы.Добавить(Выборка.НомерСеанса); - Результат.Вставить("Сеанс", Сеансы); - КонецЕсли; - Возврат Результат; +Функция ПараметрыЖурналаРегистрации(Рассылка) + Возврат РассылкаОтчетов.ПараметрыЖурналаРегистрации(Рассылка); КонецФункции #КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl index 0da1664b8..76e3cb1be 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl @@ -16,7 +16,7 @@ Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание); Если Задание = Неопределено Тогда Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.РассылкаОтчетов); - Задание.ИмяПользователя = РассылкаОтчетов.ПолучитьИмяПользователяИБ(Автор); + Задание.ИмяПользователя = РассылкаОтчетов.ИмяПользователяИБ(Автор); Задание.Использование = Ложь; Задание.Наименование = ПредставлениеЗаданияПоРассылке(Наименование); Задание.Записать(); @@ -54,7 +54,6 @@ УстановитьПривилегированныйРежим(Истина); ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Ссылка); - УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры Процедура ПриКопировании(ОбъектКопирования) @@ -96,7 +95,7 @@ ЗаданиеИзменено = Истина; КонецЕсли; - ИмяПользователя = РассылкаОтчетов.ПолучитьИмяПользователяИБ(Автор); + ИмяПользователя = РассылкаОтчетов.ИмяПользователяИБ(Автор); Если Задание.ИмяПользователя <> ИмяПользователя Тогда Задание.ИмяПользователя = ИмяПользователя; ЗаданиеИзменено = Истина; @@ -119,7 +118,6 @@ Задание.Записать(); КонецЕсли; КонецЕсли; - УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl index 6ae7a6224..210d29241 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl @@ -24,6 +24,7 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере Процедура НастроитьОтображениеСпискаРолей() Если ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда @@ -92,7 +93,7 @@ Список.ТекстЗапроса = ТекстЗапроса; КонецПроцедуры - + &НаСервере Процедура УстановитьУсловноеОформление() diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl index 0a27bd3ec..c5a7a0c49 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl @@ -583,8 +583,8 @@ КонецЦикла; ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); Ошибка.Вставить("ОписаниеОшибки", НСтр("ru = 'При очистке сертификатов шифрования возникла ошибка:'") + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl index 3c7ed976a..bdad2e95e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl @@ -950,8 +950,8 @@ КонецЦикла; ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); Ошибка.Вставить("ОписаниеОшибки", НСтр("ru = 'При записи сертификатов шифрования возникла ошибка:'") + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo index fcc5542fa..57df3db45 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo @@ -441,7 +441,7 @@ Уточняет, что пароль к закрытому ключу сертификата будет вводиться в отдельном окне программой электронной подписи и шифрования, а не программой 1С:Предприятие. -Только для сертификатов, которые выпущены с усиленной защитой закрытого ключа. +Только для закрытых ключей сертификатов, для которых в ОС включена усиленная защита. diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form index bebd54b88..5100ea8bd 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form @@ -191,6 +191,39 @@ Normal + + КлассификаторУчастникЕАЭС + 84 + true + false + + true + + + Классификатор.УчастникЕАЭС + + + КлассификаторУчастникЕАЭСРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + КлассификаторУчастникЕАЭСКонтекстноеМеню + 85 + true + + CheckBoxField + Auto + true + Left + true + + КлассификаторНаименованиеПолное 24 @@ -994,6 +1027,23 @@ true + + УчастникЕАЭС + + <key>ru</key> + <value>Участник ЕАЭС</value> + + 6 + + Boolean + + + true + + + true + + ПоляКлассификатора diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl index d7ecd8707..a972deed0 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl @@ -18,7 +18,7 @@ ЗакрыватьПриВыборе = РежимВыбора; // Служебные реквизиты - ПоляКлассификатора = "Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"; + ПоляКлассификатора = "Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС"; Мета = Метаданные.Справочники.СтраныМира; ПредставлениеОбъектаКлассификатора = Мета.РасширенноеПредставлениеОбъекта; diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form index 368408670..751c6b7a1 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form @@ -198,6 +198,39 @@ true + + УчастникЕАЭС + 57 + true + false + + true + + + Список.УчастникЕАЭС + + + УчастникЕАЭСРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + УчастникЕАЭСКонтекстноеМеню + 58 + true + + CheckBoxField + Enter + true + Left + true + + НаименованиеПолное 12 @@ -305,6 +338,37 @@ Создать 47 + + СписокСоздать + 55 + + <key>ru</key> + <value>Добавить вручную</value> + + true + true + + true + + + СписокСоздатьРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + СписокВыбратьИзКлассификатора 53 @@ -331,36 +395,6 @@ UserCmds Auto - - СписокСоздать - 55 - - <key>ru</key> - <value>Новую...</value> - - true - true - - true - - - СписокСоздатьРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - true true @@ -380,11 +414,7 @@ Left - Popup - - Auto - Normal - + СписокКоманды @@ -752,7 +782,7 @@ ВыбратьИзКлассификатора <key>ru</key> - <value>Из классификатора...</value> + <value>Добавить из классификатора...</value> 1 @@ -763,7 +793,7 @@ true - StdPicture.ChooseValue + StdPicture.CreateListItem diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form index 04a62f81c..c49115007 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form @@ -269,6 +269,44 @@ Auto + + УчастникЕАЭС + 20 + true + true + + true + + + Объект.УчастникЕАЭС + + + ru + Страна является участником Евразийского экономического союза. + + Button + + УчастникЕАЭСРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + УчастникЕАЭСКонтекстноеМеню + 21 + true + + CheckBoxField + Enter + true + Left + true + + Форма_КоманднаяПанель -1 diff --git a/SSL/src/Catalogs/СтраныМира/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Help/ru.html index c19ed28e0..87249ce9f 100644 --- a/SSL/src/Catalogs/СтраныМира/Help/ru.html +++ b/SSL/src/Catalogs/СтраныМира/Help/ru.html @@ -9,18 +9,20 @@ SUP { }

      Предназначен для хранения информации о странах мира, таможенных союзах стран, либо регионах или частях стран. Данные справочника используются, например, при указании страны адреса контактной информации, страны происхождения товара.

      -

      Открывается по команде Страны мира раздела Справочники. В списке можно хранить только несколько необходимых для работы стран.

      +

      Открывается по команде Страны мира раздела Справочники. В списке можно хранить только несколько необходимых для работы стран.

      Может быть заполнен как вручную, так и по данным общероссийского классификатора стран мира (ОКСМ). Классификатор стран мира открывается по соответствующей команде меню Еще.

      В списке выводится информация:

      • Поля Наименование и Полное наименование предназначены для хранения соответственно краткого и полного официального наименования страны мира. Для представления страны, в том числе и при печати, будет использовано по умолчанию краткое наименование. Отсутствие в позиции списка полного наименования страны мира означает его совпадение с кратким наименованием.
      • Поле Код содержит трёхзначный цифровой код страны мира, позволяющий однозначно идентифицировать страну согласно ОКСМ. Для стран, таможенных союзов и прочих данных, не относящихся к классификатору стран (например, Евросоюз), в это поле рекомендуется вводить "--".
      • -
        Поля Код Альфа-2 и Код Альфа-3 содержат двухзначный (альфа-2) и трёхзначный (альфа-3) коды для идентификации государств и зависимых территорий, основных административных образований внутри государств, согласно ГОСТ 7.67 и ISO 3166.

      Для удобства работы со списком можно добавлять страны в список из классификатора по мере необходимости. В случае необходимости в списке можно отредактировать страну, если данные о ней изменились, и классификатор еще не обновляется.

      +
      Поля Код Альфа-2 и Код Альфа-3 содержат двухзначный (альфа-2) и трёхзначный (альфа-3) коды для идентификации государств и зависимых территорий, основных административных образований внутри государств, согласно ГОСТ 7.67 и ISO 3166
      +
    • +
      Участник ЕАЭС - если страна является участником ЕАЭС, то в соответствующей колонке проставляется флажок.

    Для удобства работы со списком можно добавлять страны в список из классификатора по мере необходимости. В случае необходимости в списке можно отредактировать страну, если данные о ней изменились, и классификатор еще не обновляется.

    Добавление страны из классификатора

    -
    • Нажмите Создать - Из классификатора.

    Ввод вручную

    +
    • Нажмите Добавить из классификатора.

    Ввод вручную

    В некоторых случаях необходимо ввести какую-нибудь область, или содружество стран, например, Евросоюз.

    • Не рекомендуется вводить вручную страны, имеющиеся в классификаторе, так как ручной ввод увеличивает возможность ошибок. -
    • Для того чтобы добавить новую страну в список стран, нажмите Создать - Новую. +
    • Для того чтобы добавить новую страну в список стран, выполните команду Еще - Добавить вручную.
    • Заполните необходимые поля. Вместо цифрового кода автоматически предлагается значение "--", так как это значение используется в печатных формах для стран, отсутствующих в классификаторе (см., например, Письмо Минфина России от 10.02.12 № 03-07-09/06).

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl index 95d3e3271..735b4edee 100644 --- a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -351,20 +351,15 @@ // Процедура ЗаполнитьСписокСтранКОбработке(Параметры) Экспорт - ПредыдущиеЗначенияОКСМ = Новый ТаблицаЗначений; - ПредыдущиеЗначенияОКСМ.Колонки.Добавить("Код", ОбщегоНазначения.ОписаниеТипаСтрока(3)); - ПредыдущиеЗначенияОКСМ.Колонки.Добавить("Наименование", ОбщегоНазначения.ОписаниеТипаСтрока(60)); - ПредыдущиеЗначенияОКСМ.Колонки.Добавить("КодАльфа2", ОбщегоНазначения.ОписаниеТипаСтрока(2)); - ПредыдущиеЗначенияОКСМ.Колонки.Добавить("КодАльфа3", ОбщегоНазначения.ОписаниеТипаСтрока(3)); - ПредыдущиеЗначенияОКСМ.Колонки.Добавить("НаименованиеПолное", ОбщегоНазначения.ОписаниеТипаСтрока(100)); + ЗначенияОКСМ = УправлениеКонтактнойИнформацией.СтраныУчастникиЕАЭС(); - НоваяСтрока = ПредыдущиеЗначенияОКСМ.Добавить(); + НоваяСтрока = ЗначенияОКСМ.Добавить(); НоваяСтрока.Код = "203"; НоваяСтрока.Наименование = НСтр("ru='ЧЕШСКАЯ РЕСПУБЛИКА'"); НоваяСтрока.КодАльфа2 = "CZ"; НоваяСтрока.КодАльфа3 = "CZE"; - НоваяСтрока = ПредыдущиеЗначенияОКСМ.Добавить(); + НоваяСтрока = ЗначенияОКСМ.Добавить(); НоваяСтрока.Код = "270"; НоваяСтрока.Наименование = НСтр("ru='ГАМБИЯ'"); НоваяСтрока.КодАльфа2 = "GM"; @@ -395,11 +390,11 @@ | И (СтраныМира.КодАльфа3 = СписокСтран.КодАльфа3) | И (СтраныМира.НаименованиеПолное = СписокСтран.НаименованиеПолное)"; - Запрос.УстановитьПараметр("СписокСтран", ПредыдущиеЗначенияОКСМ); + Запрос.УстановитьПараметр("СписокСтран", ЗначенияОКСМ); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + СтраныКОбработке = РезультатЗапроса.ВыгрузитьКолонку("Ссылка"); - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, - РезультатЗапроса.ВыгрузитьКолонку("Ссылка")); + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, СтраныКОбработке); КонецПроцедуры diff --git a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl index 2117c3506..3c1fc2ca4 100644 --- a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl @@ -22,7 +22,7 @@ КонецПроцедуры -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ДанныеЗаполнения<>Неопределено Тогда ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения); КонецЕсли; @@ -67,6 +67,7 @@ | НаименованиеПолное КАК НаименованиеПолное, | КодАльфа2 КАК КодАльфа2, | КодАльфа3 КАК КодАльфа3, + | УчастникЕАЭС КАК УчастникЕАЭС, | Ссылка КАК Ссылка |ИЗ | Справочник.СтраныМира diff --git a/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt b/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt index 2e11ff3af..1f727cc0e 100644 --- a/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt +++ b/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt @@ -54,14 +54,20 @@ - + + + УчастникЕАЭС + + xs:boolean + + Неактуальный xs:boolean - + Код @@ -161,6 +167,7 @@ ARM 051 Республика Армения + TRUE АРУБА @@ -208,6 +215,7 @@ BLR 112 Республика Беларусь + TRUE БЕЛИЗ @@ -631,6 +639,7 @@ KAZ 398 Республика Казахстан + TRUE КАМБОДЖА @@ -679,6 +688,7 @@ KGZ 417 Киргизская Республика + TRUE КИРИБАТИ @@ -1221,6 +1231,7 @@ RUS 643 Российская Федерация + TRUE РУАНДА diff --git a/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo b/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo index 0d98736f5..4c9cf3c0c 100644 --- a/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo +++ b/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo @@ -214,6 +214,25 @@ Use Use + + УчастникЕАЭС + + ru + Участник ЕАЭС + + + Boolean + + + ru + Страна является участником Евразийского экономического союза. + + + + + Use + Use + ФормаЭлемента diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form index 3ba903117..c7dc6f6b6 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form @@ -807,6 +807,38 @@
    true
    ВЫБРАТЬ + СценарииОбменовДаннымиНастройкиОбмена.Ссылка КАК Ссылка, + СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание КАК ИспользоватьРегламентноеЗадание, + СценарииОбменовДаннымиНастройкиОбмена.Ссылка.Наименование КАК Наименование, + МАКСИМУМ(ВЫБОР + КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ) КАК ФлагИспользования, + МАКСИМУМ(ВЫБОР + КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы + И СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ) КАК ФлагИспользованияЗагрузки, + МАКСИМУМ(ВЫБОР + КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы + И СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ) КАК ФлагИспользованияВыгрузки +ПОМЕСТИТЬ ВложенныйЗапрос +ИЗ + Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена +ГДЕ + НЕ СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ПометкаУдаления + +СГРУППИРОВАТЬ ПО + СценарииОбменовДаннымиНастройкиОбмена.Ссылка, + СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание, + СценарииОбменовДаннымиНастройкиОбмена.Ссылка.Наименование +; +ВЫБРАТЬ СценарииОбменовДанными.Ссылка, СценарииОбменовДанными.ИспользоватьРегламентноеЗадание, СценарииОбменовДанными.Наименование, @@ -816,37 +848,8 @@ СценарииОбменовДанными.Комментарий ИЗ Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными - ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - СценарииОбменовДаннымиНастройкиОбмена.Ссылка КАК Ссылка, - СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание КАК ИспользоватьРегламентноеЗадание, - СценарииОбменовДаннымиНастройкиОбмена.Ссылка.Наименование КАК Наименование, - МАКСИМУМ(ВЫБОР - КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ) КАК ФлагИспользования, - МАКСИМУМ(ВЫБОР - КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - И СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ) КАК ФлагИспользованияЗагрузки, - МАКСИМУМ(ВЫБОР - КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - И СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ) КАК ФлагИспользованияВыгрузки - ИЗ - Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена - ГДЕ - НЕ СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ПометкаУдаления - - СГРУППИРОВАТЬ ПО - СценарииОбменовДаннымиНастройкиОбмена.Ссылка, - СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание, - СценарииОбменовДаннымиНастройкиОбмена.Ссылка.Наименование) КАК ВложенныйЗапрос - ПО (ВложенныйЗапрос.Ссылка = СценарииОбменовДанными.Ссылка) + ЛЕВОЕ СОЕДИНЕНИЕ ВложенныйЗапрос КАК ВложенныйЗапрос + ПО ВложенныйЗапрос.Ссылка = СценарииОбменовДанными.Ссылка ГДЕ НЕ СценарииОбменовДанными.ПометкаУдаления diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl index 4e4a0aeef..f4a39ab6f 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl @@ -132,7 +132,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.ТомаХраненияФайлов.ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ДополнительныеПараметры.Том); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); Объект = ДополнительныеПараметры.Том.ПолучитьОбъект(); @@ -140,12 +139,11 @@ Объект.Записать(); РазблокироватьДанныеДляРедактирования( - ДополнительныеПараметры.Том, ДополнительныеПараметры.ИдентификаторФормы); + ДополнительныеПараметры.Том, ДополнительныеПараметры.ИдентификаторФормы); ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецПроцедуры diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form index c67ca9038..82926377c 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form @@ -811,6 +811,7 @@ ПроверитьЦелостностьТома + true DontUse Auto diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl index 4f80f7e5a..69e01019d 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl @@ -167,11 +167,14 @@ Возврат; КонецЕсли; - ПараметрыОтчета = Новый Структура(); - ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); - ПараметрыОтчета.Вставить("Отбор", Новый Структура("Том", Объект.Ссылка)); - - ОткрытьФорму("Отчет.ПроверкаЦелостностиТома.ФормаОбъекта", ПараметрыОтчета); + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда + ТекстВопроса = НСтр("ru = 'Для выполнения проверки целостности требуется записать сведения о томе. + |Записать?'"); + Оповещение = Новый ОписаниеОповещения("ТребуетсяЗаписатьФормуДляПроверкиЦелостностиТома", ЭтотОбъект); + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Иначе + ВыполнитьПроверкуЦелостностиТома(); + КонецЕсли; КонецПроцедуры @@ -185,6 +188,27 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ТребуетсяЗаписатьФормуДляПроверкиЦелостностиТома(Записать, ДополнительныеПараметры) Экспорт + + Если Записать = КодВозвратаДиалога.Да Тогда + ЗаписатьНаСервере(); + ВыполнитьПроверкуЦелостностиТома(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПроверкуЦелостностиТома() + + ПараметрыОтчета = Новый Структура(); + ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); + ПараметрыОтчета.Вставить("Отбор", Новый Структура("Том", Объект.Ссылка)); + + ОткрытьФорму("Отчет.ПроверкаЦелостностиТома.ФормаОбъекта", ПараметрыОтчета); + +КонецПроцедуры + &НаКлиенте Процедура ЗаписатьИЗакрытьОповещение(Результат, Контекст) Экспорт @@ -269,4 +293,9 @@ КонецПроцедуры +&НаСервере +Процедура ЗаписатьНаСервере() + Записать(); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html index f6d5b891f..067f44d2b 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html @@ -16,10 +16,9 @@
  • Созданный том нельзя удалить до тех пор, пока на него ссылаются какие-либо версии файлов.
  • Ошибки доступа к томам помещаются в журнал регистрации и могут быть просмотрены администратором программы.
  • В каждом томе файлы хранятся в подкаталогах по дате так, что на каждый день создается свой подкаталог. Все файлы в томах хранятся с оригинальным именем и расширением, между которыми добавляется номер версии, например "Приказ.1.txt". -
  • После переключения режима хранения файлов (например, в значение В томах на диске) все ранее накопленные файлы не перемещаются в тома - только вновь добавленные файлы будут размещаться в соответствии с настройкой. Для того чтобы перенести ранее накопленные файлы из информационной базы в тома, воспользуйтесь командой Перенос файлов в тома панели действий в разделе Органайзер. +
  • После переключения режима хранения файлов (например, в значение В томах на диске) все ранее накопленные файлы не перемещаются в тома - только вновь добавленные файлы будут размещаться в соответствии с настройкой. Для того чтобы перенести ранее накопленные файлы из информационной базы в тома, воспользуйтесь командой Перенос файлов в тома.
  • Если используется синхронизация данных между программой-источником и программой-приемником и при этом в программе-источнике используется хранение файлов в томах на дисках, то в процессе создания начального образа необходимо будет создать архивный файл с томами хранимых файлов. -
  • В процессе получения начального образа в программу-приемник необходимо будет указать и расположение архивного файла с томами хранимых файлов. Для получения файлов в томах из архива выполните команду Разместить файлы начального образа панели действий раздела Органайзер.
  • - +
  • В процессе получения начального образа в программу-приемник необходимо будет указать и расположение архивного файла с томами хранимых файлов. Для получения файлов в томах из архива выполните команду Разместить файлы начального образа.
  • Примечание
    Для использования томов, расположенных на сетевых дисках, сервер 1С:Предприятия 8 нужно запускать от лица доменного пользователя вида domain1\user1, имеющего права доступа к тому, указанному в виде UNC пути. Этот пользователь должен входить в группу Users локального компьютера,  иметь права "Run as service" и "Run as batch job" и права на каталоги, в которых сервер 1С:Предприятия 8 хранит служебные файлы - журнал регистрации, каталог временных файлов и пр.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl index d629f5c5d..758f759bb 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl @@ -2,9 +2,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Ключ.Пустая() Тогда - Объект.Код = Строка(Новый УникальныйИдентификатор()); - КонецЕсли; Если ЗначениеЗаполнено(Объект.АвторФайлов) Тогда ВКачествеАвтораФайлов = "Пользователь"; @@ -30,7 +27,13 @@ Элементы.ВКачествеАвтораФайлов.СписокВыбора[0].Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ВКачествеАвтораФайлов.Заголовок, "(" + Объект.Наименование + ")"); КонецЕсли; - + + // Обработчик подсистемы запрета редактирования реквизитов объектов + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда + МодульЗапретРедактированияРеквизитовОбъектов = ОбщегоНазначения.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектов"); + МодульЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -104,6 +107,14 @@ КонецПроцедуры +&НаКлиенте +Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда) + + МодульЗапретРедактированияРеквизитовОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); + МодульЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/ManagerModule.bsl new file mode 100644 index 000000000..d8309122d --- /dev/null +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/ManagerModule.bsl @@ -0,0 +1,27 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов + +// См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. +Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт + + Результат = Новый Массив; + + Результат.Добавить("Сервис; СервисПредставление"); + Результат.Добавить("КорневаяПапка"); + + Возврат Результат; + +КонецФункции + +// Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index cd629d7a1..394fa45a7 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -3,6 +3,9 @@ &НаКлиенте Перем РазрешенияПолучены; +&НаКлиенте +Перем ПроверкаЗаполненияПараметрыЗаписи; + #КонецОбласти #Область ОбработчикиСобытийФормы @@ -103,13 +106,18 @@ Объект.ПериодХраненияСообщенийНаСервере = 0; КонецЕсли; + Если Не ПроверкаЗаполненияВыполнена(ПараметрыЗаписи) Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + Если РазрешенияПолучены <> Истина Тогда - Если Не ПроверитьЗаполнение() Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - Запрос = СоздатьЗапросНаИспользованиеВнешнихРесурсов(); + ДанныеОбъекта = Новый Структура("Ссылка,ИспользоватьДляОтправки,СерверИсходящейПочты,ПортСервераИсходящейПочты,ИспользоватьДляПолучения, + |ПротоколВходящейПочты,СерверВходящейПочты,ПортСервераВходящейПочты"); + ЗаполнитьЗначенияСвойств(ДанныеОбъекта, Объект); + + Запрос = СоздатьЗапросНаИспользованиеВнешнихРесурсов(ДанныеОбъекта); ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПолучениеРазрешенийЗавершение", ЭтотОбъект, ПараметрыЗаписи); Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда @@ -307,17 +315,17 @@ КонецПроцедуры -&НаСервере -Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов() +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект) МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); Возврат МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( - Разрешения(), Объект.Ссылка); + Разрешения(Объект), Объект.Ссылка); КонецФункции -&НаСервере -Функция Разрешения() +&НаСервереБезКонтекста +Функция Разрешения(Объект) Результат = Новый Массив; @@ -367,4 +375,24 @@ Оповестить("ПриИзмененииВидаУчетнойЗаписиЭлектроннойПочты", ВидУчетнойЗаписи = "Персональная", ЭтотОбъект); КонецПроцедуры +&НаКлиенте +Функция ПроверкаЗаполненияВыполнена(ПараметрыЗаписи) + Если ПараметрыЗаписи.Свойство("ПроверкаЗаполненияВыполнена") Тогда + Возврат Истина; + КонецЕсли; + + ПроверкаЗаполненияПараметрыЗаписи = ПараметрыЗаписи; + ПодключитьОбработчикОжидания("ПроверитьЗаполнениеИЗаписать", 0.1, Истина); + + Возврат Ложь; +КонецФункции + +&НаКлиенте +Процедура ПроверитьЗаполнениеИЗаписать() + Если ПроверитьЗаполнение() Тогда + ПроверкаЗаполненияПараметрыЗаписи.Вставить("ПроверкаЗаполненияВыполнена"); + Записать(ПроверкаЗаполненияПараметрыЗаписи); + КонецЕсли; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html index 64baf9ed3..886e78949 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html @@ -7,7 +7,7 @@
  • Адрес электронной почты учетной записи в формате name@server.net. 
  • Для учетных записей, получение и отправка с которых выполняется автоматически без участия пользователя, должен быть обязательно введен пароль. Также для корректной работы программы обязательно должна быть настроена системная учетная запись электронной почты.

    Системная учетная запись электронной почты

    • Программа поставляется с предопределенной учетной записью - системной учетной записью электронной почты. Она используется по умолчанию для рассылки различных уведомлений из программы, например, для автоматической отправки сообщений администратору по завершению обновления программы. Перед использованием этих возможностей необходимо настроить системную учетную запись. -
    • Настройка системной учетной записи производится по соответствующей команде в разделе Настройка и администрирование - Органайзер. Также можно Изменить ее в списке.

    Ввод учетной записи электронной почты

    +
  • Настройка системной учетной записи производится по соответствующей команде в разделе Администрирование - Органайзер. Также можно Изменить ее в списке.
  • Ввод учетной записи электронной почты

    • При попытке сохранения программа проверяет введенные учетные записи электронной почты (пытается отослать пробное сообщение). Учетные записи, не прошедшие проверку, не сохраняются.
    • Нажмите Создать, введите необходимые поля:
      • Укажите Адрес электронной почты учетной записи в формате name@server.net; diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl index 8b6258c97..916c99ed3 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl @@ -2,7 +2,7 @@ #Область ОбработчикиСобытий -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) ЗаполнитьОбъектЗначениямиПоУмолчанию(); diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form index e2aa38131..286ec7612 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form @@ -153,6 +153,61 @@ Normal + + ФормаИмпортФайлов + 347 + true + true + + true + + false + + ФормаИмпортФайловРасширеннаяПодсказка + 348 + Label + true + true + + Left + + + Form.Command.ИмпортФайлов + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаИмпортПапки + 377 + true + true + + true + + + ФормаИмпортПапкиРасширеннаяПодсказка + 378 + Label + true + true + + Left + + + Form.Command.ИмпортПапки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ФормаСоздатьПапку 86 @@ -926,17 +981,16 @@ InAdditionalSubmenu - ФормаИмпортФайлов - 347 + Сравнить + 428 true true true - false - ФормаИмпортФайловРасширеннаяПодсказка - 348 + СравнитьРасширеннаяПодсказка + 429 Label true true @@ -944,34 +998,7 @@ Left - Form.Command.ИмпортФайлов - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаИмпортПапки - 377 - true - true - - true - - - ФормаИмпортПапкиРасширеннаяПодсказка - 378 - Label - true - true - - Left - - - Form.Command.ИмпортПапки + Form.Command.Сравнить Normal Auto true @@ -2092,10 +2119,10 @@ 396 ГруппаПояснениеОблачногоСервиса - 401 + 414 ДекорацияКартинкаОблачногоСервиса - 408 + 416 <key>ru</key> <value>Декорация картинка облачного сервиса</value> @@ -2107,7 +2134,7 @@ </userVisible> <extendedTooltip> <name>ДекорацияКартинкаОблачногоСервисаРасширеннаяПодсказка</name> - <id>410</id> + <id>418</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2117,10 +2144,9 @@ </extendedTooltip> <contextMenu> <name>ДекорацияКартинкаОблачногоСервисаКонтекстноеМеню</name> - <id>409</id> + <id>417</id> <autoFill>true</autoFill> </contextMenu> - <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <extInfo xsi:type="form:PictureDecorationExtInfo"> <picture xsi:type="core:PictureRef"> @@ -2130,19 +2156,21 @@ </items> <items xsi:type="form:Decoration"> <name>ДекорацияПояснение</name> - <id>398</id> + <id>419</id> <title> <key>ru</key> - <value>Работа с файлами этой папки ведется в облачном сервисе <link 1>%1</></value> + <value>Работа с файлами этой папки ведется в облачном сервисе <link 1>%</>1. +</value> true true true + Button ДекорацияПояснениеРасширеннаяПодсказка - 400 + 421 Label true true @@ -2152,17 +2180,95 @@ ДекорацияПояснениеКонтекстноеМеню - 399 + 420 true true Label true - Center Left + + ДекорацияКартинкаОшибкаСинхронизации + 422 + + <key>ru</key> + <value>Неудачная синхронизация файлов</value> + + true + true + + true + + + ДекорацияКартинкаОшибкаСинхронизацииРасширеннаяПодсказка + 424 + Label + true + true + + Left + + + + ДекорацияКартинкаОшибкаСинхронизацииКонтекстноеМеню + 423 + true + + true + true + + + CommonPicture.Предупреждение + + + + + ДекорацияДатаСинхронизации + 425 + + <key>ru</key> + <value>Синхронизировано: %2 </value> + + true + true + + true + + + ru + Последняя синхронизация файлов не удалась из-за возможных проблем с облачным сервисом, подключением к интернету или других проблем. Подробнее см. Журнал регистрации. + + Button + + ДекорацияДатаСинхронизацииРасширеннаяПодсказка + 427 + Label + true + true + + Left + + + + ДекорацияДатаСинхронизацииКонтекстноеМеню + 426 + true + + true + Label + true + true + + + URLProcessing + ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки + + Left + + true true @@ -2174,7 +2280,7 @@ ГруппаПояснениеОблачногоСервисаРасширеннаяПодсказка - 402 + 415 Label true true @@ -2184,6 +2290,7 @@ UsualGroup + Center Auto true true @@ -2213,6 +2320,7 @@ ListSettings OutputList Refresh + None СписокНомерКартинкиПодписанЗашифрован 117 @@ -2740,78 +2848,6 @@ Normal - - СписокТекущаяВерсияАвтор - 287 - true - true - - - Список.ТекущаяВерсияАвтор - - - СписокТекущаяВерсияАвторРасширеннаяПодсказка - 289 - Label - true - true - - Left - - - - СписокТекущаяВерсияАвторКонтекстноеМеню - 288 - true - - LabelField - true - Enter - true - Left - true - - true - true - - - - СписокТекущаяВерсияДатаСоздания - 290 - true - true - - - Список.ТекущаяВерсияДатаСоздания - - - СписокТекущаяВерсияДатаСозданияРасширеннаяПодсказка - 292 - Label - true - true - - Left - - - - СписокТекущаяВерсияДатаСозданияКонтекстноеМеню - 291 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - СписокСсылка 115 @@ -2879,10 +2915,6 @@ BeforeRowChange СписокПередНачаломИзменения - - OnChange - СписокПриИзменении - СписокСтрокаПоиска 368 @@ -2958,7 +2990,6 @@ СписокExtendedTooltip 208 Label - true true Left @@ -3746,7 +3777,6 @@ Tree true true - 55 true true 6 @@ -3778,6 +3808,7 @@ 0001-01-01T00:00:00 0001-01-01T00:00:00 + true true ГруппаПользовательскихНастроек @@ -3792,6 +3823,7 @@ ru Файлы + 55 ГруппаФайлыИПоискРасширеннаяПодсказка 397 @@ -3868,7 +3900,6 @@ ru Папки и файлы - 8 ГруппаПапкиИФайлыРасширеннаяПодсказка 175 @@ -4083,6 +4114,9 @@ true + + Папки.ДатаСинхронизации + Папки.Description @@ -4098,6 +4132,12 @@ Папки.ПапкаСинхронизируется + + Папки.Синхронизирован + + + Папки.УчетнаяЗапись + Папки.УчетнаяЗаписьDescription @@ -4130,7 +4170,10 @@ КОНЕЦ КАК ПапкаСинхронизируется, СтатусыСинхронизацииФайловСОблачнымСервисом.Href, СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Наименование, - СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Сервис + СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Сервис, + СтатусыСинхронизацииФайловСОблачнымСервисом.ДатаСинхронизацииНачало, + СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись КАК УчетнаяЗапись, + СтатусыСинхронизацииФайловСОблачнымСервисом.Синхронизирован ИЗ Справочник.ПапкиФайлов КАК ПапкиФайлов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом @@ -5030,11 +5073,15 @@ true + + CommonPicture.ОтправитьЭлектронноеПисьмо + Отправить + TextPicture DontUse Auto @@ -5052,11 +5099,15 @@ true + + StdPicture.Print + Печать + TextPicture DontUse Auto @@ -5105,6 +5156,28 @@ DontUse Auto + + Сравнить + + <key>ru</key> + <value>Сравнить файлы...</value> + + 2 + + ru + Сравнить файлы + + + true + + + + Сравнить + + + DontUse + Auto + diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html index dd5a7950b..275ccdad7 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html @@ -1,6 +1,5 @@

        В программе существует возможность хранить файлы в информационной базе без привязки к конкретному объекту. Список предназначен для управления этими файлами.

        -

        Открывается по команде Файлы в разделе Органайзер. 

        Работа со списком организована аналогично работе в Проводнике Windows.

        Левая часть списка содержит иерархическую структуру папок. В списке имеются предопределенные папки, которые нельзя удалить, например, папка Шаблоны файлов.

        В правой части располагается список файлов в выбранной папке. С помощью соответствующих команд в список можно добавлять новые файлы и папки, копировать, изменять или удалять их.

        diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl index 88a4c98e8..6401ee0fa 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl @@ -78,15 +78,9 @@ Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Ложь; ИспользоватьСинхронизациюФайлов = ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); - - Если Не МодульУправлениеДоступом.ЕстьРоль("НастройкаСинхронизацииФайлов") Тогда - Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Видимость = Ложь; - КонецЕсли; - - КонецЕсли; + Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Видимость = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов); + Элементы.Сравнить.Видимость = Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() + И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); ДатаУниверсальная = ТекущаяДатаСеанса(); Список.Параметры.УстановитьЗначениеПараметра("СекундДоМестногоВремени", @@ -99,11 +93,6 @@ Элементы.ФормаСоздатьСоСканера.Видимость = РаботаСФайламиСлужебныйКлиент.ДоступнаКомандаСканировать(); - #Если ВебКлиент Тогда - Элементы.Печать.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюПечать.Видимость = Ложь; - #КонецЕсли - УстановитьДоступностьФайловыхКоманд(); КонецПроцедуры @@ -123,47 +112,34 @@ &НаСервере Процедура ПриЗакрытииНаСервере() - КоличествоЗанятыхФайлов = РаботаСФайламиСлужебныйВызовСервера.ПолучитьКоличествоЗанятыхФайлов(, - ПользователиКлиентСервер.АвторизованныйПользователь()); + КоличествоЗанятыхФайлов = РаботаСФайламиСлужебный.КоличествоЗанятыхФайлов(); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ИмпортФайловЗавершен" Тогда - Элементы.Список.Обновить(); + Если ВРег(ИмяСобытия) = ВРег("Запись_НаборКонстант") + И (ВРег(Источник) = ВРег("ИспользоватьЭлектронныеПодписи") + Или ВРег(Источник) = ВРег("ИспользоватьШифрование")) Тогда - Если Параметр <> Неопределено Тогда - Элементы.Список.ТекущаяСтрока = Параметр; - КонецЕсли; - КонецЕсли; - - Если ИмяСобытия = "ИмпортКаталоговЗавершен" Тогда + ПодключитьОбработчикОжидания("ПриИзмененияИспользованияПодписанияИлиШифрования", 0.3, Истина); + Возврат; + ИначеЕсли ИмяСобытия = "Запись_ПапкиФайлов" Тогда Элементы.Папки.Обновить(); Элементы.Список.Обновить(); Если Источник <> Неопределено Тогда Элементы.Папки.ТекущаяСтрока = Источник; КонецЕсли; + ИначеЕсли ИмяСобытия = "Запись_Файл" Тогда + Элементы.Список.Обновить(); + Если ТипЗнч(Параметр) = Тип("Структура") И Параметр.Свойство("Файл") Тогда + Элементы.Список.ТекущаяСтрока = Параметр.Файл; + ИначеЕсли Источник <> Неопределено Тогда + Элементы.Список.ТекущаяСтрока = Источник; + КонецЕсли; КонецЕсли; - - Если ВРег(ИмяСобытия) = ВРег("Запись_НаборКонстант") - И (ВРег(Источник) = ВРег("ИспользоватьЭлектронныеПодписи") - Или ВРег(Источник) = ВРег("ИспользоватьШифрование")) Тогда - - ПодключитьОбработчикОжидания("ПриИзмененияИспользованияПодписанияИлиШифрования", 0.3, Истина); - КонецЕсли; - - Если ИмяСобытия <> "Запись_Файл" Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(Параметр) = Тип("Структура") И Параметр.Свойство("Файл") Тогда - Элементы.Список.ТекущаяСтрока = Параметр.Файл; - КонецЕсли; - - Элементы.Список.Обновить(); УстановитьДоступностьФайловыхКоманд(); @@ -200,16 +176,26 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура СписокПриИзменении(Элемент) - Если Элемент.ВыделенныеСтроки.Количество() > 0 Тогда - Оповестить("Запись_Файл", - Новый Структура("Событие", "ДанныеФайлаИзменены"), Элемент.ВыделенныеСтроки); +Процедура ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + Если НавигационнаяСсылкаФорматированнойСтроки = "OpenJournal" Тогда + + СтандартнаяОбработка = Ложь; + ПараметрыОтбора = ДанныеОтбораЖурналаРегистрации(Элементы.Папки.ТекущиеДанные.УчетнаяЗапись); + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ПараметрыОтбора, ЭтотОбъект); + КонецЕсли; + КонецПроцедуры +#КонецОбласти + + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Если ТипЗнч(ВыбраннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда @@ -264,7 +250,13 @@ &НаКлиенте Процедура СписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + СтандартнаяОбработка = Ложь; + Если ФайлыРедактируютсяВОблачномСервисе Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + ПараметрыПеретаскивания.Значение = Неопределено; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -456,17 +448,10 @@ ПараметрыФормы.Вставить("Редактирует", ДанныеСтроки.Редактирует); ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаЗавершениеРедактирования", ПараметрыФормы, ЭтотОбъект); - ИначеЕсли МассивФайлов.Количество() = 1 Тогда - ПараметрыОбновленияФайлов = Новый Структура; - ПараметрыОбновленияФайлов.Вставить("МассивФайлов", МассивФайлов); - ПараметрыОбновленияФайлов.Вставить("ВозможностьСоздаватьВерсииФайлов", Истина); - ПараметрыОбновленияФайлов.Вставить("ХранитьВерсии", ДанныеСтроки.ХранитьВерсии); - ПараметрыОбновленияФайлов.Вставить("СоздатьНовуюВерсию", Ложь); - ПараметрыОбновленияФайлов.Вставить("ФайлРедактируетТекущийПользователь", Истина); - ПараметрыОбновленияФайлов.Вставить("ОбработчикРезультата", Неопределено); - ПараметрыОбновленияФайлов.Вставить("ИдентификаторФормы", УникальныйИдентификатор); - ПараметрыОбновленияФайлов.Вставить("Редактирует", ДанныеСтроки.Редактирует); - РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеПоСсылкамСОповещением(ПараметрыОбновленияФайлов); + ИначеЕсли МассивФайлов.Количество() = 1 Тогда + Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект); + ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, ДанныеСтроки.Ссылка, УникальныйИдентификатор); + РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); КонецЕсли; КонецПроцедуры @@ -506,22 +491,7 @@ Возврат; КонецЕсли; - МассивФайлов = Новый Массив; - Для Каждого ЭлементСписка Из Элементы.Список.ВыделенныеСтроки Цикл - ДанныеСтроки = Элементы.Список.ДанныеСтроки(ЭлементСписка); - Если Не РаботаСФайламиСлужебныйКлиент.ВозможностьОсвободитьФайл( - ДанныеСтроки.Ссылка, - ДанныеСтроки.ФайлРедактируетТекущийПользователь, - ДанныеСтроки.Редактирует) Тогда - Продолжить; - КонецЕсли; - МассивФайлов.Добавить(ДанныеСтроки.Ссылка); - КонецЦикла; - - ОсвободитьФайлы(МассивФайлов); - Для Каждого ПрисоединенныйФайл Из МассивФайлов Цикл - ОповеститьОбИзменении(ПрисоединенныйФайл); - КонецЦикла; + РаботаСФайламиСлужебныйКлиент.ОсвободитьФайлы(Элементы.Список); УстановитьДоступностьФайловыхКоманд(); КонецПроцедуры @@ -608,11 +578,9 @@ &НаКлиенте Процедура Подписать(Команда) - МассивФайлов = Новый Массив; - МассивФайлов.Добавить(Элементы.Список.ТекущаяСтрока); - - РаботаСФайламиСлужебныйКлиент.ПодписатьФайлы(МассивФайлов, УникальныйИдентификатор, - Новый ОписаниеОповещения("ПодписатьЗавершение", ЭтотОбъект)); + ОписаниеОповещения = Новый ОписаниеОповещения("ПодписатьЗавершение", ЭтотОбъект); + ДополнительныеПараметры = Новый Структура("ОбработкаРезультата", ОписаниеОповещения); + РаботаСФайламиКлиент.ПодписатьФайл(Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор, ДополнительныеПараметры); КонецПроцедуры @@ -760,6 +728,26 @@ КонецПроцедуры +&НаКлиенте +Процедура Сравнить(Команда) + ЧислоВыделенныхСтрок = Элементы.Список.ВыделенныеСтроки.Количество(); + + Если ЧислоВыделенныхСтрок = 2 ИЛИ ЧислоВыделенныхСтрок = 1 Тогда + Если ЧислоВыделенныхСтрок = 2 Тогда + Ссылка1 = Элементы.Список.ВыделенныеСтроки[0]; + Ссылка2 = Элементы.Список.ВыделенныеСтроки[1]; + ИначеЕсли ЧислоВыделенныхСтрок = 1 Тогда + Ссылка1 = Элементы.Список.ТекущиеДанные.Ссылка; + Ссылка2 = Элементы.Список.ТекущиеДанные.РодительскаяВерсия; + КонецЕсли; + + Расширение = НРег(Элементы.Список.ТекущиеДанные.Расширение); + + РаботаСФайламиСлужебныйКлиент.СравнитьФайлы(УникальныйИдентификатор, Ссылка1, Ссылка2, Расширение); + + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -829,15 +817,6 @@ КонецПроцедуры -&НаСервереБезКонтекста -Процедура ОсвободитьФайлы(Знач МассивФайлов) - - Для Каждого ПрисоединенныйФайл Из МассивФайлов Цикл - РаботаСФайламиСлужебный.ОсвободитьФайл(ПрисоединенныйФайл); - КонецЦикла; - -КонецПроцедуры - &НаКлиенте Процедура ПеретаскиваниеВПапку(ПапкаДляДобавления, ЗначениеПеретаскивания, Действие) Если ПапкаДляДобавления = Неопределено Тогда @@ -948,7 +927,15 @@ РодительСменен = РаботаСФайламиСлужебныйВызовСервера.СменитьРодителяПапок(ЗначениеПеретаскивания, ПапкаДляДобавления, НайденоЗацикливание); Если РодительСменен <> Истина Тогда Если НайденоЗацикливание = Истина Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Зацикливание уровней.'")); + Если ЗначениеПеретаскивания.Количество() = 1 Тогда + ТекстСообщения = НСтр("ru = 'Перемещение невозможно. + |Папка ""%1"" является дочерней для перемещаемой папки ""%2"".'"); + Иначе + ТекстСообщения = НСтр("ru = 'Перемещение невозможно. + |Папка ""%1"" является дочерней для одной из перемещаемых папок.'"); + КонецЕсли; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ПапкаДляДобавления, ЗначениеПеретаскивания[0]); + ПоказатьПредупреждение(, ТекстСообщения); КонецЕсли; Возврат; КонецЕсли; @@ -1008,7 +995,7 @@ ИмяРабочегоКаталога, ОбъектСсылка) Зашифровать = Истина; - РаботаСФайламиСлужебныйВызовСервера.ЗанестиИнформациюОШифровании( + РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании( ОбъектСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, @@ -1049,7 +1036,7 @@ МассивОтпечатков = Новый Массив; МассивФайловВРабочемКаталогеДляУдаления = Новый Массив; - РаботаСФайламиСлужебныйВызовСервера.ЗанестиИнформациюОШифровании( + РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании( ОбъектСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, @@ -1107,6 +1094,13 @@ Элементы.ФормаСоздатьСоСканера.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; Элементы.СписокКонтекстноеМенюСоздать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаСоздатьПапку.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаИмпортПапки.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаПеренестиВПапку.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаОсвободить.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; @@ -1138,7 +1132,7 @@ Если Элементы.Папки.ТекущаяСтрока = Неопределено Или Элементы.Папки.ТекущаяСтрока.Пустая() Тогда Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Ложь; - + Иначе Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется; @@ -1150,17 +1144,43 @@ Элементы.Папки.ТекущиеДанные.УчетнаяЗаписьСервис, Элементы.Папки.ТекущиеДанные.Href); ЧастиСтроки = Новый Массив; - ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами ведется в облачном сервисе'")); + ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами этой папки ведется в облачном сервисе'")); ЧастиСтроки.Добавить(" "); ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Элементы.Папки.ТекущиеДанные.УчетнаяЗаписьНаименование, , , , АдресПапкиВОблачномСервисе)); + ЧастиСтроки.Добавить(". "); Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + СведенияОСинхронизации = СведенияОСинхронизации(Элементы.Папки.ТекущиеДанные.Ссылка); + Если ЗначениеЗаполнено(СведенияОСинхронизации) Тогда + Элементы.ДекорацияКартинкаОшибкаСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; + Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки = ?(СведенияОСинхронизации.Синхронизирован, ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); + Элементы.ДекорацияДатаСинхронизации.Видимость = Истина; + + ЧастиСтроки.Очистить(); + ЧастиСтроки.Добавить(НСтр("ru = 'Синхронизировано'")); + ЧастиСтроки.Добавить(": "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD"),,,, "OpenJournal")); + Элементы.ДекорацияДатаСинхронизации.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Иначе + + Элементы.ДекорацияКартинкаОшибкаСинхронизации.Видимость = Ложь; + Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + Элементы.ДекорацияДатаСинхронизации.Видимость = Ложь; + КонецЕсли; + КонецЕсли; КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция СведенияОСинхронизации(ВладелецФайла) + + Возврат РаботаСФайламиСлужебный.СведенияОСинхронизации(ВладелецФайла); + +КонецФункции + &НаКлиенте Процедура ОбработкаОжиданияПапкиПриАктивизацииСтроки() @@ -1292,7 +1312,6 @@ Элементы.СписокКонтекстноеМенюПечать.Доступность = Ложь; Элементы.Отправить.Доступность = Ложь; - Элементы.СписокКонтекстноеМенюОтправить.Доступность = Ложь; КонецПроцедуры @@ -1307,8 +1326,8 @@ Элементы.ФормаСохранитьИзменения.Доступность = ИзменениеФайлов И РедактируетТекущийПользователь; Элементы.СписокКонтекстноеМенюСохранитьИзменения.Доступность = ИзменениеФайлов И РедактируетТекущийПользователь; - Элементы.ФормаОсвободить.Доступность = ИзменениеФайлов И ЗначениеЗаполнено(Редактирует); - Элементы.СписокКонтекстноеМенюОсвободить.Доступность = ИзменениеФайлов И ЗначениеЗаполнено(Редактирует); + Элементы.ФормаОсвободить.Доступность = ИзменениеФайлов И ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе;; + Элементы.СписокКонтекстноеМенюОсвободить.Доступность = ИзменениеФайлов И ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе;; Элементы.ФормаЗанять.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ ПодписанЭП; Элементы.СписокКонтекстноеМенюЗанять.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ ПодписанЭП; @@ -1316,8 +1335,8 @@ Элементы.ФормаРедактировать.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И НЕ РедактируетДругой; Элементы.СписокКонтекстноеМенюРедактировать.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И НЕ РедактируетДругой; - Элементы.ФормаПеренестиВПапку.Доступность = ИзменениеФайлов И НЕ ПодписанЭП; - Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = ИзменениеФайлов И НЕ ПодписанЭП; + Элементы.ФормаПеренестиВПапку.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе; Элементы.ФормаПодписать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует); Элементы.СписокКонтекстноеМенюПодписать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует); @@ -1352,6 +1371,8 @@ Элементы.Отправить.Доступность = Истина; Элементы.СписокКонтекстноеМенюОтправить.Доступность = Истина; + Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Ложь; + КонецПроцедуры &НаСервере @@ -1504,4 +1525,9 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция ДанныеОтбораЖурналаРегистрации(УчетнаяЗаписьСервис) + Возврат РаботаСФайламиСлужебный.ДанныеОтбораЖурналаРегистрации(УчетнаяЗаписьСервис); +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl index 8132846bd..4371d5e77 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl @@ -47,7 +47,7 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "Запись_Файл" И Параметр.Свойство("Событие") И Параметр.Событие = "СозданФайл" Тогда + Если ИмяСобытия = "Запись_Файл" И Параметр.Свойство("ЭтоНовый") И Параметр.ЭтоНовый Тогда Если Параметр <> Неопределено Тогда ВладелецФайла = Неопределено; diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl index 4c0fceac4..eb55ad223 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl @@ -19,14 +19,13 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - #Если ВебКлиент Тогда - ТекстПредупреждения = - НСтр("ru = 'В Веб-клиенте импорт файлов не поддерживается. - |Используйте команду ""Создать"" в списке файлов.'"); - ПоказатьПредупреждение(, ТекстПредупреждения); - Отказ = Истина; - Возврат; - #КонецЕсли +#Если ВебКлиент Тогда + ТекстПредупреждения = + НСтр("ru = 'В веб-клиенте импорт файлов недоступен. Используйте команду ""Добавить"" в списке файлов.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + Отказ = Истина; + Возврат; +#КонецЕсли ХранитьВерсии = Истина; ТолькоКаталоги = Истина; @@ -132,7 +131,9 @@ &НаКлиенте Процедура ДобавитьВыполнитьПослеИмпорта(Результат, ПараметрыВыполнения) Экспорт Закрыть(); - Оповестить("ИмпортКаталоговЗавершен", Новый Структура, Результат.ПапкаДляДобавленияТекущая); + Если Результат <> Неопределено Тогда + Оповестить("Запись_ПапкиФайлов", Новый Структура, Результат.ПапкаДляДобавленияТекущая); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -145,7 +146,7 @@ НовыйЭлемент.ИмяФайла = ФайлПеренесенный.Имя; НовыйЭлемент.Пометка = Истина; - Если ФайлПеренесенный.Расширение = "" Тогда + Если ФайлПеренесенный.ЭтоКаталог() Тогда НовыйЭлемент.ИндексКартинки = 2; // папка Иначе НовыйЭлемент.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(ФайлПеренесенный.Расширение); diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form index fc7e43088..1bd36ead8 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,185 @@ + + ГруппаПояснениеОблачногоСервиса + 223 + + ДекорацияКартинкаОблачногоСервиса + 225 + + <key>ru</key> + <value>Декорация картинка облачного сервиса</value> + + true + true + + true + + + ДекорацияКартинкаОблачногоСервисаРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + + ДекорацияКартинкаОблачногоСервисаКонтекстноеМеню + 226 + true + + true + true + + + CommonPicture.ПапкаОблачногоСервиса + + + + + ДекорацияПояснение + 228 + + <key>ru</key> + <value>Файл доступен только для просмотра, работа с ним ведется в облачном сервисе %1. </value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 230 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 229 + true + + true + Label + true + + Left + Center + + + + ДекорацияКартинкаСтатусСинхронизации + 231 + + <key>ru</key> + <value>Неудачная синхронизация файла</value> + + true + true + + true + + + ДекорацияКартинкаСтатусСинхронизацииРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + + ДекорацияКартинкаСтатусСинхронизацииКонтекстноеМеню + 232 + true + + true + true + + + CommonPicture.Предупреждение + + + + + ДекорацияДатаСинхронизации + 234 + + <key>ru</key> + <value>Синхронизирован: %2</value> + + true + true + + true + + + ДекорацияДатаСинхронизацииРасширеннаяПодсказка + 236 + Label + true + true + + Left + + + + ДекорацияДатаСинхронизацииКонтекстноеМеню + 235 + true + + true + Label + true + true + + + URLProcessing + ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Пояснение облачного сервиса</value> + + true + + ГруппаПояснениеОблачногоСервисаРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + UsualGroup + + Center + Auto + true + true + + Style.ToolTipBackColor + + Auto + Auto + + ГруппаОбщаяИнформация 29 @@ -94,6 +274,10 @@ true true Normal + + ru + Краткое пояснение. Для редактирования содержимого файла нажмите кнопку Редактировать. +
        true @@ -2168,6 +2352,32 @@ Auto InAdditionalSubmenu
        + + ФормаПеречитать + 221 + true + true + + true + + + ФормаПеречитатьРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + Form.StandardCommand.Reread + Normal + Auto + true + true + UserCmds + Auto + ПодменюПечать 213 @@ -2575,6 +2785,33 @@ Auto InAdditionalSubmenu + + ФормаЗанять + 237 + true + true + + true + + + ФормаЗанятьРасширеннаяПодсказка + 238 + Label + true + true + + Left + + + Form.Command.Занять + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ФормаОсвободить 16 @@ -2683,6 +2920,7 @@ Left + true NotificationProcessing @@ -2705,6 +2943,8 @@ ОбработкаПроверкиЗаполненияНаСервере Delete + SetDeletionMark + ShowInList Write WriteAndClose DontBlock @@ -3263,6 +3503,23 @@ true + + УчетнаяЗапись + + <key>ru</key> + <value>Учетная запись</value> + + 18 + + CatalogRef.УчетныеЗаписиСинхронизацииФайлов + + + true + + + true + + СтандартнаяЗаписатьИЗакрыть @@ -3830,11 +4087,15 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>CommonPicture.ОтправитьЭлектронноеПисьмо</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>Отправить</name> </handler> </action> + <representation>TextPicture</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -3852,11 +4113,15 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.Print</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>Печать</name> </handler> </action> + <representation>TextPicture</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -3882,6 +4147,33 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>Занять</name> + <title> + <key>ru</key> + <value>Занять</value> + + 3 + + ru + Пометить файл как занятый для редактирования + + + true + + + CommonPicture.ЗанятьФайл + + + + Занять + + + TextPicture + true + DontUse + Auto + Ключ diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl index 3b2486f68..9464d26df 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl @@ -25,7 +25,7 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); ДоступнаПечатьСоШтампом = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") @@ -40,6 +40,7 @@ ОбновитьЗаголовок(); ОбновитьПолныйПуть(); + ОбновитьПояснениеОблачногоСервиса(Объект.Ссылка); КонецПроцедуры @@ -124,7 +125,7 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); ОбновитьЗаголовок(); КонецПроцедуры @@ -139,10 +140,6 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - Если Не ЗначениеЗаполнено(ТекущийОбъект.ТипХраненияФайла) Тогда - ТекущийОбъект.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); - КонецЕсли; - КонецПроцедуры &НаСервере @@ -160,6 +157,8 @@ ТекущийОбъект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; КонецЕсли; + ТекущийОбъект.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); + РаботаСФайламиСлужебный.ПеренестиРезультатыПроверкиПодписей(ЭлектронныеПодписи, ЗначениеКопирования); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда @@ -175,14 +174,9 @@ РаботаСФайламиСлужебный.ПеренестиРезультатыПроверкиПодписей(ЭлектронныеПодписи, ТекущийОбъект.Ссылка); КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Если НаименованиеДоЗаписи <> ТекущийОбъект.Наименование Тогда Если ТекущийОбъект.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - РаботаСФайламиСлужебныйВызовСервера.ПереименоватьФайлВерсииНаДиске( + РаботаСФайламиСлужебный.ПереименоватьФайлВерсииНаДиске( ТекущийОбъект.ТекущаяВерсия, НаименованиеДоЗаписи, ТекущийОбъект.Наименование, @@ -190,6 +184,11 @@ КонецЕсли; КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + Если ЗначениеЗаполнено(ЗначениеКопирования) Тогда СоздатьКопиюВерсии(ТекущийОбъект.Ссылка, ЗначениеКопирования); ЗначениеКопирования = Справочники[ИмяСправочника].ПустаяСсылка(); @@ -213,6 +212,19 @@ КонецПроцедуры +&НаКлиенте +Процедура ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + Если НавигационнаяСсылкаФорматированнойСтроки = "OpenJournal" Тогда + + СтандартнаяОбработка = Ложь; + ПараметрыОтбора = ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись); + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ПараметрыОтбора, ЭтотОбъект); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыЭлектронныеПодписи @@ -381,11 +393,9 @@ Записать(); КонецЕсли; - МассивФайлов = Новый Массив; - МассивФайлов.Добавить(Объект.Ссылка); - - РаботаСФайламиСлужебныйКлиент.ПодписатьФайлы(МассивФайлов, УникальныйИдентификатор, - Новый ОписаниеОповещения("ПриПолученииПодписи", ЭтотОбъект)); + ОписаниеОповещения = Новый ОписаниеОповещения("ПриПолученииПодписи", ЭтотОбъект); + ДополнительныеПараметры = Новый Структура("ОбработкаРезультата", ОписаниеОповещения); + РаботаСФайламиКлиент.ПодписатьФайл(Объект.Ссылка, УникальныйИдентификатор, ДополнительныеПараметры); КонецПроцедуры @@ -638,6 +648,18 @@ /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд для поддержки совместной работы с файлами. +&НаКлиенте +Процедура Занять(Команда) + + Если Модифицированность И Не Записать() Тогда + Возврат; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ПрочитатьИУстановитьДоступностьЭлементовФормы", ЭтотОбъект); + РаботаСФайламиСлужебныйКлиент.ЗанятьСОповещением(Обработчик, Объект.Ссылка, УникальныйИдентификатор); + +КонецПроцедуры + &НаКлиенте Процедура Редактировать(Команда) @@ -699,7 +721,7 @@ ОповеститьОбИзменении(ЭтотОбъект.Объект.Ссылка); Оповестить("Запись_Файл", Новый Структура, ЭтотОбъект.Объект.Ссылка); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); КонецПроцедуры @@ -891,38 +913,28 @@ Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда Возврат; КонецЕсли; + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); ИндексыСтрок = Новый Массив; - Для Каждого НомерВыделеннойСтроки Из Элементы.ЭлектронныеПодписи.ВыделенныеСтроки Цикл УдаляемаяСтрока = ЭлектронныеПодписи.НайтиПоИдентификатору(НомерВыделеннойСтроки); ИндексыСтрок.Добавить(УдаляемаяСтрока.ПорядковыйНомер); КонецЦикла; МодульЭлектроннаяПодпись.УдалитьПодпись(Объект.Ссылка, ИндексыСтрок, УникальныйИдентификатор); - Прочитать(); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура УстановитьДоступностьКнопок(Форма, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке) +Процедура УстановитьДоступностьКнопок(Форма, Элементы) - ФайлРедактируется = ЗначениеЗаполнено(Форма.Объект.Редактирует) Или ФайлРедактируетсяВОблаке; - ФайлРедактируетТекущийПользователь = Форма.Объект.Редактирует = ТекущийПользователь; - - ИменаВсехКоманд = ПолучитьИменаКомандФормы(); - ИменаКоманд = ПолучитьДоступныеКоманды( - ФайлРедактируется, - ФайлРедактируетТекущийПользователь, - Форма.Объект.ПодписанЭП, - Форма.Объект.Зашифрован, - Форма.Объект.Ссылка.Пустая(), - ФайлРедактируетсяВОблаке); + ИменаВсехКоманд = ИменаВсехКомандФормы(); + ИменаДоступныхКоманд = ДоступныеКомандыФормы(Форма); Если Форма.ЭлектронныеПодписи.Количество() = 0 Тогда - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьПодпись"); + СделатьКомандуНедоступной(ИменаДоступныхКоманд, "ОткрытьПодпись"); КонецЕсли; Для Каждого ЭлементФормы Из Элементы Цикл @@ -938,7 +950,7 @@ Если ТипЗнч(ЭлементФормы) <> Тип("КнопкаФормы") Тогда Продолжить; КонецЕсли; - Если ИменаКоманд.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено Тогда + Если ИменаДоступныхКоманд.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено Тогда ЭлементФормы.Доступность = Истина; КонецЕсли; КонецЦикла; @@ -946,20 +958,16 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьИменаКомандФормы() - - ИменаКоманд = ПолучитьИменаКомандИзмененияОбъекта(); - - Для Каждого ИмяКоманды Из ПолучитьИменаПростыхКомандОбъектов() Цикл - ИменаКоманд.Добавить(ИмяКоманды); - КонецЦикла; +Функция ИменаВсехКомандФормы() + ИменаКоманд = ИменаКомандИзмененияФайла(); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаКоманд, ИменаПрочихКоманд()); Возврат ИменаКоманд; КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьИменаПростыхКомандОбъектов() +Функция ИменаПрочихКоманд() ИменаКоманд = Новый Массив; @@ -981,7 +989,7 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьИменаКомандИзмененияОбъекта() +Функция ИменаКомандИзмененияФайла() ИменаКоманд = Новый Массив; @@ -991,6 +999,7 @@ ИменаКоманд.Добавить("УдалитьЭП"); ИменаКоманд.Добавить("Редактировать"); + ИменаКоманд.Добавить("Занять"); ИменаКоманд.Добавить("ЗакончитьРедактирование"); ИменаКоманд.Добавить("Освободить"); ИменаКоманд.Добавить("СохранитьИзменения"); @@ -1005,17 +1014,17 @@ ИменаКоманд.Добавить("СтандартнаяЗаписатьИЗакрыть"); ИменаКоманд.Добавить("СтандартныеУстановитьПометкуУдаления"); + ИменаКоманд.Добавить("Скопировать"); + + Возврат ИменаКоманд; КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьДоступныеКоманды(ФайлРедактируется, - ФайлРедактируетТекущийПользователь, - ФайлПодписан, - ФайлЗашифрован, - ЭтоНовыйФайл, - ФайлРедактируетсяВОблаке) +Функция ДоступныеКомандыФормы(Форма) + + ЭтоНовыйФайл = Форма.Объект.Ссылка.Пустая(); Если ЭтоНовыйФайл Тогда ИменаКоманд = Новый Массив; @@ -1024,62 +1033,74 @@ Возврат ИменаКоманд; КонецЕсли; - ИменаКоманд = ПолучитьИменаКомандФормы(); + ИменаКоманд = ИменаВсехКомандФормы(); + + ФайлРедактируетсяВОблаке = Форма.ФайлРедактируетсяВОблаке; + ФайлРедактируется = ЗначениеЗаполнено(Форма.Объект.Редактирует) Или ФайлРедактируетсяВОблаке; + ФайлРедактируетТекущийПользователь = Форма.Объект.Редактирует = Форма.ТекущийПользователь; + ФайлПодписан = Форма.Объект.ПодписанЭП; + ФайлЗашифрован = Форма.Объект.Зашифрован; Если ФайлРедактируется Тогда Если ФайлРедактируетТекущийПользователь Тогда - УдалитьКомандуИзМассива(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); + СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); Иначе - УдалитьКомандуИзМассива(ИменаКоманд, "ЗакончитьРедактирование"); - УдалитьКомандуИзМассива(ИменаКоманд, "Освободить"); - УдалитьКомандуИзМассива(ИменаКоманд, "Редактировать"); + СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + СделатьКомандуНедоступной(ИменаКоманд, "Редактировать"); КонецЕсли; - УдалитьКомандыЭП(ИменаКоманд); + СделатьКомандуНедоступной(ИменаКоманд, "Занять"); - УдалитьКомандуИзМассива(ИменаКоманд, "Зашифровать"); - УдалитьКомандуИзМассива(ИменаКоманд, "Расшифровать"); + СделатьКомандыЭПНедоступными(ИменаКоманд); + + СделатьКомандуНедоступной(ИменаКоманд, "Зашифровать"); + СделатьКомандуНедоступной(ИменаКоманд, "Расшифровать"); Иначе - УдалитьКомандуИзМассива(ИменаКоманд, "ЗакончитьРедактирование"); - УдалитьКомандуИзМассива(ИменаКоманд, "Освободить"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьИзменения"); + СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьИзменения"); КонецЕсли; Если ФайлПодписан Тогда - УдалитьКомандуИзМассива(ИменаКоманд, "ЗакончитьРедактирование"); - УдалитьКомандуИзМассива(ИменаКоманд, "Освободить"); - УдалитьКомандуИзМассива(ИменаКоманд, "Редактировать"); - УдалитьКомандуИзМассива(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); + СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + СделатьКомандуНедоступной(ИменаКоманд, "Редактировать"); + СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); Иначе - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьСертификат"); - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьПодпись"); - УдалитьКомандуИзМассива(ИменаКоманд, "ПроверитьЭП"); - УдалитьКомандуИзМассива(ИменаКоманд, "ПроверитьВсе"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьПодпись"); - УдалитьКомандуИзМассива(ИменаКоманд, "УдалитьЭП"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьВместеСЭП"); + СделатьКомандуНедоступной(ИменаКоманд, "ОткрытьСертификат"); + СделатьКомандуНедоступной(ИменаКоманд, "ОткрытьПодпись"); + СделатьКомандуНедоступной(ИменаКоманд, "ПроверитьЭП"); + СделатьКомандуНедоступной(ИменаКоманд, "ПроверитьВсе"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьПодпись"); + СделатьКомандуНедоступной(ИменаКоманд, "УдалитьЭП"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьВместеСЭП"); КонецЕсли; Если ФайлЗашифрован Тогда - УдалитьКомандыЭП(ИменаКоманд); + СделатьКомандыЭПНедоступными(ИменаКоманд); Если Не ФайлРедактируется Тогда - УдалитьКомандуИзМассива(ИменаКоманд, "Освободить"); - УдалитьКомандуИзМассива(ИменаКоманд, "ЗакончитьРедактирование"); + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); КонецЕсли; - УдалитьКомандуИзМассива(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); - - УдалитьКомандуИзМассива(ИменаКоманд, "Зашифровать"); - - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьКаталогФайла"); - - УдалитьКомандуИзМассива(ИменаКоманд, "Подписать"); + СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); + СделатьКомандуНедоступной(ИменаКоманд, "Зашифровать"); + СделатьКомандуНедоступной(ИменаКоманд, "ОткрытьКаталогФайла"); + СделатьКомандуНедоступной(ИменаКоманд, "Подписать"); Иначе - УдалитьКомандуИзМассива(ИменаКоманд, "Расшифровать"); + СделатьКомандуНедоступной(ИменаКоманд, "Расшифровать"); КонецЕсли; Если ФайлРедактируетсяВОблаке Тогда - УдалитьКомандуИзМассива(ИменаКоманд, "СтандартныеСкопировать"); - УдалитьКомандуИзМассива(ИменаКоманд, "СтандартныеУстановитьПометкуУдаления"); + СделатьКомандуНедоступной(ИменаКоманд, "СтандартныеСкопировать"); + СделатьКомандуНедоступной(ИменаКоманд, "СтандартныеУстановитьПометкуУдаления"); + + СделатьКомандуНедоступной(ИменаКоманд, "СтандартнаяЗаписатьИЗакрыть"); + СделатьКомандуНедоступной(ИменаКоманд, "СтандартнаяЗаписать"); + СделатьКомандуНедоступной(ИменаКоманд, "Скопировать"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьИзменения"); + СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); + КонецЕсли; Возврат ИменаКоманд; @@ -1087,24 +1108,18 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Процедура УдалитьКомандыЭП(Знач ИменаКоманд) +Процедура СделатьКомандыЭПНедоступными(Знач ИменаКоманд) - УдалитьКомандуИзМассива(ИменаКоманд, "Подписать"); - УдалитьКомандуИзМассива(ИменаКоманд, "ДобавитьЭПИзФайла"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьВместеСЭП"); + СделатьКомандуНедоступной(ИменаКоманд, "Подписать"); + СделатьКомандуНедоступной(ИменаКоманд, "ДобавитьЭПИзФайла"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьВместеСЭП"); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура УдалитьКомандуИзМассива(Массив, ИмяКоманды) +Процедура СделатьКомандуНедоступной(ИменаКоманд, ИмяКоманды) - Позиция = Массив.Найти(ИмяКоманды); - - Если Позиция = Неопределено Тогда - Возврат; - КонецЕсли; - - Массив.Удалить(Позиция); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ИменаКоманд, ИмяКоманды); КонецПроцедуры @@ -1116,7 +1131,7 @@ Зашифровать = Истина; - РаботаСФайламиСлужебныйВызовСервера.ЗанестиИнформациюОШифровании( + РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании( ЭтотОбъект.Объект.Ссылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, @@ -1129,6 +1144,7 @@ КонецПроцедуры +&НаСервере Процедура РасшифроватьСервер(МассивДанныхДляЗанесенияВБазу, ИмяРабочегоКаталога) @@ -1136,7 +1152,7 @@ МассивОтпечатков = Новый Массив; МассивФайловВРабочемКаталогеДляУдаления = Новый Массив; - РаботаСФайламиСлужебныйВызовСервера.ЗанестиИнформациюОШифровании( + РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании( ЭтотОбъект.Объект.Ссылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, @@ -1247,7 +1263,7 @@ ФайлОбъект = ЭтотОбъект.Объект.Ссылка.ПолучитьОбъект(); ЗначениеВРеквизитФормы(ФайлОбъект, "Объект"); РаботаСФайламиСлужебный.ЗаполнитьСписокПодписей(ЭтотОбъект); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); КонецПроцедуры @@ -1257,16 +1273,15 @@ ФайлОбъект = ЭтотОбъект.Объект.Ссылка.ПолучитьОбъект(); ЗначениеВРеквизитФормы(ФайлОбъект, "Объект"); РаботаСФайламиСлужебный.ЗаполнитьСписокШифрования(ЭтотОбъект); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); КонецПроцедуры -&НаСервере +&НаКлиенте Процедура ПрочитатьИУстановитьДоступностьЭлементовФормы(Результат, ДополнительныеПараметры) Экспорт - ФайлОбъект = ЭтотОбъект.Объект.Ссылка.ПолучитьОбъект(); - ЗначениеВРеквизитФормы(ФайлОбъект, "Объект"); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + Прочитать(); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); КонецПроцедуры @@ -1458,10 +1473,9 @@ &НаСервере Процедура ОбновитьПолныйПуть() - Если ТипЗнч(Объект.ВладелецФайла) = Тип("СправочникСсылка.ПапкиФайлов") Тогда - ПапкаРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ВладелецФайла"); + ПапкаРодитель = Объект.ВладелецФайла; Если ЗначениеЗаполнено(ПапкаРодитель) Тогда @@ -1499,7 +1513,7 @@ ХранилищеФайла = Неопределено; Если Источник.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ХранилищеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы(Источник.ТекущаяВерсия); + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(Источник.ТекущаяВерсия); КонецЕсли; СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); @@ -1511,13 +1525,58 @@ СведенияОФайле.СсылкаНаВерсиюИсточник = Источник.ТекущаяВерсия; СведенияОФайле.Зашифрован = Источник.Зашифрован; - Версия = РаботаСФайламиСлужебныйВызовСервера.СоздатьВерсию(Приемник, СведенияОФайле); - - РаботаСФайламиСлужебныйВызовСервера.ОбновитьВерсиюВФайле( + Версия = РаботаСФайламиСлужебный.СоздатьВерсию(Приемник, СведенияОФайле); + РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле( Приемник, Версия, Источник.ТекущаяВерсия.ТекстХранилище, УникальныйИдентификатор); - Прочитать(); КонецПроцедуры +&НаСервере +Процедура ОбновитьПояснениеОблачногоСервиса(ПрисоединенныйФайл) + + ВидимостьПояснения = Ложь; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда + + СведенияОСинхронизации = РаботаСФайламиСлужебный.СведенияОСинхронизации(Объект.ВладелецФайла); + + Если СведенияОСинхронизации.Количество() > 0 Тогда + + УчетнаяЗапись = СведенияОСинхронизации.УчетнаяЗапись; + ФайлыРедактируютсяВОблачномСервисе = Истина; + ВидимостьПояснения = Истина; + + АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( + СведенияОСинхронизации.Сервис, СведенияОСинхронизации.Href); + + ЧастиСтроки = Новый Массив; + ЧастиСтроки.Добавить(НСтр("ru = 'Файл доступен только для просмотра, работа с ним ведется в облачном сервисе'")); + ЧастиСтроки.Добавить(" "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(СведенияОСинхронизации.УчетнаяЗаписьНаименование,,,, АдресПапкиВОблачномСервисе)); + ЧастиСтроки.Добавить(". "); + Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + + Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; + + + ЧастиСтроки.Очистить(); + ЧастиСтроки.Добавить(НСтр("ru = 'Синхронизирован'")); + ЧастиСтроки.Добавить(": "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD"),,,, "OpenJournal")); + Элементы.ДекорацияДатаСинхронизации.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + + КонецЕсли; + + КонецЕсли; + + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = ВидимостьПояснения; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись) + Возврат РаботаСФайламиСлужебный.ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись); +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/ManagerModule.bsl b/SSL/src/Catalogs/Файлы/ManagerModule.bsl index 5a4518436..d19ff5510 100644 --- a/SSL/src/Catalogs/Файлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/Файлы/ManagerModule.bsl @@ -64,11 +64,9 @@ Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт УстановитьПривилегированныйРежим(Истина); - ОтработаныВсеФайлы = Ложь; - Ссылка = ""; - + Пока Не ОтработаныВсеФайлы Цикл Запрос = Новый Запрос; @@ -78,9 +76,10 @@ |ИЗ | Справочник.Файлы КАК Файлы |ГДЕ - | Файлы.ДатаМодификацииУниверсальная = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) + | ((Файлы.ДатаМодификацииУниверсальная = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) + | И Файлы.ТекущаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка)) + | ИЛИ Файлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ПустаяСсылка)) | И Файлы.Ссылка > &Ссылка - | И Файлы.ТекущаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка) | |УПОРЯДОЧИТЬ ПО | Ссылка"; @@ -97,7 +96,7 @@ КонецЕсли; Если КоличествоСсылок > 0 Тогда - Ссылка = МассивСсылок[КоличествоСсылок-1]; + Ссылка = МассивСсылок[КоличествоСсылок - 1]; КонецЕсли; КонецЦикла; @@ -119,6 +118,7 @@ Попытка ОбновляемыйФайл = Выборка.Ссылка.ПолучитьОбъект(); ОбновляемыйФайл.ДатаМодификацииУниверсальная = ОбновляемыйФайл.ТекущаяВерсия.ДатаМодификацииУниверсальная; + ОбновляемыйФайл.ТипХраненияФайла = ОбновляемыйФайл.ТекущаяВерсия.ТипХраненияФайла; ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбновляемыйФайл); ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка); diff --git a/SSL/src/Catalogs/Файлы/Файлы.mdo b/SSL/src/Catalogs/Файлы/Файлы.mdo index 89a47e207..85682469c 100644 --- a/SSL/src/Catalogs/Файлы/Файлы.mdo +++ b/SSL/src/Catalogs/Файлы/Файлы.mdo @@ -679,6 +679,7 @@ + ShowError Index Use diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl index 6862b4acd..7c719934d 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl @@ -82,6 +82,7 @@ Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда + ОтменитьТранзакцию(); Возврат Неопределено; КонецЕсли; diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl index 0370b7182..93a6d6208 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl @@ -47,7 +47,7 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ПослеЗаписиШаблонаСообщения" Тогда + Если ИмяСобытия = "Запись_ШаблоныСообщений" Тогда СсылкаНаВыбранныйЭлемент = Неопределено; Если Элементы.Шаблоны.ТекущиеДанные <> Неопределено Тогда СсылкаНаВыбранныйЭлемент = Элементы.Шаблоны.ТекущиеДанные.Ссылка; diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form index 09a7b93dd..ea36da912 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form @@ -359,6 +359,60 @@ true None + + ЕстьФайлы + 50 + + <key>ru</key> + <value>Есть файлы</value> + + true + true + + true + + + Список.ЕстьФайлы + + None + + ЕстьФайлыРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ЕстьФайлыКонтекстноеМеню + 51 + true + + PictureField + Enter + true + + CommonPicture.Скрепка + + Left + true + + 2 + true + true + true + true + + CommonPicture.КоллекцияСкрепка + + + + 1 + + + Наименование 16 @@ -592,6 +646,10 @@ true + + OnGetDataAtServer + СписокПриПолученииДанныхНаСервере + 60 0001-01-01T00:00:00 @@ -653,14 +711,16 @@ КОГДА СправочникШаблоныСообщений.Назначение = "" ТОГДА &Общий ИНАЧЕ СправочникШаблоныСообщений.Назначение - КОНЕЦ КАК Назначение + КОНЕЦ КАК Назначение, + 0 ЕстьФайлы ИЗ Справочник.ШаблоныСообщений КАК СправочникШаблоныСообщений ГДЕ (&Назначение = "" ИЛИ СправочникШаблоныСообщений.Назначение = &Назначение) И (СправочникШаблоныСообщений.ВладелецШаблона = Неопределено - ИЛИ &ПоказыватьКонтекстныеШаблоны) + ИЛИ &ПоказыватьКонтекстныеШаблоны) + Catalog.ШаблоныСообщений true true diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl index cb9cfc390..3a5fb3ae0 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl @@ -27,6 +27,108 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "Запись_ШаблоныСообщений" Тогда + ИнициализироватьОтборы(); + УстановитьФильтрНазначение(Назначение); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура НазначениеФильтрПриИзменении(Элемент) + УстановитьФильтрНазначение(Назначение); +КонецПроцедуры + +&НаКлиенте +Процедура ШаблонДляФильтрОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если ВыбранноеЗначение = "SMS" Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ШаблонДля", НСтр("ru = 'Сообщения SMS'"), ВидСравненияКомпоновкиДанных.Равно); + ИначеЕсли ВыбранноеЗначение = "Email" Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ШаблонДля", НСтр("ru = 'Электронного письма'"), ВидСравненияКомпоновкиДанных.Равно); + Иначе + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "ШаблонДля"); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + +&НаСервереБезКонтекста +Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) + Запрос = Новый Запрос("ВЫБРАТЬ + | ШаблоныСообщенийПечатныеФормыИВложения.Ссылка КАК Ссылка + |ИЗ + | Справочник.ШаблоныСообщений.ПечатныеФормыИВложения КАК ШаблоныСообщенийПечатныеФормыИВложения + |ГДЕ + | ШаблоныСообщенийПечатныеФормыИВложения.Ссылка В (&ШаблоныСообщений) + |СГРУППИРОВАТЬ ПО + | ШаблоныСообщенийПечатныеФормыИВложения.Ссылка"); + Запрос.УстановитьПараметр("ШаблоныСообщений", Строки.ПолучитьКлючи()); + Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Для каждого ШаблонСообщений Из Результат Цикл + СтрокаСписка = Строки[ШаблонСообщений]; + СтрокаСписка.Данные["ЕстьФайлы"] = 1; + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СоздатьШаблонЭлектронногоПисьма(Команда) + ПараметрыФормы = Новый Структура("ВидСообщения", "ЭлектронноеПисьмо"); + ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы ,ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьШаблонСообщенияSMS(Команда) + ПараметрыФормы = Новый Структура("ВидСообщения", "СообщениеSMS"); + ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы ,ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьКонтекстныеШаблоны(Команда) + Элементы.ФормаПоказыватьКонтекстныеШаблоны.Пометка = Не Элементы.ФормаПоказыватьКонтекстныеШаблоны.Пометка; + Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьКонтекстныеШаблоны", Элементы.ФормаПоказыватьКонтекстныеШаблоны.Пометка); +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() + + Список.УсловноеОформление.Элементы.Очистить(); + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка.ВладелецШаблона"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура УстановитьФильтрНазначение(Знач ВыбранноеЗначение) + + Если ПустаяСтрока(ВыбранноеЗначение) Тогда + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Назначение"); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "Назначение", ВыбранноеЗначение, ВидСравненияКомпоновкиДанных.Равно); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ИнициализироватьОтборы() @@ -78,80 +180,4 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ПослеЗаписиШаблонаСообщения" Тогда - ИнициализироватьОтборы(); - УстановитьФильтрНазначение(Назначение); - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура НазначениеФильтрПриИзменении(Элемент) - УстановитьФильтрНазначение(Назначение); -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьФильтрНазначение(Знач ВыбранноеЗначение) - - Если ПустаяСтрока(ВыбранноеЗначение) Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Назначение"); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "Назначение", ВыбранноеЗначение, ВидСравненияКомпоновкиДанных.Равно); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ШаблонДляФильтрОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - Если ВыбранноеЗначение = "SMS" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ШаблонДля", НСтр("ru = 'Сообщения SMS'"), ВидСравненияКомпоновкиДанных.Равно); - ИначеЕсли ВыбранноеЗначение = "Email" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ШаблонДля", НСтр("ru = 'Электронного письма'"), ВидСравненияКомпоновкиДанных.Равно); - Иначе - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "ШаблонДля"); - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура СоздатьШаблонЭлектронногоПисьма(Команда) - ПараметрыФормы = Новый Структура("ВидСообщения", "ЭлектронноеПисьмо"); - ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы ,ЭтотОбъект); -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьШаблонСообщенияSMS(Команда) - ПараметрыФормы = Новый Структура("ВидСообщения", "СообщениеSMS"); - ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы ,ЭтотОбъект); -КонецПроцедуры - -&НаКлиенте -Процедура ПоказыватьКонтекстныеШаблоны(Команда) - Элементы.ФормаПоказыватьКонтекстныеШаблоны.Пометка = Не Элементы.ФормаПоказыватьКонтекстныеШаблоны.Пометка; - Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьКонтекстныеШаблоны", Элементы.ФормаПоказыватьКонтекстныеШаблоны.Пометка); -КонецПроцедуры - -&НаСервере -Процедура УстановитьУсловноеОформление() - - Список.УсловноеОформление.Элементы.Очистить(); - Элемент = Список.УсловноеОформление.Элементы.Добавить(); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка.ВладелецШаблона"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form index f926bdbbd..5b755e5ed 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form @@ -2043,6 +2043,32 @@ UserCmds Auto + + ВложенияСкопироватьВложение + 356 + true + true + + true + + + ВложенияСкопироватьВложениеРасширеннаяПодсказка + 357 + Label + true + true + + Left + + + Form.Command.СкопироватьВложение + Normal + Auto + true + true + UserCmds + Auto + ВложенияИзменить 352 @@ -2538,6 +2564,32 @@ UserCmds Auto + + ВложенияКонтекстноеМенюСкопироватьВложение + 354 + true + true + + true + + + ВложенияКонтекстноеМенюСкопироватьВложениеРасширеннаяПодсказка + 355 + Label + true + true + + Left + + + Form.Command.СкопироватьВложение + Normal + Auto + true + true + UserCmds + Auto + ВложенияКонтекстноеМенюИзменитьВложение 253 @@ -3879,6 +3931,28 @@ DontUse Auto + + СкопироватьВложение + + <key>ru</key> + <value>Скопировать</value> + + 6 + + ru + Скопировать вложение + + + true + + + + СкопироватьВложение + + + DontUse + Auto + ВидСообщения diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Help/ru.html index 7f5173b2f..b17453d5c 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Help/ru.html @@ -12,9 +12,8 @@
      • К сообщению можно прикрепить вложения с помощью команды Еще - Добавить в правой нижней части шаблона. 
      • Выбранные  форматы печатных форм перечисляются ниже окна Печатные формы и вложения. Нажмите на ссылку, для того чтобы изменить список форматов.
      • Включите флажок, для того чтобы Упаковать в архив печатные формы. -
      • С помощью соответствующего переключателя установите доступность данного шаблона: -
        • Только для автора (выберите автора, по умолчанию автором выбран текущий пользователь); -
        • Всем пользователям.

      Шаблон сообщения SMS

      +
    • Установите доступность данного шаблона: +
      • В поле Доступен выберите пользователя из списка. По умолчанию шаблон доступен всем.
    • Включите флажок для того, чтобы Транслитерировать имена файлов. В этом случае сформированные печатные формы и файлы будут иметь имена, содержащие только латинские буквы и цифры для возможности переноса между различными операционными системами.

    Шаблон сообщения SMS

    • Наименование напишите так, чтобы было понятно, как используется шаблон.
    • @@ -27,11 +26,9 @@
    • Напишите текст сообщения. Кроме текста SMS-сообщения, в поле можно вставлять различные формулы. Для вставки в формулы в правой части шаблона в окне Параметры представлены различные реквизиты: поля выбранного документа, а также Общие реквизиты.
      -
    • С помощью соответствующего переключателя установите доступность данного шаблона: +
    • Установите доступность данного шаблона:
      • -
        Только для автора (выберите автора, по умолчанию автором выбран текущий пользователь);
        -
      • -
        Всем пользователям.

    Выбор способа формирования

    +
    В поле Доступен выберите пользователей из списка, которым будет доступен данный шаблон. По умолчанию шаблон доступен всем.

    Выбор способа формирования

    • С помощью команды Сообщение формируется меню Еще можно выбрать:
      • По шаблону (выбран по умолчанию);
      • Внешней обработкой - после выбора этого способа формирования появляется возможность предварительного просмотра шаблона сообщения, где автоматически заполняемые параметры выделяются цветом.

    Проверка работоспособности шаблона

    diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl index 8feb41955..6067f99ae 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl @@ -231,12 +231,21 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + Для каждого ПараметрШаблонаТекущийОбъект Из ТекущийОбъект.Параметры Цикл + Отбор = Новый Структура("ИмяПараметра", ПараметрШаблонаТекущийОбъект.ИмяПараметра); + НайденныеСтроки = Объект.Параметры.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].ОписаниеТипа = ПараметрШаблонаТекущийОбъект.ТипПараметра.Получить(); + КонецЕсли; + КонецЦикла; + ОтображениеЭлементовФормы(); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - Оповестить("ПослеЗаписиШаблонаСообщения", Объект.Ссылка, ЭтотОбъект); + Оповестить("Запись_ШаблоныСообщений", Объект.Ссылка, ЭтотОбъект); Если ПустаяСтрока(Объект.ПолноеИмяТипаПараметраВводаНаОсновании) Тогда Объект.Назначение = НСтр("ru='Общий'"); @@ -613,7 +622,7 @@ Если ТекущиеДанные.Ссылка = ПредопределенноеЗначение("Справочник.ШаблоныСообщенийПрисоединенныеФайлы.ПустаяСсылка") Тогда ДополнительныеПараметры = Новый Структура("ТекущийИндексВКоллекции", ТекущийИдентификаторВКоллекции); - ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОЗаписиФайлаПослеЗакрытия", ЭтотОбъект, ДополнительныеПараметры); + ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ИзменитьВложениеЗавершение", ЭтотОбъект, ДополнительныеПараметры); ТекстВопроса = НСтр("ru = 'Свойства файла доступны только после его записи. Записать?'"); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе @@ -622,6 +631,25 @@ КонецПроцедуры +&НаКлиенте +Процедура СкопироватьВложение(Команда) + ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Идентификатор = Элементы.Вложения.ТекущаяСтрока; + + Если ТекущиеДанные.Ссылка = ПредопределенноеЗначение("Справочник.ШаблоныСообщенийПрисоединенныеФайлы.ПустаяСсылка") Тогда + ДополнительныеПараметры = Новый Структура("ТекущийИндексВКоллекции", Идентификатор); + ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("СкопироватьВложениеЗавершение", ЭтотОбъект, ДополнительныеПараметры); + ТекстВопроса = НСтр("ru = 'Файл возможно скопировать только после его записи. Записать?'"); + ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Иначе + СкопироватьФайлВложения(Идентификатор); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -905,11 +933,8 @@ Элементы.ФормаПоШаблону.Пометка = Истина; КонецЕсли; - Если Пользователи.РолиДоступны("ДобавлениеИзменениеШаблоновСообщений") Тогда - Элементы.ГруппаДоступ.Видимость = Истина; - Иначе - Элементы.ГруппаДоступ.Видимость = Ложь; - КонецЕсли; + Элементы.ГруппаДоступ.Видимость = + НЕ ПараметрыДоступа("Изменение", Метаданные.Справочники.ШаблоныСообщений, "Ссылка").ОграничениеУсловием; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); @@ -1194,36 +1219,46 @@ Возврат; КонецЕсли; - Если ДополнительныеПараметры.Идентификатор = Неопределено Тогда + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебныйКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиентСервер"); + + МассивИменФайловСОшибками = Новый Массив; + + НоваяСтрока = Неопределено; + Для Каждого ВыбранныйФайл Из ВыбранныеФайлы Цикл - НоваяСтрока = Вложения.Добавить(); - НоваяСтрока.Имя = ВыбранныйФайл; - ИмяФайла = ""; - ПолучитьКаталогИИмяФайла(ВыбранныйФайл, "", ИмяФайла); - НоваяСтрока.Представление = ИмяФайла; - НоваяСтрока.Идентификатор = ИмяФайла; + ОбъектФайл = Новый Файл(ВыбранныйФайл); + Если МодульРаботаСФайламиСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла(ОбъектФайл, Ложь, МассивИменФайловСОшибками) Тогда + + ИмяФайла = ""; + ПолучитьКаталогИИмяФайла(ВыбранныйФайл, "", ИмяФайла); + Расширение = ПолучитьРасширениеФайла(ИмяФайла); + + НоваяСтрока = Вложения.Добавить(); + НоваяСтрока.Статус = "ВнешнийНовый"; + НоваяСтрока.Выбрано = 1; + НоваяСтрока.Имя = ВыбранныйФайл; + НоваяСтрока.Представление = ИмяФайла; + НоваяСтрока.Идентификатор = ИмяФайла; + НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайлаКлиент(Расширение); + + КонецЕсли; - Расширение = ПолучитьРасширениеФайла(ИмяФайла); - НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайлаКлиент(Расширение); - НоваяСтрока.Статус = "ВнешнийНовый"; - НоваяСтрока.Выбрано = 1; КонецЦикла; - Если ВыбранныеФайлы.Количество() > 0 Тогда + Если НоваяСтрока <> Неопределено Тогда Элементы.Вложения.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); - Модифицированность = Истина; - КонецЕсли; - Иначе - Отбор = Новый Структура("Идентификатор", ДополнительныеПараметры.Идентификатор); - НайденныеСтроки = Вложения.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() > 0 Тогда - НайденныеСтроки[0].Имя = ВыбранныеФайлы[0]; - НайденныеСтроки[0].Выбрано = 1; - НайденныеСтроки[0].Статус = "ВнешнийНовый"; - Модифицированность = Истина; + Модифицированность = Истина; КонецЕсли; + Если МассивИменФайловСОшибками.Количество() > 0 Тогда + Для каждого ОписаниеОшибки Из МассивИменФайловСОшибками Цикл + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Добавление вложения %1 отменено по причине: %2'"), + ОписаниеОшибки.ИмяФайла, ОписаниеОшибки.Ошибка); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + КонецЦикла; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -1319,24 +1354,41 @@ КонецПроцедуры &НаКлиенте -Процедура ОткрытьСвойстваВложения(ТекущийИдентификаторВКоллекции) +Процедура ОткрытьСвойстваВложения(Идентификатор) - ТекущиеДанные = Вложения.НайтиПоИдентификатору(ТекущийИдентификаторВКоллекции); + ТекущиеДанные = Вложения.НайтиПоИдентификатору(Идентификатор); Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - Элементы.Вложения.ТекущаяСтрока = ТекущийИдентификаторВКоллекции; + Элементы.Вложения.ТекущаяСтрока = Идентификатор; Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); - МодульРаботаСФайламиКлиент.ОткрытьФормуФайла(ТекущиеДанные.Ссылка,); + МодульРаботаСФайламиКлиент.ОткрытьФормуФайла(ТекущиеДанные.Ссылка); КонецЕсли КонецПроцедуры &НаКлиенте -Процедура ВопросОЗаписиФайлаПослеЗакрытия(РезультатВопроса, ДополнительныеПараметры) Экспорт +Процедура СкопироватьФайлВложения(Идентификатор) + + ТекущиеДанные = Вложения.НайтиПоИдентификатору(Идентификатор); + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Элементы.Вложения.ТекущаяСтрока = Идентификатор; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.СкопироватьФайл(Объект.Ссылка, ТекущиеДанные.Ссылка); + КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьВложениеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт Если РезультатВопроса = КодВозвратаДиалога.Да Тогда Записать(); @@ -1345,6 +1397,16 @@ КонецПроцедуры +&НаКлиенте +Процедура СкопироватьВложениеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + Записать(); + СкопироватьФайлВложения(ДополнительныеПараметры.ТекущийИндексВКоллекции); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьВложения(ПереданныеПараметры = Неопределено) @@ -1575,6 +1637,7 @@ КонецЕсли; КонецПроцедуры +&НаСервере Процедура ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытия, ИнформацияОбОшибке, ТекстСобытия) Комментарий = ТекстСобытия + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl index 31edeb017..494814601 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl @@ -3,46 +3,12 @@ Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Если Параметры.Свойство("ВладелецШаблона") И ЗначениеЗаполнено(Параметры.ВладелецШаблона) Тогда - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Параметры.Вставить("ВладелецШаблона", Параметры.ВладелецШаблона); - Параметры.Вставить("Ключ", ОпределитьШаблонПоВладельцу(Параметры.ВладелецШаблона)); - ВыбраннаяФорма = "Справочник.ШаблоныСообщений.ФормаОбъекта"; - СтандартнаяОбработка = Ложь; - #КонецЕсли + Параметры.Вставить("ВладелецШаблона", Параметры.ВладелецШаблона); + Параметры.Вставить("Ключ", ШаблоныСообщенийВызовСервера.ШаблонПоВладельцу(Параметры.ВладелецШаблона)); + ВыбраннаяФорма = "Справочник.ШаблоныСообщений.ФормаОбъекта"; + СтандартнаяОбработка = Ложь; КонецЕсли; КонецПроцедуры - #КонецОбласти - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область СлужебныеПроцедурыИФункции - -Функция ОпределитьШаблонПоВладельцу(ВладелецШаблона) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ШаблоныСообщений.Ссылка КАК Ссылка - |ИЗ - | Справочник.ШаблоныСообщений КАК ШаблоныСообщений - |ГДЕ - | ШаблоныСообщений.ВладелецШаблона = &ВладелецШаблона"; - - Запрос.УстановитьПараметр("ВладелецШаблона", ВладелецШаблона); - - РезультатЗапроса = Запрос.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - Возврат РезультатЗапроса.Выгрузить()[0].Ссылка; - Иначе - Возврат ПустаяСсылка(); - КонецЕсли; - -КонецФункции - -#КонецОбласти - -#КонецЕсли diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl index 82b761405..979d09db9 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl @@ -1,16 +1,6 @@ #Область ОбработчикиСобытийФормы -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Если Объект.Ссылка.Пустая() Тогда - ПриИзмененииТипаОтвета(); - КонецЕсли; - УправлениеВидимостью(); - -КонецПроцедуры - &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,6 +10,8 @@ Возврат; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); + // Установим отбор по владельцу на динамическом списке справочника "Варианты ответов анкет". ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ВариантыОтветов,"Владелец", Объект.Ссылка, ВидСравненияКомпоновкиДанных.Равно, ,Истина); @@ -48,6 +40,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Объект.Ссылка.Пустая() Тогда + ПриИзмененииТипаОтвета(); + КонецЕсли; + УправлениеВидимостью(); + +КонецПроцедуры + &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl index ab8bd1d3c..43cb08010 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl @@ -32,6 +32,8 @@ Возврат; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + Если Не ЭтоГруппа Тогда ОчиститьНенужныеРеквизиты(); УстановкаТипаПВХ(); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form index 936e46432..5823b8b95 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form @@ -19,7 +19,7 @@ ru Дополнительный реквизит не используется в документах программы. -Тип значения дополнительного реквизита можно изменять. +Тип значения и имя дополнительного реквизита можно изменять. true true @@ -85,7 +85,7 @@ ru Дополнительное сведение не используется в информационной базе. -Тип значения дополнительного сведения можно изменять. +Тип значения и имя дополнительного сведения можно изменять. true true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl index 61799af25..cc570f4c5 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl @@ -49,6 +49,7 @@ РазблокируемыеРеквизиты = Новый Массив; РазблокируемыеРеквизиты.Добавить("ТипЗначения"); + РазблокируемыеРеквизиты.Добавить("Имя"); Закрыть(РазблокируемыеРеквизиты); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form index ca57eb685..28d784ba7 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form @@ -3819,6 +3819,90 @@ Auto
    + + ГруппаДляРазработчиков + 455 + + Имя + 457 + true + true + + true + + + Объект.Имя + + + ru + Требуется для программного обращения к дополнительным реквизитам или сведениям. +Имя должно состоять из одного слова, начинаться с буквы и не содержать специальных символов, кроме «_». +Если не указано - заполняется автоматически при записи. + + Button + + ИмяРасширеннаяПодсказка + 459 + Label + true + true + + Left + + + + ИмяКонтекстноеМеню + 458 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Для разработчиков</value> + + + ГруппаДляРазработчиковРасширеннаяПодсказка + 456 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + true + Button + WeakSeparation + true + true + auto + Auto + Auto + + true true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index b7fbee00d..566e5db07 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -93,6 +93,27 @@ КонецЕсли; КонецЕсли; + Если НЕ ПараметрыЗаписи.Свойство("КогдаИмяУжеИспользуется") + И ЗначениеЗаполнено(Объект.Имя) Тогда + // Заполнение наименования по набору свойств + // и проверка есть ли свойство с тем же наименованием. + ТекстВопроса = ИмяУжеИспользуется( + Объект.Имя, Объект.Ссылка, Объект.НаборСвойств, Объект.Наименование); + + Если ЗначениеЗаполнено(ТекстВопроса) Тогда + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("ПродолжитьЗапись", НСтр("ru = 'Продолжить'")); + Кнопки.Добавить("ВернутьсяКВводуИмени", НСтр("ru = 'Отмена'")); + + ПоказатьВопрос( + Новый ОписаниеОповещения("ПослеОтветаНаВопросКогдаИмяУжеИспользуется", ЭтотОбъект, ПараметрыЗаписи), + ТекстВопроса, Кнопки, , "ПродолжитьЗапись"); + + Отказ = Истина; + Возврат; + КонецЕсли; + КонецЕсли; + Если ПараметрыЗаписи.Свойство("ОбработкаПродолжения") Тогда ОбработкаПродолженияПриОшибкеЗаписи = ПараметрыЗаписи.ОбработкаПродолжения; ПодключитьОбработчикОжидания("ПослеОшибкиЗаписи", 0.1, Истина); @@ -131,6 +152,22 @@ КонецЕсли; КонецЕсли; + // Формирование имени дополнительного реквизита (сведения). + Если Не ЗначениеЗаполнено(ТекущийОбъект.Имя) + Или ПараметрыЗаписи.Свойство("КогдаИмяУжеИспользуется") Тогда + ТекущийОбъект.Имя = ""; + ЗаголовокОбъекта = ТекущийОбъект.Заголовок; + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ЗаголовокОбъекта, ""); + ЗаголовокОбъектаЧастями = СтрРазделить(ЗаголовокОбъекта, " ", Ложь); + Для Каждого ЧастьЗаголовка Из ЗаголовокОбъектаЧастями Цикл + ТекущийОбъект.Имя = ТекущийОбъект.Имя + ВРег(Лев(ЧастьЗаголовка, 1)) + Сред(ЧастьЗаголовка, 2); + КонецЦикла; + + УИД = Новый УникальныйИдентификатор(); + СтрокаУИД = СтрЗаменить(Строка(УИД), "-", ""); + ТекущийОбъект.Имя = ТекущийОбъект.Имя + "_" + СтрокаУИД; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -895,6 +932,24 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеОтветаНаВопросКогдаИмяУжеИспользуется(Ответ, ПараметрыЗаписи) Экспорт + + Если Ответ <> "ПродолжитьЗапись" Тогда + ТекущийЭлемент = Элементы.Заголовок; + Если ПараметрыЗаписи.Свойство("ОбработкаПродолжения") Тогда + ВыполнитьОбработкуОповещения( + Новый ОписаниеОповещения(ПараметрыЗаписи.ОбработкаПродолжения.ИмяПроцедуры, + ЭтотОбъект, ПараметрыЗаписи.ОбработкаПродолжения.Параметры), + Истина); + КонецЕсли; + Иначе + ПараметрыЗаписи.Вставить("КогдаИмяУжеИспользуется"); + Записать(ПараметрыЗаписи); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПослеПодтвержденияОчисткиВесовыхКоэффициентов(Ответ, Контекст) Экспорт @@ -1352,21 +1407,27 @@ КонецЕсли; Если НЕ Объект.ЭтоДополнительноеСведение Тогда + Элементы.ГруппаМногострочность.Видимость = Истина; ПереключитьНастройкиВыводаРеквизита(Объект.ТипЗначения); Иначе Элементы.ГруппаМногострочность.Видимость = Ложь; КонецЕсли; + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + СтарыйТипЗначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ТипЗначения"); + МожноНастраиватьВидимостьДоступность = ЗначениеЗаполнено(Объект.НаборСвойств); + Иначе + СтарыйТипЗначения = Новый ОписаниеТипов; + МожноНастраиватьВидимостьДоступность = ЗначениеЗаполнено(ТекущийНаборСвойств); + КонецЕсли; + Если Объект.ЭтоДополнительноеСведение Тогда Объект.ЗаполнятьОбязательно = Ложь; Элементы.ГруппаСвойстваИЗависимости.Видимость = Ложь; Иначе Элементы.ГруппаСвойстваИЗависимости.Видимость = Истина; - КонецЕсли; - - Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - СтарыйТипЗначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ТипЗначения"); - Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда + + Если МожноНастраиватьВидимостьДоступность Тогда Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; Элементы.ЗадатьУсловиеДоступности.Доступность = Истина; Элементы.ЗадатьУсловиеВидимости.Доступность = Истина; @@ -1374,13 +1435,9 @@ Элементы.ГруппаНастройкаЗависимостей.Видимость = Ложь; Элементы.Виден.Видимость = Ложь; Элементы.Доступен.Видимость = Ложь; + Элементы.ЗаполнятьОбязательно.Заголовок = НСтр("ru = 'Заполнять обязательно'"); КонецЕсли; УстановитьЗаголовкиГиперссылок(); - Иначе - СтарыйТипЗначения = Новый ОписаниеТипов; - Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; - Элементы.ЗадатьУсловиеДоступности.Доступность = Истина; - Элементы.ЗадатьУсловиеВидимости.Доступность = Истина; КонецЕсли; Если ЗначениеЗаполнено(Объект.ВладелецДополнительныхЗначений) Тогда @@ -2252,9 +2309,11 @@ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства |ГДЕ | Свойства.Наименование = &Наименование - | И Свойства.Ссылка <> &Ссылка"; + | И Свойства.Ссылка <> &Ссылка + | И Свойства.НаборСвойств = &Набор"; Запрос.УстановитьПараметр("Ссылка", ТекущееСвойство); + Запрос.УстановитьПараметр("Набор", НаборСвойств); Запрос.УстановитьПараметр("Наименование", НовоеНаименование); НачатьТранзакцию(); @@ -2299,6 +2358,57 @@ КонецФункции +&НаСервереБезКонтекста +Функция ИмяУжеИспользуется(Знач Имя, Знач ТекущееСвойство, Знач НаборСвойств, НовоеНаименование) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Свойства.ЭтоДополнительноеСведение, + | Свойства.НаборСвойств + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + |ГДЕ + | Свойства.Имя = &Имя + | И Свойства.Ссылка <> &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", ТекущееСвойство); + Запрос.УстановитьПараметр("Имя", Имя); + + НачатьТранзакцию(); + Попытка + Выборка = Запрос.Выполнить().Выбрать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если НЕ Выборка.Следующий() Тогда + Возврат ""; + КонецЕсли; + + Если Выборка.ЭтоДополнительноеСведение Тогда + ТекстВопроса = НСтр("ru = 'Существует дополнительное сведение с именем + |""%1"".'"); + Иначе + ТекстВопроса = НСтр("ru = 'Существует дополнительный реквизит с именем + |""%1"".'"); + КонецЕсли; + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса + Символы.ПС + Символы.ПС + + НСтр("ru = 'Рекомендуется использовать другое имя, + |иначе программа может работать некорректно. + | + |Создать новое имя и продолжить запись?'"), + Имя); + + Возврат ТекстВопроса; + +КонецФункции + &НаКлиентеНаСервереБезКонтекста Процедура УстановитьЗаголовокКнопкиФормата(Форма) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl index 4fa660e17..7ef217434 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl @@ -36,6 +36,7 @@ Результат = Новый Массив; Результат.Добавить("ТипЗначения"); + Результат.Добавить("Имя"); Возврат Результат; @@ -102,6 +103,9 @@ ЗаполнитьЗначенияСвойств(НовыйОбъект, СвойствоОбъект, , "Родитель"); СвойствоОбъект = НовыйОбъект; СвойствоОбъект.НаборСвойств = ТекущийНаборСвойств; + Если ЗначениеЗаполнено(СвойствоОбъект.Имя) Тогда + СвойствоОбъект.Имя = СвойствоОбъект.Имя + "1"; + КонецЕсли; СвойствоОбъект.Записать(); НаборСвойствОбъект = ТекущийНаборСвойств.ПолучитьОбъект(); @@ -213,16 +217,17 @@ ТребуетсяАнализНаборовКаждогоОбъектаВладельца = Ложь; Если Свойство <> СвойствоОбъект.Ссылка Тогда + ИмяПредопределенного = СтрЗаменить(МетаданныеВладельца.ПолноеИмя(), ".", "_"); - ПредопределенныеЭлементы = СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных("Справочник.НаборыДополнительныхРеквизитовИСведений"); - КорневойНабор = ПредопределенныеЭлементы[ИмяПредопределенного]; + ТребуетсяАнализНаборовКаждогоОбъектаВладельца = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + "Справочник.НаборыДополнительныхРеквизитовИСведений." + ИмяПредопределенного, "ЭтоГруппа"); - Если КорневойНабор <> Неопределено Тогда - Если ЗначениеЗаполнено(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КорневойНабор, "ЭтоГруппа")) Тогда - ТребуетсяАнализНаборовКаждогоОбъектаВладельца = Истина; - КонецЕсли; + // Если предопределенного нет в ИБ. + Если ТребуетсяАнализНаборовКаждогоОбъектаВладельца = Неопределено Тогда + ТребуетсяАнализНаборовКаждогоОбъектаВладельца = Ложь; КонецЕсли; + КонецЕсли; Если ТребуетсяАнализНаборовКаждогоОбъектаВладельца Тогда diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl index c32b2afdb..4009be952 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl @@ -5,6 +5,7 @@ Процедура ПриКопировании(ОбъектКопирования) Заголовок = ""; + Имя = ""; КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo index 4f276e52f..0acf2fee5 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo @@ -336,6 +336,28 @@ Use Use + + Имя + + ru + Имя + + + String + + 100 + + + + ru + Требуется для программного обращения к дополнительным реквизитам и сведениям. Аналог имени обычного реквизита. + + + + + Use + Use + Комментарий diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl index 401cbd950..671150bdc 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl @@ -36,7 +36,7 @@ Разделы.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Разделы.Колонки.Добавить("ТипыОбъектов", Новый ОписаниеТипов("Массив")); - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииРазделовДатЗапретаИзменения(Разделы); + ИнтеграцияПодсистемБСП.ПриЗаполненииРазделовДатЗапретаИзменения(Разделы); ДатыЗапретаИзмененияПереопределяемый.ПриЗаполненииРазделовДатЗапретаИзменения(Разделы); ЗаголовокОшибки = diff --git a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo index 3eb946108..78fe81ad4 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo @@ -64,6 +64,10 @@ ScheduledJob.ОчисткаНенужныхФайлов DontUse + + Catalog.ПрофилиКлючевыхОпераций + DontUse + Constant.ИспользоватьДополнительныеОтчетыИОбработки DontUse @@ -80,6 +84,10 @@ Constant.ПериодХраненияЗамеров DontUse + + InformationRegister.ЗамерыВремени + DontUse + Constant.НастройкаПроксиСервера DontUse @@ -373,7 +381,7 @@ DontUse - InformationRegister.ЗамерыВремени + InformationRegister.УдалитьЗамерыВремени3 DontUse @@ -620,6 +628,10 @@ ScheduledJob.ОтправкаИПолучениеСообщенийСистемы DontUse + + ScheduledJob.ПроверкаВеденияУчета + DontUse + ScheduledJob.УстановкаПериодаРассчитанныхИтогов DontUse diff --git a/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl b/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl index 464a3d56d..518f63941 100644 --- a/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl +++ b/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl @@ -17,8 +17,12 @@ СсылкаНаОбъект = ПараметрКоманды; КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ссылка", СсылкаНаОбъект); + ПараметрыФормы.Вставить("ТолькоПросмотр", ПараметрыВыполненияКоманды.Источник.ТолькоПросмотр); + ОткрытьФорму("РегистрСведений.ВерсииОбъектов.Форма.ВыборХранимыхВерсий", - Новый Структура("Ссылка", СсылкаНаОбъект), + ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); diff --git a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html index 0fdddba35..f9a462482 100644 --- a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html @@ -14,4 +14,4 @@

    Если информационна база расположена в кластере серверов, имеющем разветвленную структуру, то возможны ложные срабатывания при проверке перемещения информационной базы. Например, кластер состоит из двух физических серверов, имена компьютеров у которых "srv1" и "srv2", при этом платформа 1С:Предприятие позволяет прописывать имя сервера в строке подключения по-разному: по ip адресу или по буквенному обозначению. При этом имя информационной базы всегда остается неизменным, а имя сервера и имя компьютера может изменяться в зависимости от текущего севера и варианта записи в строке соединения. В этом случае рекомендуется в меню Еще снять флаг Проверять имя сервера, тогда проверка факта перемещения базы будет осуществляться только по имени информационной базы.

    См. также:

    \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl index 9b34849fe..3e8c49b08 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl @@ -283,6 +283,7 @@ // Родитель - ссылка на элемента дерева значений, который является корнем // для добавляемого элемента. // +&НаСервере Функция ПараметрыЭлементаДереваОбъектовМетаданных() СтруктураПараметров = Новый Структура; @@ -561,6 +562,7 @@ // Параметры: // Элемент - ДанныеФормыКоллекцияЭлементовДерева. // +&НаСервере Процедура НачальнаяПометкаКоллекций(Родитель) ВложенныеЭлементы = Родитель.ПолучитьЭлементы(); diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html index 1fe70be57..996b9b01d 100644 --- a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html +++ b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html @@ -1,7 +1,7 @@

    Предназначена для ввода пути к архиву с файлами начального образа (при хранении файлов в томах).

    Если для хранения файлов используются тома на диске, то вместе с созданием начального образа автоматически будет создан архив с файлами, хранящимися в томах.

    -

    Затем в процессе создания информационной базы подчиненного узла из начального образа в программе-приемнике следует получить файлы из этого архива. Для этого необходимо воспользоваться командой Разместить файлы начального образа в панели действий раздела Органайзер. В последующих итерациях синхронизации данных файлы в томах будут участвовать автоматически.

    +

    Затем в процессе создания информационной базы подчиненного узла из начального образа в программе-приемнике следует получить файлы из этого архива. Для этого необходимо воспользоваться командой Разместить файлы начального образа. В последующих итерациях синхронизации данных файлы в томах будут участвовать автоматически.

    В одном из полей укажите Путь к архиву с файлами начального образа: 

    • Для сервера 1С:Предприятия под управлением Microsoft Windows - укажите путь к архиву с помощью кнопки ;

    или

    • Для сервера 1С:Предприятия под управлением Linux - напишите путь к архиву.

    Нажмите Разместить.

    diff --git a/SSL/src/CommonForms/ВыборТиповПользователей/Module.bsl b/SSL/src/CommonForms/ВыборТиповПользователей/Module.bsl index 48bdb51c8..47b7d6f2d 100644 --- a/SSL/src/CommonForms/ВыборТиповПользователей/Module.bsl +++ b/SSL/src/CommonForms/ВыборТиповПользователей/Module.bsl @@ -20,13 +20,9 @@ Если ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда - Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл - - ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); - Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); - - ДобавитьСтрокуТипа(Значение, Тип, МассивПредставлений); - + ПустыеСсылки = ПользователиСлужебныйПовтИсп.ПустыеСсылкиТиповОбъектовАвторизации(); + Для Каждого ПустаяСсылка Из ПустыеСсылки Цикл + ДобавитьСтрокуТипа(ПустаяСсылка, ТипЗнч(ПустаяСсылка), МассивПредставлений); КонецЦикла; КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html b/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html index bcb615e32..ed92774eb 100644 --- a/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html @@ -2,5 +2,6 @@

    Предназначена для выбора формата вложений при отправке печатных форм по электронной почте.

    Вызывается по кнопке  Отправить по почте.

    • Укажите с помощью флажков, в каком формате (или нескольких форматах) нужно отправить документ. -
    • Для уменьшения размера вложений печатную форму перед отправкой рекомендуется упаковать в архив (формат .zip). +
    • Для уменьшения размера вложений печатную форму перед отправкой рекомендуется упаковать в архив (формат .zip). +
    • При необходимости включите флажок Транслитерировать имена файлов. В этом случае сохраненные файлы будут иметь имена, содержащие только латинские буквы и цифры, для возможности переноса между различными операционными системами. Например, файл Отчет.mxl будет сохранен с именем Otchet.mxl.
    • Нажмите кнопку Выбрать. Настройки будут сохранены.
    \ No newline at end of file diff --git a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html index c731e4d22..5a3f97105 100644 --- a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html +++ b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html @@ -1,6 +1,6 @@

    Предназначена для добавления электронной подписи из файла к элементам некоторых списков информационной базы. Эту возможность можно использовать, например, если подпись в виде файла была получена позже, чем подписанные данные.

    -

    Открывается из списка файлов (списка присоединенных файлов объекта), списка Присоединенные файлы  по команде  Электронная подпись и шифрование - Добавить электронную подпись из файла. Также можно найти эту команду в меню Еще карточки файла (карточки присоединенного файла).

    +

    Открывается из списка файлов (списка присоединенных файлов объекта), списка Присоединенные файлы  по кнопке  Электронная подпись и шифрование - Добавить электронную подпись из файла. Также можно найти эту команду в меню Еще карточки файла (карточки присоединенного файла).

    В списке выводится:

    • Файл электронной подписи - путь к файлу, содержащему электронную подпись.
    • Комментарий - сведения, которые поясняют добавляемую электронную подпись.

    Добавление электронной подписи из файла

    diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form index 10eae64e8..9abe07cb1 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form @@ -200,6 +200,7 @@ Right UserCmds Auto + InCommandBarAndInAdditionalSubmenu true true diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html index 675cfe2de..481591834 100644 --- a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html @@ -1,6 +1,6 @@

    Предназначена для ввода данных регистрации на сервисе склонений http://morpher.ru/.

    -

    Открывается по команде Настройка доступа к сервису склонения в разделе Администрирование - Общие настройки.

    +

    Открывается по команде Настройка доступа к сервису склонения в разделе Администрирование - Интернет-Поддержка и Сервисы.

    Анонимный вход

    • По умолчанию используется Анонимный вход, который обеспечивает базовые возможности использования сервиса. Анонимное использование сервиса склонений имеет ограничения.
    • Для того чтобы узнать об условиях доступа к сервису склонений и регистрации на сайте, перейдите по ссылке Подробнее.

    Вход для зарегистрированных пользователей

    diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl index 4072608ae..02f16735b 100644 --- a/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl +++ b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl @@ -99,7 +99,7 @@ Процедура КомандыПечатиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Если Поле.Имя = Элементы.КомандыПечатиКомментарий.Имя И Не ПустаяСтрока(Элементы.КомандыПечати.ТекущиеДанные.НавигационнаяСсылка) Тогда - ПерейтиПоНавигационнойСсылке(Элементы.КомандыПечати.ТекущиеДанные.НавигационнаяСсылка); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(Элементы.КомандыПечати.ТекущиеДанные.НавигационнаяСсылка); КонецЕсли; КонецПроцедуры @@ -266,7 +266,7 @@ КонецЕсли; КонецЦикла; - ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылка); КонецПроцедуры &НаКлиенте @@ -276,7 +276,7 @@ КонецЕсли; ДополнительныеПараметры.Форма.Закрыть(); - ПерейтиПоНавигационнойСсылке(ДополнительныеПараметры.НавигационнаяСсылка); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ДополнительныеПараметры.НавигационнаяСсылка); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Help/ru.html b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Help/ru.html index c04077066..a7958e79d 100644 --- a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Help/ru.html @@ -6,9 +6,9 @@ TD { }

    Предназначена для настройки кнопки запуска приложения для связи со специалистом онлайн-поддержки (1С-Коннект) на начальной странице. Настройки хранятся для каждого пользователя с привязкой к рабочему месту.

    -

    Открывается по команде Настройка онлайн-поддержки в разделе Администрирование - Общие настройки - Онлайн-поддержка.

    +

    Открывается по команде Настройка онлайн-поддержки в разделе Администрирование - Интернет-поддержка и сервисы - Онлайн-поддержка.

    Запуск одной и той же базы под веб-клиентом и тонким клиентом потребует две процедуры настройки.

    -

    На первом шаге предлагается скачать исполняемый файл с сайта компании. При нажатии на ссылку Скачать программу будет произведено скачивание программы в браузере, установленном по умолчанию. Полученный архив распакуйте в удобное для вас место.

    +

    На первом шаге предлагается скачать исполняемый файл с сайта компании. При нажатии на ссылку Скачать приложение будет произведено скачивание программы в браузере, установленном по умолчанию. Полученный архив распакуйте в удобное для вас место.

    Также необходимо получить регистрацию на сайте 1С-Коннект. Для этого воспользуйтесь ссылкой Зарегистрироваться в сервисе онлайн-поддержки (1С-Коннект). 

    На втором шаге задайте настройки:

    • Включите флажок Отображать кнопку запуска приложения для соединения со специалистом онлайн-поддержки на начальной странице - кнопка запуска будет выведена на начальную страницу.  diff --git a/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form b/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form index 93d2fe063..2717e5e64 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form @@ -259,6 +259,7 @@ true InputField + true Enter true Left @@ -269,6 +270,7 @@ true false true + true true true true @@ -369,6 +371,21 @@ true + + ОписаниеУслуги + + <key>ru</key> + <value>Описание услуги</value> + + 5 + + + true + + + true + + diff --git a/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html b/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html index 7a71c7017..e7b434d33 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html @@ -1,12 +1,13 @@ -

      Предназначена для настройки параметров отправки SMS.

      -

      Открывается по команде Настройка отправки SMS раздела Администрирование - Органайзер.

      +

      Предназначена для настройки параметров отправки SMS.

      +

      Открывается по команде Настройка отправки SMS раздела Администрирование - Органайзер - Отправка SMS.

      С помощью SMS можно организовать:

      • Информирование технических специалистов о неполадках баз данных 1С;
      • Автоматическое подтверждение совершенных клиентом платежей и других операций;
      • Информирование клиента о событиях: день рождения, дата очередного платежа и прочее;
      • Массовое оповещение клиентов о товарах, услугах, акциях и специальных предложениях.

      Для возможности отправки SMS необходимо заключить договор с провайдером на оказание соответствующей услуги. Подробности об услуге можно узнать на сайтах провайдеров:

      -

      В поле Провайдер необходимо выбрать поставщика услуги, с которым заключен договор.

      -

      При заключении договора получателю услуги предоставляются идентификационные данные: Логин и Пароль. Их необходимо указать в соответствующих полях.

      -

      В настройках отправки SMS можно указать Имя отправителя. В этом случае SMS будут приходить с указанного имени, а не с номера телефона отправителя.

      \ No newline at end of file +

      Настройка отправки SMS

      +
      • В поле Провайдер необходимо выбрать поставщика услуги, с которым заключен договор. +
      • Укажите Логин и Пароль. При заключении договора получателю услуги предоставляются идентификационные данные, напишите их в соответствующие поля. +
      • В настройках отправки SMS можно указать Имя отправителя. Поддерживается только латиница. В этом случае SMS будут приходить с указанного имени, а не с номера телефона отправителя.
      \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl b/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl index d5d562c08..c17753d7f 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl @@ -4,6 +4,10 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ПровайдерSMS"); УстановитьПривилегированныйРежим(Истина); НастройкиПровайдера = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "Пароль, Логин, ИмяОтправителя"); @@ -12,15 +16,10 @@ ИмяОтправителя = НастройкиПровайдера.ИмяОтправителя; ПарольДляОтправкиSMS = ?(ЗначениеЗаполнено(НастройкиПровайдера.Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); - Если НаборКонстант.ПровайдерSMS = Перечисления.ПровайдерыSMS.GSMINFORM Тогда - Элементы.ЛогинДляОтправкиSMS.Заголовок = НСтр("ru = 'ID кабинета'"); - Элементы.ПарольДляОтправкиSMS.Заголовок = НСтр("ru = 'API-ключ'"); - Элементы.ИмяОтправителя.АвтоОтметкаНезаполненного = Истина; - Иначе - Элементы.ЛогинДляОтправкиSMS.Заголовок = НСтр("ru = 'Логин'"); - Элементы.ПарольДляОтправкиSMS.Заголовок = НСтр("ru = 'Пароль'"); - Элементы.ИмяОтправителя.АвтоОтметкаНезаполненного = Ложь; - КонецЕсли; + ЗаполнитьОписаниеУслуги(); + + Элементы.ЛогинДляОтправкиSMS.Заголовок = ОписаниеУслуги.ПредставлениеЛогина; + Элементы.ПарольДляОтправкиSMS.Заголовок = ОписаниеУслуги.ПредставлениеПароля; КонецПроцедуры @@ -53,38 +52,30 @@ ЛогинДляОтправкиSMS = ""; ПарольДляОтправкиSMS = ""; ИмяОтправителя = ""; - - Если НаборКонстант.ПровайдерSMS = ПредопределенноеЗначение("Перечисление.ПровайдерыSMS.GSMINFORM") Тогда - Элементы.ЛогинДляОтправкиSMS.Заголовок = НСтр("ru = 'ID кабинета'"); - Элементы.ПарольДляОтправкиSMS.Заголовок = НСтр("ru = 'API-ключ'"); - Элементы.ИмяОтправителя.АвтоОтметкаНезаполненного = Истина; - Иначе - Элементы.ЛогинДляОтправкиSMS.Заголовок = НСтр("ru = 'Логин'"); - Элементы.ПарольДляОтправкиSMS.Заголовок = НСтр("ru = 'Пароль'"); - Элементы.ИмяОтправителя.АвтоОтметкаНезаполненного = Ложь; - КонецЕсли; + ЗаполнитьОписаниеУслуги(); + Элементы.ЛогинДляОтправкиSMS.Заголовок = ОписаниеУслуги.ПредставлениеЛогина; + Элементы.ПарольДляОтправкиSMS.Заголовок = ОписаниеУслуги.ПредставлениеПароля; КонецПроцедуры &НаКлиенте Процедура ОписаниеУслугиНажатие(Элемент) - Если НаборКонстант.ПровайдерSMS = ПредопределенноеЗначение("Перечисление.ПровайдерыSMS.Билайн") Тогда - ПерейтиПоНавигационнойСсылке("http://b2b.beeline.ru/msk/sb/mobile/services/index.wbp?id=3a15308a-7b14-4f8e-acda-0841dd6c750e"); - ИначеЕсли НаборКонстант.ПровайдерSMS = ПредопределенноеЗначение("Перечисление.ПровайдерыSMS.МТС") Тогда - ПерейтиПоНавигационнойСсылке("http://www.mtscommunicator.ru/service/"); - ИначеЕсли НаборКонстант.ПровайдерSMS = ПредопределенноеЗначение("Перечисление.ПровайдерыSMS.SMSRU") Тогда - ПерейтиПоНавигационнойСсылке("http://sms.ru"); - ИначеЕсли НаборКонстант.ПровайдерSMS = ПредопределенноеЗначение("Перечисление.ПровайдерыSMS.SMSЦЕНТР") Тогда - ПерейтиПоНавигационнойСсылке("http://smsc.ru"); - ИначеЕсли НаборКонстант.ПровайдерSMS = ПредопределенноеЗначение("Перечисление.ПровайдерыSMS.СМСУслуги") Тогда - ПерейтиПоНавигационнойСсылке("http://sms-uslugi.ru"); - ИначеЕсли НаборКонстант.ПровайдерSMS = ПредопределенноеЗначение("Перечисление.ПровайдерыSMS.GSMINFORM") Тогда - ПерейтиПоНавигационнойСсылке("http://gsm-inform.ru"); - Иначе - АдресВИнтернете = ""; - ОтправкаSMSКлиентПереопределяемый.ПриПолученииАдресаПровайдераВИнтернете(НаборКонстант.ПровайдерSMS, АдресВИнтернете); - Если Не ПустаяСтрока(АдресВИнтернете) Тогда - ПерейтиПоНавигационнойСсылке(АдресВИнтернете); - КонецЕсли; + АдресВИнтернете = ОписаниеУслуги.АдресВИнтернете; + ОтправкаSMSКлиентПереопределяемый.ПриПолученииАдресаПровайдераВИнтернете(НаборКонстант.ПровайдерSMS, АдресВИнтернете); + Если Не ПустаяСтрока(АдресВИнтернете) Тогда + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресВИнтернете); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьОписаниеУслуги() + ОписаниеУслуги = Новый Структура; + ОписаниеУслуги.Вставить("АдресВИнтернете", ""); + ОписаниеУслуги.Вставить("ПредставлениеЛогина", НСтр("ru = 'Логин'")); + ОписаниеУслуги.Вставить("ПредставлениеПароля", НСтр("ru = 'Пароль'")); + + МодульОтправкаSMSЧерезПровайдера = ОтправкаSMS.МодульОтправкаSMSЧерезПровайдера(НаборКонстант.ПровайдерSMS); + Если МодульОтправкаSMSЧерезПровайдера <> Неопределено Тогда + МодульОтправкаSMSЧерезПровайдера.ЗаполнитьОписаниеУслуги(ОписаниеУслуги); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl b/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl index 759e8bb40..2f09cdbda 100644 --- a/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl @@ -161,9 +161,7 @@ Если Не ЗначениеЗаполнено(ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда Настройки.ПросрочкаРаботыВПрограммеДатаВключения = '00010101'; - ИначеЕсли Не ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДатаВключения) - Или Не ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда - + ИначеЕсли Не ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДатаВключения) Тогда Настройки.ПросрочкаРаботыВПрограммеДатаВключения = НачалоДня(ТекущаяДатаСеанса()); КонецЕсли; diff --git a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl index 08f095b66..fccea2d0c 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl @@ -133,7 +133,7 @@ Процедура ОписаниеОбновленийВыбор(Элемент, Область, СтандартнаяОбработка) Если СтрНайти(Область.Текст, "http://") = 1 Или СтрНайти(Область.Текст, "https://") = 1 Тогда - ПерейтиПоНавигационнойСсылке(Область.Текст); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(Область.Текст); КонецЕсли; ОбновлениеИнформационнойБазыКлиентПереопределяемый.ПриНажатииНаГиперссылкуВДокументеОписанияОбновлений(Область); diff --git a/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html b/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html index 2a95400fa..c5d1422d5 100644 --- a/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html +++ b/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html @@ -4,9 +4,9 @@

      Для отправки SMS необходимо заключить договор с одним из операторов сотовой связи (МТС или Билайн), указав в настройках отправки SMS полученные регистрационные данные.

      Заполнение сообщения

      • Напишите Текст сообщения. Максимальная длина текста одного сообщения составляет 140 символов (160 символов в латинице или 70 символов в кириллице). Провайдеры могут поддерживать отправку "длинных SMS" (несколько склеенных между собой SMS). Максимальная длина таких SMS определяется оператором, например, Билайн - 480 символов (в латинице), МТС - 1000 символов (в латинице). Необходимо учитывать, что некоторые модели телефонов не умеют склеивать длинные SMS. -
      • Отправить в транслите - включите флажок, для того чтобы использовать эту возможность. +
      • Отправлять в транслите - включите флажок, для того чтобы использовать эту возможность.
      • В поле Длина сообщения, символов программа подсчитывает количество символов в набранном сообщении. -
      • Включите флажок, для того чтобы включать в сообщение Имя отправителя (заполните соответствующее поле).

      Проверка настроек отправки SMS

      +
    • Включите флажок, для того чтобы включать в сообщение Имя отправителя (заполните соответствующее поле, поддерживается только латиница).

    Проверка настроек отправки SMS

    • Нажмите Настройка отправки SMS, для того чтобы проверить правильность настроек.

    Отправка SMS

    • Если все настроено правильно, для отсылки сообщения нажмите Отправить. Программа сообщает о состоянии отправки.

    См. также:

    • diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index 37fb5a06e..d336a9c60 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -551,7 +551,7 @@ ПараметрыОткрытия.Вставить("ПутьКФайлу", ИмяВременногоФайла); ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия, ЭтотОбъект); Иначе - ЗапуститьПриложение(ИмяВременногоФайла); + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ИмяВременногоФайла); КонецЕсли; #КонецЕсли diff --git a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl index e45bf163e..fc872d44e 100644 --- a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl +++ b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl @@ -21,15 +21,7 @@ &НаКлиенте Процедура ОткрытьПапкуСФайлами(Команда) - НачатьЗапускПриложения(Новый ОписаниеОповещения("ОткрытьПапкуСФайламиЗавершение", ЭтотОбъект), ПапкаСФайлами); - -КонецПроцедуры - -// Завершение процедуры ОткрытьПапкуСФайлами. -&НаКлиенте -Процедура ОткрытьПапкуСФайламиЗавершение(КодВозврата, Контекст) Экспорт - - Возврат; + ОбщегоНазначенияКлиент.ОткрытьПроводник(ПапкаСФайлами); КонецПроцедуры diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 7b5542a90..973664e2f 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -1226,7 +1226,6 @@ Если ТолькоТекущийРаздел Тогда ПараметрыПоиска.Вставить("Подсистемы", МассивПодсистем); КонецЕсли; - ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index 66b55e484..bb93d79b1 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -1007,7 +1007,7 @@ ИмяВременногоФайла = ПолучитьИмяВременногоФайла(НастройкиФорматаСохранения.Расширение); ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.АдресВоВременномХранилище); ДвоичныеДанные.Записать(ИмяВременногоФайла); - ЗапуститьПриложение(ИмяВременногоФайла); + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ИмяВременногоФайла); #КонецЕсли КонецЦикла; diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form index f8583d0a8..102ba6dce 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form @@ -1555,6 +1555,23 @@ true + + ДоступностьТекущихОграничений + + <key>ru</key> + <value>Доступность текущих ограничений</value> + + 25 + + Boolean + + + true + + + true + + Записать diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index 5a18ae397..a451a33ea 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -15,6 +15,9 @@ Возврат; КонецЕсли; + ДоступностьТекущихОграничений = Истина; + РедактированиеТекущихОграничений = Истина; + Если Пользователи.ЭтоПолноправныйПользователь() Тогда // Просмотр и редактирование состава профилей и ограничений доступа. ОтборПрофилейТолькоТекущегоПользователя = Ложь; @@ -878,21 +881,24 @@ ТекущиеДанные = Профили.НайтиПоИдентификатору(?(Элементы.Профили.ТекущаяСтрока = Неопределено, -1, Элементы.Профили.ТекущаяСтрока)); #КонецЕсли - Форма.ТекущийПрофиль = Неопределено; - РедактированиеТекущихОграничений = Ложь; + ДоступностьТекущихОграниченийБыло = Форма.ДоступностьТекущихОграничений; + РедактированиеТекущихОграниченийБыло = Форма.РедактированиеТекущихОграничений; - Если ТекущиеДанные <> Неопределено Тогда + Если ТекущиеДанные = Неопределено Тогда + Форма.ТекущийПрофиль = Неопределено; + Форма.ДоступностьТекущихОграничений = Ложь; + Форма.РедактированиеТекущихОграничений = Ложь; + Иначе Форма.ТекущийПрофиль = ТекущиеДанные.Профиль; - РедактированиеТекущихОграничений = ТекущиеДанные.Пометка - И Форма.ТекущийПрофиль <> Форма.ПрофильАдминистратор - И НЕ Форма.ТолькоПросмотр; + Форма.ДоступностьТекущихОграничений = ТекущиеДанные.Пометка; + Форма.РедактированиеТекущихОграничений = ТекущиеДанные.Пометка + И Форма.ТекущийПрофиль <> Форма.ПрофильАдминистратор + И Не Форма.ТолькоПросмотр; КонецЕсли; - Элементы.Доступ.Доступность = ТекущиеДанные <> Неопределено И ТекущиеДанные.Пометка; - Элементы.ВидыДоступа.ТолькоПросмотр = НЕ РедактированиеТекущихОграничений; - Элементы.ЗначенияДоступаПоВидуДоступа.Доступность = ТекущиеДанные <> Неопределено И ТекущиеДанные.Пометка; - Элементы.ЗначенияДоступа.ТолькоПросмотр = НЕ РедактированиеТекущихОграничений; - Элементы.ВидыДоступаКонтекстноеМенюИзменить.Доступность = РедактированиеТекущихОграничений; + ТребуетсяОбновитьОтображениеТекущихОграничений = + ДоступностьТекущихОграниченийБыло <> Форма.ДоступностьТекущихОграничений + Или РедактированиеТекущихОграниченийБыло <> Форма.РедактированиеТекущихОграничений; Если Форма.ТекущийПрофиль = Неопределено Тогда Форма.ТекущаяГруппаДоступа = ""; @@ -919,6 +925,34 @@ КонецЕсли; КонецЕсли; + Если ТребуетсяОбновитьОтображениеТекущихОграничений Тогда + #Если Клиент Тогда + Форма.ПодключитьОбработчикОжидания("ОбновитьОтображениеТекущихОграниченийОбработчикОжидания", 0.1, Истина); + #Иначе + ОбновитьОтображениеТекущихОграничений(Форма); + #КонецЕсли + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОтображениеТекущихОграниченийОбработчикОжидания() + + ОбновитьОтображениеТекущихОграничений(ЭтотОбъект); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьОтображениеТекущихОграничений(Форма) + + Элементы = Форма.Элементы; + + Элементы.Доступ.Доступность = Форма.ДоступностьТекущихОграничений; + Элементы.ВидыДоступа.ТолькоПросмотр = НЕ Форма.РедактированиеТекущихОграничений; + Элементы.ЗначенияДоступаПоВидуДоступа.Доступность = Форма.ДоступностьТекущихОграничений; + Элементы.ЗначенияДоступа.ТолькоПросмотр = НЕ Форма.РедактированиеТекущихОграничений; + Элементы.ВидыДоступаКонтекстноеМенюИзменить.Доступность = Форма.РедактированиеТекущихОграничений; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/Расширения/Module.bsl b/SSL/src/CommonForms/Расширения/Module.bsl index 4ce2fb9ab..5f7c060a3 100644 --- a/SSL/src/CommonForms/Расширения/Module.bsl +++ b/SSL/src/CommonForms/Расширения/Module.bsl @@ -490,8 +490,8 @@ КонецЕсли; ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось удалить по причине: | @@ -644,19 +644,20 @@ Контекст.Вставить("ПомещенныеФайлы", ПомещенныеФайлы); - ЗапросыРазрешений = Новый Массив; - Попытка - ДобавитьЗапросРазрешений(ЗапросыРазрешений, ПомещенныеФайлы, Контекст.ИдентификаторРасширения); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - Возврат; - КонецПопытки; - ОповещениеОЗакрытии = Новый ОписаниеОповещения( "ЗагрузитьРасширениеПродолжение", ЭтотОбъект, Контекст); - + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + + ЗапросыРазрешений = Новый Массив; + Попытка + ДобавитьЗапросРазрешений(ЗапросыРазрешений, ПомещенныеФайлы, Контекст.ИдентификаторРасширения); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат; + КонецПопытки; + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( ЗапросыРазрешений, ЭтотОбъект, ОповещениеОЗакрытии); @@ -800,8 +801,8 @@ КонецЦикла; ЗафиксироватьТранзакцию(); Исключение - ТекущаяИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); + ТекущаяИнформацияОбОшибке = ИнформацияОбОшибке(); Если ИдентификаторРасширения <> Неопределено Тогда ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При попытке восстановить измененное расширение произошла еще одна ошибка: @@ -911,25 +912,13 @@ ПараметрыПроцедуры = Новый Массив; ПараметрыПроцедуры.Добавить(ПараметрыВыполнения); - Попытка - ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных( - "СтандартныеПодсистемыСервер.ЗаполнитьВсеПараметрыРаботыРасширенийФоновоеЗадание", ПараметрыПроцедуры); - Попытка - ФоновоеЗадание.ОжидатьЗавершения(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - Отбор = Новый Структура("УникальныйИдентификатор", ФоновоеЗадание.УникальныйИдентификатор); - ФоновоеЗадание = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор)[0]; - Если ИнформацияОбОшибке = Неопределено Тогда - ИнформацияОбОшибке = ФоновоеЗадание.ИнформацияОбОшибке; - КонецЕсли; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - - Если ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных( + "СтандартныеПодсистемыСервер.ЗаполнитьВсеПараметрыРаботыРасширенийФоновоеЗадание", ПараметрыПроцедуры); + ФоновоеЗадание.ОжидатьЗавершения(); + Отбор = Новый Структура("УникальныйИдентификатор", ФоновоеЗадание.УникальныйИдентификатор); + ФоновоеЗадание = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор)[0]; + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); КонецЕсли; Результат = ПолучитьИзВременногоХранилища(ПараметрыВыполнения.АдресРезультата); diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index 6b52fcd35..aa1cbed77 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -4,6 +4,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -200,6 +202,7 @@ НоваяСтрока = ТаблицаЗначенийСвойств.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); + НоваяСтрока.НомерКартинки = ?(Строка.Удалено, 0, -1); Если Строка.Значение = Неопределено @@ -296,4 +299,37 @@ КонецФункции +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаЗначенийСвойствЗначение.Имя); + + // Формат даты - время. + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЗначенийСвойств.ТипЗначения"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.Время)); + Элемент.Оформление.УстановитьЗначениеПараметра("Формат", "ДЛФ=T"); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаЗначенийСвойствЗначение.Имя); + + // Формат даты - дата. + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЗначенийСвойств.ТипЗначения"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.Дата)); + Элемент.Оформление.УстановитьЗначениеПараметра("Формат", "ДЛФ=D"); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form index 9dd215cfb..b38790c63 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form @@ -1730,6 +1730,11 @@ <stringQualifiers/> </valueType> </parameters> + <parameters> + <name>ПрисоединенныйФайл</name> + <valueType/> + <keyParameter>true</keyParameter> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl index ee93636b4..b62cd21c3 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -366,6 +366,15 @@ Модифицированность = Ложь; УстановитьЗаголовок(); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + Если ЗначениеЗаполнено(Параметры.ПрисоединенныйФайл) Тогда + МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент"); + ПараметрыОбновленияФайла = МодульРаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(ОбработчикЗавершения, Параметры.ПрисоединенныйФайл, УникальныйИдентификатор); + МодульРаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); + Возврат; + КонецЕсли; + КонецЕсли; + ВыполнитьОбработкуОповещения(ОбработчикЗавершения, Истина); КонецПроцедуры diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html b/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html index 70b7e47a7..a723831f7 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html +++ b/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Предназначено для настройки синхронизации данных и хранения существующих настроек синхронизации данных. </p> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Окно <strong>Настройки синхронизации данных</strong> можно найти на <strong>Рабочем столе</strong> программы или открыть в разделе <strong>Администрирование - Синхронизация данных</strong> по соответствующей команде. Если настроек синхронизации еще нет или существует только одна настройка, то окно приобретает вид панели. В этом случае меню <strong>Еще</strong> скрыто и все необходимые команды и поля выведены на панель. Окно принимает вид списка, если настроек синхронизации две и более.</p> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"> В окне выводится:</p> diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl index 26582a506..c055454e3 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl @@ -553,8 +553,13 @@ Элементы.СтраницаРасписание.Картинка = ?(НастроеннаяСинхронизация.РасписаниеНастроено, БиблиотекаКартинок.РегламентноеЗадание, Новый Картинка); + + ВариантНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(НастроеннаяСинхронизация.УзелИнформационнойБазы); - Заголовок = ОбменДаннымиСервер.ПереопределяемоеИмяУзлаПланаОбмена(НастроеннаяСинхронизация.УзелИнформационнойБазы, "ЗаголовокУзлаПланаОбмена"); + Заголовок = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена( + НастроеннаяСинхронизация.УзелИнформационнойБазы.Метаданные().Имя, + "ЗаголовокУзлаПланаОбмена", + ВариантНастройки); ЕстьПравоНаПросмотрЖурналаРегистрации = Пользователи.РолиДоступны("ПросмотрЖурналаРегистрации"); @@ -659,8 +664,6 @@ &НаСервере Процедура ДобавитьКомандыСозданияНовогоОбмена() - ЕстьПравоНаАдминистрированиеДанных = ПравоДоступа("АдминистрированиеДанных", Метаданные); - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); Для Каждого Элемент Из СписокПлановОбмена Цикл @@ -674,81 +677,69 @@ Продолжить; КонецЕсли; - ЭтоПланОбменаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена); + Если Не ОбменДаннымиПовтИсп.ДоступноИспользованиеПланаОбмена(ИмяПланаОбмена) Тогда + Продолжить; + КонецЕсли; - Если Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза Тогда + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Тогда РодительскаяГруппа = Элементы.ПодменюРИБ; Иначе РодительскаяГруппа = Элементы.ПодменюДругиеПрограммы; КонецЕсли; - Если МенеджерПланаОбмена.ИспользоватьПомощникСозданияОбменаДанными() - И ОбменДаннымиПовтИсп.ДоступноИспользованиеПланаОбмена(ИмяПланаОбмена) Тогда + ЗначенияНастроекПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "ВариантыНастроекОбмена, ВидГруппыДляВариантовНастроек"); + ВозможныеНастройкиОбмена = ЗначенияНастроекПланаОбмена.ВариантыНастроекОбмена; + ВидГруппыДляВариантовНастроек = ЗначенияНастроекПланаОбмена.ВидГруппыДляВариантовНастроек; - СписокВозможныхНастроекОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВариантыНастроекОбмена"); - - Если СписокВозможныхНастроекОбмена.Количество() > 0 Тогда - - СуммирующаяГруппа = РодительскаяГруппа; - - Если СписокВозможныхНастроекОбмена.Количество() > 1 Тогда - - ВидГруппыКнопок = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВидГруппыДляВариантовНастроек"); - // Не прячем варианты обмена в подменю, если план обмена один. - Если СписокПлановОбмена.Количество() = 1 Тогда - ВидГруппыКнопок = ВидГруппыФормы.ГруппаКнопок; - КонецЕсли; - - СуммирующаяГруппа = Элементы.Добавить(ИмяПланаОбмена, Тип("ГруппаФормы"), РодительскаяГруппа); - - СуммирующаяГруппа.Вид = ВидГруппыКнопок; - СуммирующаяГруппа.Заголовок = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "НаименованиеКонфигурацииКорреспондента"); - - КонецЕсли; - - Для Каждого ПредопределеннаяНастройка Из СписокВозможныхНастроекОбмена Цикл - - НаименованиеКоманды = ИмяПланаОбмена + "ИдентификаторНастройки" + ПредопределеннаяНастройка; - ЗаголовокКоманды = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "ЗаголовокКомандыДляСозданияНовогоОбменаДанными", - ПредопределеннаяНастройка); - - СоздатьКомандуИЭлементФормы(НаименованиеКоманды, ЗаголовокКоманды, СуммирующаяГруппа); - - КонецЦикла; - - Если МенеджерПланаОбмена.КорреспондентВМоделиСервиса() Тогда - - Для Каждого ПредопределеннаяНастройка Из СписокВозможныхНастроекОбмена Цикл - - НаименованиеКоманды = ИмяПланаОбмена + "ИдентификаторНастройки" + ПредопределеннаяНастройка + "КорреспондентВМоделиСервиса"; - ЗаголовокКоманды = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "ЗаголовокКомандыДляСозданияНовогоОбменаДанными", - ПредопределеннаяНастройка); - - СоздатьКомандуИЭлементФормы(НаименованиеКоманды, ЗаголовокКоманды + " " + НСтр("ru = '(в сервисе)'"), СуммирующаяГруппа); - - КонецЦикла; - - КонецЕсли; - - Иначе - - НаименованиеКоманды = ИмяПланаОбмена + "ИдентификаторНастройки"; - ЗаголовокКоманды = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "ЗаголовокКомандыДляСозданияНовогоОбменаДанными"); - СоздатьКомандуИЭлементФормы(НаименованиеКоманды, ЗаголовокКоманды, РодительскаяГруппа); - - Если МенеджерПланаОбмена.КорреспондентВМоделиСервиса() Тогда - СоздатьКомандуИЭлементФормы(НаименованиеКоманды + "КорреспондентВМоделиСервиса", - ЗаголовокКоманды + " " + НСтр("ru = '(в сервисе)'"), - РодительскаяГруппа); - КонецЕсли; - + СуммирующаяГруппа = РодительскаяГруппа; + + СуммирующаяГруппаДобавлена = Ложь; + + Для Каждого ВариантНастройки Из ВозможныеНастройкиОбмена Цикл + ПредопределеннаяНастройка = ВариантНастройки.ИдентификаторНастройки; + ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "ИспользоватьПомощникСозданияОбменаДанными, + |ЗаголовокКомандыДляСозданияНовогоОбменаДанными, + |НаименованиеКонфигурацииКорреспондента", + ПредопределеннаяНастройка); + Если Не ЗначенияНастроекДляВарианта.ИспользоватьПомощникСозданияОбменаДанными Тогда + Продолжить; КонецЕсли; - КонецЕсли; - + Если Не СуммирующаяГруппаДобавлена И ВозможныеНастройкиОбмена.Количество() > 1 Тогда + ВидГруппыКнопок = ВидГруппыДляВариантовНастроек; + // Не прячем варианты обмена в подменю, если план обмена один. + Если СписокПлановОбмена.Количество() = 1 Тогда + ВидГруппыКнопок = ВидГруппыФормы.ГруппаКнопок; + КонецЕсли; + + СуммирующаяГруппа = Элементы.Добавить(ИмяПланаОбмена, Тип("ГруппаФормы"), РодительскаяГруппа); + + СуммирующаяГруппа.Вид = ВидГруппыКнопок; + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + СуммирующаяГруппа.Заголовок = НСтр("ru = 'Через универсальный формат обмена'"); + Иначе + СуммирующаяГруппа.Заголовок = ЗначенияНастроекДляВарианта.НаименованиеКонфигурацииКорреспондента; + КонецЕсли; + + СуммирующаяГруппаДобавлена = Истина; + КонецЕсли; + + Если ВариантНастройки.КорреспондентВЛокальномРежиме Тогда + НаименованиеКоманды = ИмяПланаОбмена + "ИдентификаторНастройки" + ПредопределеннаяНастройка; + ЗаголовокКоманды = ЗначенияНастроекДляВарианта.ЗаголовокКомандыДляСозданияНовогоОбменаДанными; + СоздатьКомандуИЭлементФормы(НаименованиеКоманды, ЗаголовокКоманды, СуммирующаяГруппа); + КонецЕсли; + + Если ВариантНастройки.КорреспондентВМоделиСервиса Тогда + НаименованиеКоманды = ИмяПланаОбмена + "ИдентификаторНастройки" + ПредопределеннаяНастройка + "КорреспондентВМоделиСервиса"; + ЗаголовокКоманды = ЗначенияНастроекДляВарианта.ЗаголовокКомандыДляСозданияНовогоОбменаДанными + + " " + НСтр("ru = '(в сервисе)'"); + + СоздатьКомандуИЭлементФормы(НаименованиеКоманды, ЗаголовокКоманды, СуммирующаяГруппа); + КонецЕсли; + КонецЦикла; КонецЦикла; КонецПроцедуры @@ -901,10 +892,13 @@ &НаСервере Функция ПодробнаяИнформацияНаСервере(УзелОбмена) - МенеджерПланаОбмена = ПланыОбмена[УзелОбмена.Метаданные().Имя]; + ИмяПланаОбмена = УзелОбмена.Метаданные().Имя; ВариантНастройкиОбмена = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(УзелОбмена); - СсылкаНаПодробноеОписание = МенеджерПланаОбмена.ПодробнаяИнформацияПоОбмену(ВариантНастройкиОбмена); + ВерсияКорреспондента = ОбменДаннымиСервер.ВерсияКорреспондента(УзелОбмена); + + СсылкаНаПодробноеОписание = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена( + ИмяПланаОбмена, "ПодробнаяИнформацияПоОбмену", ВариантНастройкиОбмена, ВерсияКорреспондента); Возврат СсылкаНаПодробноеОписание; diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html index cf6356ff4..fba73dc0c 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html @@ -46,7 +46,7 @@ <ul><ul><li> <div style="MARGIN-RIGHT: 0px"><strong>Для сервера 1С:Предприятия под управлением Linux - </strong>напишите путь к папке, в которой будет размещен архив с файлами томов.<strong> </strong></div></li></ul></ul><p style="MARGIN-RIGHT: 0px" dir="ltr">Для продолжения нажмите <strong>Создать начальный образ</strong>.</p> <p style="MARGIN-RIGHT: 0px" dir="ltr">Через некоторое время программа выводит сообщение об успешном создании начального образа подчиненного узла распределенной информационной базы. Нажмите <strong>ОК</strong> для возвращения в программу.</p> -<p style="MARGIN-RIGHT: 0px" dir="ltr">Для того чтобы загрузить файлы в томах в базе филиала, при первом запуске необходимо выполнить команду <strong>Разместить файлы начального образа </strong>панели действий в разделе <strong>Органайзер</strong>, <a href="CommonForm.ВыборПутиКАрхивуФайловТомов/Help">указав путь к файлу архива</a> с файлами в томах.</p> +<p style="MARGIN-RIGHT: 0px" dir="ltr">Для того чтобы загрузить файлы в томах в базе филиала, при первом запуске необходимо выполнить команду <strong>Разместить файлы начального образа</strong>, <a href="CommonForm.ВыборПутиКАрхивуФайловТомов/Help">указав путь к файлу архива</a> с файлами в томах.</p> <h3 style="MARGIN-RIGHT: 0px" dir="ltr">См. также:</h3> <ul dir="ltr"><li> <div style="MARGIN-RIGHT: 0px"><a href="Catalog.Файлы/Help">Общая информация о файлах</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl index 5a80c1db4..c0207d34b 100644 --- a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl +++ b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl @@ -110,40 +110,15 @@ НоваяСтрока.АдресПодписи = ПоместитьВоВременноеХранилище( ВсеСвойстваПодписи.Подпись, УникальныйИдентификатор); - - ДанныеСертификата = ВсеСвойстваПодписи.Сертификат.Получить(); - Если ТипЗнч(ДанныеСертификата) = Тип("Строка") Тогда - НоваяСтрока.РасширениеСертификата = "txt"; - НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище( - ДвоичныеДанныеСтроки(ДанныеСертификата), УникальныйИдентификатор); - Иначе - НоваяСтрока.РасширениеСертификата = "cer"; - НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище( - ДанныеСертификата, УникальныйИдентификатор); - КонецЕсли; + ДанныеПоСертификату = ЭлектроннаяПодписьСлужебный.ДанныеПоСертификату(ВсеСвойстваПодписи, УникальныйИдентификатор); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеПоСертификату); + НоваяСтрока.Пометка = Истина; КонецЦикла; КонецПроцедуры -&НаСервере -Функция ДвоичныеДанныеСтроки(ДанныеСтроки) - - ВременныйФайл = ПолучитьИмяВременногоФайла(); - - ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл, КодировкаТекста.UTF8); - ЗаписьТекста.Записать(ДанныеСтроки); - ЗаписьТекста.Закрыть(); - - ДвоичныеДанныеСертификата = Новый ДвоичныеДанные(ВременныйФайл); - - УдалитьФайлы(ВременныйФайл); - - Возврат ДвоичныеДанныеСертификата; - -КонецФункции - &НаСервереБезКонтекста Процедура СохранитьНастройки(БольшеНеСпрашивать, СохранятьСертификатВместеСПодписью) diff --git a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl index 1313b7fe0..a89262a36 100644 --- a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl +++ b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl @@ -9,8 +9,8 @@ КонецЕсли; ТабличныеДокументыДляСравнения = ПолучитьИзВременногоХранилища(Параметры.АдресТабличныхДокументов); - ТабличныйДокументЛевый = ТабличныеДокументыДляСравнения.Левый; - ТабличныйДокументПравый = ТабличныеДокументыДляСравнения.Правый; + ПрочитатьТабличныйДокументИзХранилища(ТабличныеДокументыДляСравнения.Левый, ТабличныйДокументЛевый); + ПрочитатьТабличныйДокументИзХранилища(ТабличныеДокументыДляСравнения.Правый, ТабличныйДокументПравый); Элементы.ГруппаЛевыйТабличныйДокумент.Заголовок = Параметры.ЗаголовокЛевый; Элементы.ГруппаПравыйТабличныйДокумент.Заголовок = Параметры.ЗаголовокПравый; @@ -579,4 +579,13 @@ КонецПроцедуры +&НаСервере +Функция ПрочитатьТабличныйДокументИзХранилища(ДокументВХранилище, Документ) + ВременныйФайл = ПолучитьИмяВременногоФайла("mxl"); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДокументВХранилище); + ДвоичныеДанные.Записать(ВременныйФайл); + Документ.Прочитать(ВременныйФайл); + УдалитьФайлы(ВременныйФайл); +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html b/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html index 9801af686..1ae51955d 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html @@ -1,10 +1,10 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> -<p>Предназначен для вывода родительских и подчиненных документов. </p> -<p>Формируется командой <strong>Связанные документы</strong> на панели навигации документа.</p> -<p>Отчет предоставляет оперативный и наглядный доступ ко всей цепочке взаимосвязанных с точки зрения бизнес-логики документов. Документы считаются взаимосвязанными, если один документ ссылается на другой. В программе взаимосвязь документов выглядит так: в одном документе (назовем его дочерним) в качестве какого-либо реквизита указан другой документ (назовем его родительским). Отчет позволяет из какого-либо одного документа увидеть всю цепочку взаимосвязанных с ним документов.</p> -<p>В отчет попадают все дочерние и все родительские документы текущего документа. В наглядной форме представлена взаимосвязь этих документов.</p> -<p>Документ, для которого сформирован отчет, отображается жирным шрифтом. Дерево родительских документов строится вверх-вправо от документа, для которого формируется отчет. Дерево дочерних документов строится вниз-вправо от документа, для которого формируется отчет.</p> +<p>Предназначен для вывода родительских и подчиненных объектов программы. </p> +<p>Формируется командой <strong>Связанные документы</strong> на панели навигации объектов программы.</p> +<p>Отчет предоставляет оперативный и наглядный доступ ко всей цепочке взаимосвязанных с точки зрения бизнес-логики документов и списков. Объекты программы считаются взаимосвязанными, если один объект ссылается на другой. В программе взаимосвязь объектов выглядит так: в одном объекте программы (назовем его дочерним) в качестве какого-либо реквизита указан другой объект (назовем его родительским). Отчет позволяет из какого-либо одного объекта программы увидеть всю цепочку взаимосвязанных с ним объектов.</p> +<p>В отчет попадают все дочерние и все родительские объекты текущего объекта программы. В наглядной форме представлена взаимосвязь этих объектов.</p> +<p>Объект программы, для которого сформирован отчет, отображается жирным шрифтом. Дерево родительских объектов строится вверх-вправо от объекта, для которого формируется отчет. Дерево дочерних объектов строится вниз-вправо от объекта, для которого формируется отчет.</p> <h3>Доступные действия</h3> -<ul><li>С помощью двойного щелчка мышью на любом выведенном в отчет документе можно открыть данный документ для просмотра. +<ul><li>С помощью двойного щелчка мышью на любом выведенном в отчет объекте можно открыть данный объект для просмотра. </li><li>С помощью кнопки <strong>Обновить</strong> можно переформировать отчет. -</li><li>С помощью кнопки <strong>Вывести для текущего</strong><strong> </strong>можно сформировать отчет <strong>Связанные документы </strong>для выделенного документа.</li></ul></body></html> \ No newline at end of file +</li><li>С помощью кнопки <strong>Вывести для текущего</strong><strong> </strong>можно сформировать отчет <strong>Связанные документы </strong>для выделенного объекта.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl index 79c8e2c84..592bb68a5 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -611,6 +611,7 @@ // Возвращаемое значение: // Булево - Истина если найден, Ложь в обратном случае. // +&НаСервере Функция ДобавляемыйОбъектИмеетсяСредиРодителей(СтрокаРодитель,ИскомыйОбъект) Если ИскомыйОбъект = ОбъектСсылка Тогда @@ -848,6 +849,7 @@ КонецПроцедуры +&НаСервере Функция ИмяРеквизитаДокумента(ИмяОбъекта, Реквизит) ИмяРеквизитаДокумента = СтруктураПодчиненностиПереопределяемый.ИмяРеквизитаДокумента(ИмяОбъекта, Реквизит); diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index b2162e4aa..d3e17697d 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -752,7 +752,6 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(МетаданныеВходящееПисьмо.ПолноеИмя()); ЭлементБлокировки.УстановитьЗначение("Ссылка", МассивВходящихПисем); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); КонецЕсли; @@ -762,7 +761,6 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(МетаданныеИсходящееПисьмо.ПолноеИмя()); ЭлементБлокировки.УстановитьЗначение("Ссылка", МассивИсходящихПисем); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); КонецЕсли; @@ -795,6 +793,9 @@ ЗафиксироватьТранзакцию(); Исключение + + ОтменитьТранзакцию(); + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), @@ -804,8 +805,6 @@ УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); - ОтменитьТранзакцию(); - Продолжить; КонецПопытки; diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form index e561cee93..4164961e1 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form @@ -10059,7 +10059,7 @@ <id>17</id> <toolTip> <key>ru</key> - <value>Структура варианта переместить выше и левее</value> + <value>Переместить выше и левее</value> </toolTip> <use> <common>true</common> @@ -10085,7 +10085,7 @@ <id>18</id> <toolTip> <key>ru</key> - <value>Структура варианта переместить ниже и правее</value> + <value>Переместить ниже и правее</value> </toolTip> <use> <common>true</common> @@ -10645,7 +10645,7 @@ <id>39</id> <toolTip> <key>ru</key> - <value>Структура варианта сохранить в файл</value> + <value>Сохранить в файл</value> </toolTip> <use> <common>true</common> diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index b7ff05083..39cc7cac1 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -458,6 +458,11 @@ Если ТекущаяСтрока = Неопределено Тогда Возврат; КонецЕсли; + + Если НоваяСтрока Тогда + ЭлементСпискаВФорме.Пометка = Истина; + КонецЕсли; + ЭлементСпискаДоНачалаИзменения = Новый Структура("Идентификатор, Пометка, Значение, Представление"); ЗаполнитьЗначенияСвойств(ЭлементСпискаДоНачалаИзменения, ЭлементСпискаВФорме); ЭлементСпискаДоНачалаИзменения.Идентификатор = СтрокаИдентификатор; @@ -3032,11 +3037,11 @@ &НаКлиенте Процедура ОтборыЗавершениеВыбораСсылки(СсылкаИлиЭлементСписка, Контекст) Экспорт Если ТипЗнч(СсылкаИлиЭлементСписка) = Тип("ЭлементСпискаЗначений") Тогда - Ссылка = СсылкаИлиЭлементСписка.Значение; + НовоеЗначение = СсылкаИлиЭлементСписка.Значение; Иначе - Ссылка = СсылкаИлиЭлементСписка; + НовоеЗначение = СсылкаИлиЭлементСписка; КонецЕсли; - Если Не Контекст.ПараметрыВыбора.ОписаниеТипов.СодержитТип(ТипЗнч(Ссылка)) Или Не ЗначениеЗаполнено(Ссылка) Тогда + Если Не Контекст.ПараметрыВыбора.ОписаниеТипов.СодержитТип(ТипЗнч(НовоеЗначение)) Или Не ЗначениеЗаполнено(НовоеЗначение) Тогда Возврат; КонецЕсли; @@ -3051,13 +3056,7 @@ Возврат; КонецЕсли; - СтрокаТаблицы.Значение = Ссылка; - - Если СтрокаТаблицы.ЭтоПараметр Тогда - ЭлементКД.Значение = Ссылка; - Иначе - ЭлементКД.ПравоеЗначение = Ссылка; - КонецЕсли; + УстановитьЗначение(СтрокаТаблицы, УзелКД, ЭлементКД, НовоеЗначение); ПользовательскиеНастройкиМодифицированы = Истина; Если РасширенныйРежим = 1 Тогда @@ -3065,6 +3064,32 @@ КонецЕсли; КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьЗначение(СтрокаТаблицы, УзелКД, ЭлементКД, НовоеЗначение) + Если СтрокаТаблицы.ЭтоПараметр Тогда + Если ТипЗнч(УзелКД) = Тип("ДоступныйПараметрКомпоновкиДанных") Тогда + ДоступныйЭлементСКД = УзелКД; + Иначе + ДоступныйЭлементСКД = УзелКД.ДоступныеПараметры.НайтиПараметр(ЭлементКД.Параметр); + КонецЕсли; + ФорматРедактирования = ДоступныйЭлементСКД.ФорматРедактирования; + ЭлементКД.Значение = НовоеЗначение; + Иначе + Если ТипЗнч(УзелКД) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") Тогда + ДоступныйЭлементСКД = УзелКД; + Иначе + ДоступныйЭлементСКД = УзелКД.ДоступныеПоляОтбора.НайтиПоле(ЭлементКД.ЛевоеЗначение); + КонецЕсли; + ФорматРедактирования = ДоступныйЭлементСКД.ФорматРедактирования; + ЭлементКД.ПравоеЗначение = НовоеЗначение; + КонецЕсли; + Если Не ПустаяСтрока(ФорматРедактирования) Тогда + СтрокаТаблицы.Значение = Формат(НовоеЗначение, ФорматРедактирования); + Иначе + СтрокаТаблицы.Значение = НовоеЗначение; + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ОтборыПоказатьСписокСФлажками(СтрокаТаблицы) ПараметрыВыбора = ПараметрыВыбораОтбора(СтрокаТаблицы); @@ -3946,11 +3971,7 @@ Возврат; КонецЕсли; - Если СтрокаТаблицы.ЭтоПараметр Тогда - ЭлементКД.Значение = СтрокаТаблицы.Значение; - Иначе - ЭлементКД.ПравоеЗначение = СтрокаТаблицы.Значение; - КонецЕсли; + УстановитьЗначение(СтрокаТаблицы, УзелКД, ЭлементКД, СтрокаТаблицы.Значение); ПользовательскиеНастройкиМодифицированы = Истина; Если РасширенныйРежим = 1 Тогда @@ -6026,24 +6047,25 @@ ДоступнаяНастройкаКД = НастройкаВарианта.ДоступнаяНастройкаКД; ЭлементКД = НастройкаВарианта.ЭлементКД; - Если ЗначениеЗаполнено(НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок) Тогда - Представление = НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок; + Если ЗначениеЗаполнено(ДоступнаяНастройкаКД.Заголовок) Тогда + Представление = ДоступнаяНастройкаКД.Заголовок; Иначе Представление = Строка(ЭлементКД.Параметр); КонецЕсли; СтрокаТаблицы = НаборСтрок.Добавить(); СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Значение = НастройкаВарианта.Значение; СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; СтрокаТаблицы.Представление = Представление; СтрокаТаблицы.ЭтоПараметр = Истина; СтрокаТаблицы.ИндексКартинки = -1; - СтрокаТаблицы.ТипЗначения = НастройкаВарианта.ДоступнаяНастройкаКД.ТипЗначения; + СтрокаТаблицы.ТипЗначения = ДоступнаяНастройкаКД.ТипЗначения; СтрокаТаблицы.ВводСписком = НастройкаВарианта.ВводСписком; СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; + УстановитьЗначение(СтрокаТаблицы, ДоступнаяНастройкаКД, ЭлементКД, НастройкаВарианта.Значение); + Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда Если СтрокаТаблицы.ВводСписком Тогда @@ -6166,7 +6188,7 @@ Если ЭтоГруппа Тогда ЗарегистрироватьЭлементыОтборов(Информация, НастройкаВарианта.Строки, СтрокаТаблицы.ПолучитьЭлементы()); Иначе - СтрокаТаблицы.Значение = НастройкаВарианта.Значение; + УстановитьЗначение(СтрокаТаблицы, НастройкаВарианта.ДоступнаяНастройкаКД, ЭлементКД, НастройкаВарианта.Значение); Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда Если СтрокаТаблицы.ВводСписком Тогда diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl index 703288985..b8d3115b7 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -114,7 +114,8 @@ КонецЕсли; // Скрытие команд вариантов. - ВидимостьКомандВариантовОтчетов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВидимостьКомандВариантовОтчетов"); + ВидимостьКомандВариантовОтчетов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВидимостьКомандВариантовОтчетов"); + Если ВидимостьКомандВариантовОтчетов = Ложь Тогда НастройкиОтчета.РазрешеноИзменятьВарианты = Ложь; НастройкиОтчета.РазрешеноВыбиратьВарианты = Ложь; @@ -127,6 +128,18 @@ НастройкиОтчета.РазрешеноИзменятьВарианты = Ложь; КонецЕсли; + РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "РазрешеноВыбиратьИНастраиватьВариантыБезСохранения"); + + Если РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = Истина Тогда + НастройкиОтчета.РазрешеноИзменятьВарианты = Истина; + НастройкиОтчета.РазрешеноВыбиратьВарианты = Истина; + ВариантМодифицирован = Ложь; + Если ПустаяСтрока(КлючНазначенияИспользования) Тогда + КлючНазначенияИспользования = Параметры.КлючВарианта; + ФормаПараметры.КлючНазначенияИспользования = КлючНазначенияИспользования; + КонецЕсли; + КонецЕсли; + // Регистрация команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек. НаборРеквизитов = ПолучитьРеквизиты(); Для Каждого Реквизит Из НаборРеквизитов Цикл @@ -147,7 +160,8 @@ КонецЕсли; Если ДоступнаОтправкаПисем Тогда Если НастройкиОтчета.РазрешеноИзменятьВарианты - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") + И Не НастройкиОтчета.СкрытьКомандыРассылки Тогда МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); МодульРассылкаОтчетов.ФормаОтчетаДобавитьКоманды(ЭтотОбъект, Отказ, СтандартнаяОбработка); Иначе // Если в подменю одна команда, то выпадающий список не отображается. @@ -461,7 +475,11 @@ &НаКлиенте Процедура ОтчетТабличныйДокументВыбор(Элемент, Область, СтандартнаяОбработка) - ОтчетыКлиентПереопределяемый.ОбработкаВыбораТабличногоДокумента(ЭтотОбъект, Элемент, Область, СтандартнаяОбработка); + + ИнтеграцияПодсистемБСПКлиент.ОбработкаВыбораТабличногоДокумента(ЭтотОбъект, Элемент, Область, СтандартнаяОбработка); + Если СтандартнаяОбработка Тогда + ОтчетыКлиентПереопределяемый.ОбработкаВыбораТабличногоДокумента(ЭтотОбъект, Элемент, Область, СтандартнаяОбработка); + КонецЕсли; Если СтандартнаяОбработка И ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда Если ПерейтиПоСсылке(Область.Текст) Тогда @@ -1042,7 +1060,7 @@ Или СтрНачинаетсяС(АдресСсылкиВРег, ВРег("https://")) Или СтрНачинаетсяС(АдресСсылкиВРег, ВРег("e1cib/")) Или СтрНачинаетсяС(АдресСсылкиВРег, ВРег("e1c://")) Тогда - ОбщегоНазначенияКлиент.ПерейтиПоСсылке(АдресСсылки); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресСсылки); Возврат Истина; КонецЕсли; Возврат Ложь; @@ -1069,6 +1087,7 @@ &НаСервере Процедура УстановитьВидимостьДоступность(ОбновитьКоманды = Истина) + ПоказыватьКомандыВыбораВариантов = РежимВариантаОтчета() И НастройкиОтчета.РазрешеноВыбиратьВарианты; Если ОбновитьКоманды Тогда @@ -1095,6 +1114,14 @@ "СохранитьНастройки", "Видимость", ПоказыватьКомандыВыбораВариантов И ЕстьНастройки); // Кнопка исчезает, если команда недоступна по правам. + + РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "РазрешеноВыбиратьИНастраиватьВариантыБезСохранения"); + + Если РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = Истина Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СохранитьВариант", "Видимость", Ложь); + ВариантМодифицирован = Ложь; + КонецЕсли; + КонецЕсли; // Команды выбора вариантов. @@ -1811,7 +1838,6 @@ ПараметрыПоиска = Новый Структура; ПараметрыПоиска.Вставить("Отчеты", ОтчетыКлиентСервер.ЗначениеВМассив(НастройкиОтчета.ОтчетСсылка)); - ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); ПараметрыПоиска.Вставить("ПолучатьИтоговуюТаблицу", Истина); РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); ТаблицаВариантов = РезультатПоиска.ТаблицаЗначений; diff --git a/SSL/src/CommonForms/ФормаПоиска/Form.form b/SSL/src/CommonForms/ФормаПоиска/Form.form index 263b50f63..caab19115 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Form.form +++ b/SSL/src/CommonForms/ФормаПоиска/Form.form @@ -19,10 +19,6 @@ <key>ru</key> <value>Введите искомый текст или часть фразы</value> </toolTip> - <handlers> - <event>OnChange</event> - <name>СтрокаПоискаПриИзменении</name> - </handlers> <extendedTooltip> <name>СтрокаПоискаExtendedTooltip</name> <id>53</id> @@ -51,6 +47,7 @@ </handlers> <maxWidth>40</maxWidth> <autoMaxHeight>true</autoMaxHeight> + <dropListButton>true</dropListButton> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> @@ -112,7 +109,6 @@ <userVisible> <common>true</common> </userVisible> - <skipOnInput>false</skipOnInput> <extendedTooltip> <name>СправкаExtendedTooltip</name> <id>55</id> @@ -171,55 +167,25 @@ </items> <items xsi:type="form:FormGroup"> <name>ГруппаОбластьПоиска</name> - <id>62</id> - <items xsi:type="form:Decoration"> - <name>ОбластьПоискаЗаголовок</name> - <id>64</id> - <title> - <key>ru</key> - <value>Область поиска:</value> - - true - true - - true - - - ОбластьПоискаЗаголовокРасширеннаяПодсказка - 66 - Label - true - true - - Left - - - - ОбластьПоискаЗаголовокКонтекстноеМеню - 65 - true - - Label - true - - Left - - - + 73 + ОбластиПоискаПредставление - 67 + 70 <key>ru</key> - <value>Везде</value> + <value>Область поиска</value> true true true + + ОбластиПоискаПредставление + ОбластиПоискаПредставлениеРасширеннаяПодсказка - 69 + 72 Label true true @@ -229,18 +195,21 @@ ОбластиПоискаПредставлениеКонтекстноеМеню - 68 + 71 true - Label - true - + LabelField + Enter + true + Left + true + Click - ОбластиПоискаНажатие + ОбластиПоискаПредставлениеНажатие + true true - Left true @@ -254,7 +223,7 @@ ГруппаОбластьПоискаРасширеннаяПодсказка - 63 + 74 Label true true @@ -278,7 +247,7 @@ ГруппаНавигация 51 - Назад + Предыдущие 8 true true @@ -287,7 +256,7 @@ false - НазадExtendedTooltip + ПредыдущиеРасширеннаяПодсказка 58 Label true @@ -311,7 +280,7 @@ Auto - Далее + Следующие 9 true true @@ -320,7 +289,7 @@ false - ДалееExtendedTooltip + СледующиеРасширеннаяПодсказка 59 Label true @@ -352,6 +321,7 @@ ru Навигация + false ГруппаНавигацияExtendedTooltip 57 @@ -368,7 +338,7 @@ - ПоказаныРезультаты_С_По + ИнформацияОНайденномПредставление 16 true true @@ -376,12 +346,11 @@ true - ПоказаныРезультатыСПо + ИнформацияОНайденномПредставление - true None - ПоказаныРезультаты_С_ПоExtendedTooltip + ИнформацияОНайденномПредставлениеРасширеннаяПодсказка 60 Label true @@ -391,7 +360,7 @@ - ПоказаныРезультаты_С_ПоКонтекстноеМеню + ИнформацияОНайденномПредставлениеКонтекстноеМеню 17 true @@ -404,7 +373,6 @@ true true - true Style.ПоясняющийТекст @@ -419,6 +387,7 @@ ru Информация о найденном + true ГруппаИнформацияОНайденномExtendedTooltip 56 @@ -439,7 +408,7 @@ - HTMLТекст + HTMLСтраницаПредставление 39 true true @@ -447,11 +416,11 @@ true - HTMLТекст + HTMLСтраницаПредставление None - HTMLТекстExtendedTooltip + HTMLСтраницаПредставлениеРасширеннаяПодсказка 61 Label true @@ -461,7 +430,7 @@ - HTMLТекстКонтекстноеМеню + HTMLСтраницаПредставлениеКонтекстноеМеню 40 true @@ -491,6 +460,10 @@ Left true + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -540,14 +513,9 @@ true - ShowError - ПоказаныРезультатыСПо - - <key>ru</key> - <value>Показаны результаты с по</value> - + ИнформацияОНайденномПредставление 7 String @@ -561,30 +529,10 @@ - ТекущаяПозиция + HTMLСтраницаПредставление <key>ru</key> - <value>Текущая позиция</value> - - 13 - - Number - - 10 - - - - true - - - true - - - - HTMLТекст - - <key>ru</key> - <value>HTMLТекст</value> + <value>HTMLСтраница представление</value> 14 @@ -599,36 +547,13 @@ - РезультатыПоиска + КонтейнерСостояний <key>ru</key> - <value>Результаты поиска</value> + <value>Контейнер состояний</value> 6 - - ValueList - - - true - - - true - - - - - - - ДатаАктуальностиИндекса - - <key>ru</key> - <value>Дата актуальности индекса</value> - - 3 - - Date - - + true @@ -637,52 +562,15 @@ - СостояниеИндекса + ОбластиПоискаПредставление <key>ru</key> - <value>Состояние индекса</value> - - 5 - - String - - - - true - - - true - - - - ОбластиПоиска - - <key>ru</key> - <value>Области поиска</value> - - 15 - - ValueList - - - true - - - true - - - - - - - ИскатьВРазделах - - <key>ru</key> - <value>Искать в разделах</value> + <value>Области поиска представление</value> 16 - Boolean + String + true diff --git a/SSL/src/CommonForms/ФормаПоиска/Help/ru.html b/SSL/src/CommonForms/ФормаПоиска/Help/ru.html index 2e2a5fa25..2fb0886bb 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Help/ru.html +++ b/SSL/src/CommonForms/ФормаПоиска/Help/ru.html @@ -7,7 +7,7 @@
    • Поиск может осуществляться по одному и нескольким словам. В строке ввода допускается использование поисковых операторов типа И, ИЛИ, НЕ и т.д. Можно использовать и другие поисковые операторы, а также проводить поиск по части слова.
    • В окне результатов поиска выводятся объекты, в которых содержится поисковая фраза или слово и краткое описание объекта. Поисковая фраза или слово подсвечивается. Из окна результатов поиска, выбрав объект, можно открыть его.
    • С помощью кнопок  и  можно перелистывать страницы результатов поиска.

    Ограничение области поиска

    -
    • Если найдено большое количество информации, для увеличения точности результатов можно ограничить Область поиска. +
      • Если найдено большое количество информации, для увеличения точности результатов можно ограничить Область поиска.
      • Например, можно искать данные, которые относятся только к ключевым операциям замера производительности.
      • Область поиска настраивается по ссылке, расположенной под строкой поиска. По умолчанию ссылка принимает значение Везде.
      • Нажмите на ссылку, для того чтобы изменить настройки.

      Ошибки поиска и методы исправления

      diff --git a/SSL/src/CommonForms/ФормаПоиска/Module.bsl b/SSL/src/CommonForms/ФормаПоиска/Module.bsl index f345a8b97..342935e62 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Module.bsl +++ b/SSL/src/CommonForms/ФормаПоиска/Module.bsl @@ -8,71 +8,38 @@ Возврат; КонецЕсли; - ТекущаяПозиция = 0; - - Элементы.Далее.Доступность = Ложь; - Элементы.Назад.Доступность = Ложь; - - НастройкиПоиска = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПолнотекстовогоПоиска", ""); - Если НастройкиПоиска <> Неопределено Тогда - Если НастройкиПоиска.Свойство("ИскатьВРазделах") Тогда - ИскатьВРазделах = НастройкиПоиска.ИскатьВРазделах; - КонецЕсли; - ОбластиПоиска = НастройкиПоиска.ОбластиПоиска; + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Возврат; КонецЕсли; + + КонтейнерСостояний = Новый Структура; + КонтейнерСостояний.Вставить("ИскатьВРазделах", Ложь); + КонтейнерСостояний.Вставить("ОбластиПоиска", Новый СписокЗначений); // Идентификаторы объектов метаданных. + КонтейнерСостояний.Вставить("ТекущаяПозиция", 0); + КонтейнерСостояний.Вставить("Количество", 0); + КонтейнерСостояний.Вставить("ПолноеКоличество", 0); + КонтейнерСостояний.Вставить("КодОшибки", ""); + // Возможные значения: + // "ОшибкаПоиска" + // "СлишкомМногоРезультатов" + // "НичегоНеНайдено" + КонтейнерСостояний.Вставить("ОписаниеОшибки", ""); + КонтейнерСостояний.Вставить("РезультатыПоиска", Новый Массив); // см. ВыполнитьПолнотекстовыйПоиск. + КонтейнерСостояний.Вставить("ИсторияПоиска", Новый Массив); // Список поисковых фраз. - Массив = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", ""); - - Если Массив <> Неопределено Тогда - Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(Массив); - КонецЕсли; + ЗагрузитьНастройкиИИсториюПоиска(КонтейнерСостояний); Если Не ПустаяСтрока(Параметры.ПереданнаяСтрокаПоиска) Тогда - ИскатьВРазделах = Ложь; - СтрокаПоиска = Параметры.ПереданнаяСтрокаПоиска; - - СохранитьСтрокуПоиска(Элементы.СтрокаПоиска.СписокВыбора, СтрокаПоиска); - Попытка - Результат = ВыполнитьПоискСервер(0, ТекущаяПозиция, СтрокаПоиска); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат; - КонецПопытки; - - РезультатыПоиска = Результат.РезультатПоиска; - HTMLТекст = Результат.HTMLТекст; - ТекущаяПозиция = Результат.ТекущаяПозиция; - ПолноеКоличество = Результат.ПолноеКоличество; - - Если РезультатыПоиска.Количество() <> 0 Тогда - - ПоказаныРезультатыСПо = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Показаны %1 - %2 из %3'"), - Строка(ТекущаяПозиция + 1), - Строка(ТекущаяПозиция + РезультатыПоиска.Количество()), - Строка(ПолноеКоличество) ); - - Элементы.Далее.Доступность = (ПолноеКоличество - ТекущаяПозиция) > РезультатыПоиска.Количество(); - Элементы.Назад.Доступность = (ТекущаяПозиция > 0); - Иначе - ПоказаныРезультатыСПо = НСтр("ru = 'Не найдено'"); - Элементы.Далее.Доступность = Ложь; - Элементы.Назад.Доступность = Ложь; - КонецЕсли; - Иначе - HTMLТекст = - " - | - | - | - | - | - |
      - | - |"; - СформироватьПредставлениеОбластиПоиска(); + ПриВыполненииПоискаНаСервере(КонтейнерСостояний, СтрокаПоиска); КонецЕсли; + + ОбновитьИсториюПоиска(Элементы.СтрокаПоиска, КонтейнерСостояний); + ОбластиПоискаПредставление = ПредставлениеОбластиПоиска(КонтейнерСостояний); + ОбновитьДоступностьКнопокНавигации(Элементы.Следующие, Элементы.Предыдущие, КонтейнерСостояний); + ИнформацияОНайденномПредставление = ПредставлениеИнформацииОНайденном(КонтейнерСостояний); + HTMLСтраницаПредставление = ПредставлениеHTMLСтраницы(СтрокаПоиска, КонтейнерСостояний); + КонецПроцедуры #КонецОбласти @@ -80,14 +47,11 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура СтрокаПоискаПриИзменении(Элемент) +Процедура ПриОткрытии(Отказ) - Отказ = Ложь; - - Искать(0, Отказ); - - Если НЕ Отказ Тогда - ТекущийЭлемент = Элементы.СтрокаПоиска; + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Отказ = Истина; + ПоказатьПредупреждение(, НСтр("ru = 'Недостаточно прав для выполнения поиска'")); КонецЕсли; КонецПроцедуры @@ -97,86 +61,50 @@ СтандартнаяОбработка = Ложь; - // Для платформы - #Если ВебКлиент Тогда + // Обход ошибки платформы. +#Если ВебКлиент Тогда Если Элементы.СтрокаПоиска.СписокВыбора.Количество() = 1 Тогда ВыбранноеЗначение = Элемент.ТекстРедактирования; КонецЕсли; - #КонецЕсли +#КонецЕсли + СтрокаПоиска = ВыбранноеЗначение; - Искать(0); + ПриВыполненииПоиска("ПерваяЧасть"); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбластиПоискаПредставлениеНажатие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ОбластиПоиска = КонтейнерСостояний.ОбластиПоиска; + ИскатьВРазделах = КонтейнерСостояний.ИскатьВРазделах; + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ОбластиПоиска", ОбластиПоиска); + ПараметрыОткрытия.Вставить("ИскатьВРазделах", ИскатьВРазделах); + + Оповещение = Новый ОписаниеОповещения("ПослеПолученияНастроекОбластиПоиска", ЭтотОбъект); + + ОткрытьФорму("Обработка.ПолнотекстовыйПоискВДанных.Форма.ВыборОбластиПоиска", + ПараметрыОткрытия,,,,, Оповещение); КонецПроцедуры &НаКлиенте Процедура HTMLТекстПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) - ЭлементHTML = ДанныеСобытия.Anchor; - Если ЭлементHTML = Неопределено Тогда + СтандартнаяОбработка = Ложь; + + СсылкаHTML = ДанныеСобытия.Anchor; + + Если СсылкаHTML = Неопределено Тогда Возврат; КонецЕсли; - Если (ЭлементHTML.id = "FullTextSearchListItem") Тогда - СтандартнаяОбработка = Ложь; - - ЧастьURL = ЭлементHTML.outerHTML; - Позиция = СтрНайти(ЧастьURL, "sel_num="); - ЧастьURLОбрезанная = Сред(ЧастьURL, Позиция + 9); - ПозицияОкончание = СтрНайти(ЧастьURLОбрезанная, """"); - Если ПозицияОкончание = 0 Тогда - ПозицияОкончание = СтрНайти(ЧастьURLОбрезанная, "'"); - Если ПозицияОкончание = 0 Тогда - ПозицияОкончание = 2; - КонецЕсли; - КонецЕсли; - Если Позиция <> 0 Тогда - ЧастьURL = Сред(ЧастьURLОбрезанная, 1, ПозицияОкончание - 1); - КонецЕсли; - - НомерВСписке = Число(ЧастьURL); - СтруктураРезультата = РезультатыПоиска[НомерВСписке].Значение; - ВыбраннаяСтрока = СтруктураРезультата.Значение; - МассивОбъектов = СтруктураРезультата.ЗначенияДляОткрытия; - - Если МассивОбъектов.Количество() = 1 Тогда - ОткрытьЗначениеПоиска(МассивОбъектов[0]); - ИначеЕсли МассивОбъектов.Количество() <> 0 Тогда - Список = Новый СписокЗначений; - Для Каждого ЭлементМассива Из МассивОбъектов Цикл - Список.Добавить(ЭлементМассива); - КонецЦикла; - - Обработчик = Новый ОписаниеОповещения("HTMLТекстПриНажатииПослеВыбораИзСписка", ЭтотОбъект); - ПоказатьВыборИзСписка(Обработчик, Список, Элементы.HTMLТекст); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОбластиПоискаНажатие(Элемент) - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ОбластиПоиска", ОбластиПоиска); - ПараметрыОткрытия.Вставить("ИскатьВРазделах", ИскатьВРазделах); - - ОписаниеОповещения = - Новый ОписаниеОповещения("ОбластиПоискаНажатиеПродолжение", ЭтотОбъект); - - ОткрытьФорму( - "Обработка.ПолнотекстовыйПоискВДанных.Форма.Настройки", - ПараметрыОткрытия,,,,, - ОписаниеОповещения); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбластиПоискаНажатиеПродолжение(Результат, ДополнительныеПараметры) Экспорт - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - ОбластиПоиска = Результат.ОбластиПоиска; - ИскатьВРазделах = Результат.ИскатьВРазделах; - СформироватьПредставлениеОбластиПоиска(); - КонецЕсли; + Оповещение = Новый ОписаниеОповещения("ПослеОткрытияНавигационнойСсылки", ЭтотОбъект); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СсылкаHTML.href, Оповещение); КонецПроцедуры @@ -187,21 +115,21 @@ &НаКлиенте Процедура ВыполнитьПоиск(Команда) - Искать(0); - -КонецПроцедуры - -&НаКлиенте -Процедура Следующие(Команда) - - Искать(1); + ПриВыполненииПоиска("ПерваяЧасть"); КонецПроцедуры &НаКлиенте Процедура Предыдущие(Команда) - Искать(-1); + ПриВыполненииПоиска("ПредыдущаяЧасть"); + +КонецПроцедуры + +&НаКлиенте +Процедура Следующие(Команда) + + ПриВыполненииПоиска("СледующаяЧасть"); КонецПроцедуры @@ -209,313 +137,467 @@ #Область СлужебныеПроцедурыИФункции -&НаКлиенте -Процедура ОткрытьЗначениеПоиска(Значение) - - ПоказатьЗначение(, Значение); +#Область СлужебныеОбработчикиСобытий +&НаКлиенте +Процедура ПослеПолученияНастроекОбластиПоиска(Результат, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + ПриУстановкеОбластиПоиска(Результат); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриУстановкеОбластиПоиска(НастройкиОбластиПоиска) + + СохранитьНастройкиПоиска(НастройкиОбластиПоиска.ИскатьВРазделах, НастройкиОбластиПоиска.ОбластиПоиска); + + ЗаполнитьЗначенияСвойств(КонтейнерСостояний, НастройкиОбластиПоиска, + "ОбластиПоиска, ИскатьВРазделах"); + + ОбластиПоискаПредставление = ПредставлениеОбластиПоиска(КонтейнерСостояний); + КонецПроцедуры &НаКлиенте -Процедура Искать(Направление, Отказ = Неопределено) - // Процедура поиска, получение и отображение результата. +Процедура ПриВыполненииПоиска(НаправлениеПоиска) Если ПустаяСтрока(СтрокаПоиска) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Введите, что нужно найти.'"), , "СтрокаПоиска"); - Отказ = Истина; + ПоказатьПредупреждение(, НСтр("ru = 'Введите, что нужно найти'")); Возврат; КонецЕсли; - ЭтоНавигационнаяСсылка = СтрНайти(СтрокаПоиска, "e1cib/data/") <> 0; - Если ЭтоНавигационнаяСсылка Тогда - ПерейтиПоНавигационнойСсылке(СтрокаПоиска); + Если ОбщегоНазначенияСлужебныйКлиент.ЭтоНавигационнаяСсылка(СтрокаПоиска) Тогда + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СтрокаПоиска); СтрокаПоиска = ""; Возврат; КонецЕсли; - СписокВыбора = Элементы.СтрокаПоиска.СписокВыбора.Скопировать(); - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ИскатьВРазделах", ИскатьВРазделах); - ДополнительныеПараметры.Вставить("ОбластиПоиска", ОбластиПоиска); - Результат = СохранитьСтрокуИВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, СписокВыбора, ДополнительныеПараметры); - Элементы.СтрокаПоиска.СписокВыбора.Очистить(); - Для Каждого ЭлементСпискаВыбора Из СписокВыбора Цикл - Элементы.СтрокаПоиска.СписокВыбора.Добавить(ЭлементСпискаВыбора.Значение, ЭлементСпискаВыбора.Представление); - КонецЦикла; + ПриВыполненииПоискаНаСервере(КонтейнерСостояний, СтрокаПоиска, НаправлениеПоиска); - РезультатыПоиска = Результат.РезультатПоиска; - HTMLТекст = Результат.HTMLТекст; - ТекущаяПозиция = Результат.ТекущаяПозиция; - ПолноеКоличество = Результат.ПолноеКоличество; - - Если РезультатыПоиска.Количество() > 0 Тогда - - ПоказаныРезультатыСПо = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Показаны %1 - %2 из %3'"), - Формат(ТекущаяПозиция + 1, "ЧН=0; ЧГ="), - Формат(ТекущаяПозиция + РезультатыПоиска.Количество(), "ЧН=0; ЧГ="), - Формат(ПолноеКоличество, "ЧН=0; ЧГ=")); - - Элементы.Далее.Доступность = (ПолноеКоличество - ТекущаяПозиция) > РезультатыПоиска.Количество(); - Элементы.Назад.Доступность = (ТекущаяПозиция > 0); - - Если Направление = 0 И Результат.ТекущаяПозиция = 0 И Результат.СлишкомМногоРезультатов Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Слишком много результатов, уточните запрос.'")); - КонецЕсли; - - Иначе - - ПоказаныРезультатыСПо = НСтр("ru = 'Не найдено'"); - - Элементы.Далее.Доступность = Ложь; - Элементы.Назад.Доступность = Ложь; - - ТекстПоиска = НСтр("ru = 'Искомая комбинация слов нигде не встречается.

      - |Рекомендации: - |
    • Убедитесь, что все слова написаны без ошибок. - |
    • Попробуйте использовать другие ключевые слова. - |
    • Попробуйте уменьшить количество искомых слов.'"); - - HTMLТекст = - " - | - | - | - | - | - |" + ТекстПоиска + " - | - |"; - - КонецЕсли; + ОбновитьИсториюПоиска(Элементы.СтрокаПоиска, КонтейнерСостояний); + ОбновитьДоступностьКнопокНавигации(Элементы.Следующие, Элементы.Предыдущие, КонтейнерСостояний); + ИнформацияОНайденномПредставление = ПредставлениеИнформацииОНайденном(КонтейнерСостояний); + HTMLСтраницаПредставление = ПредставлениеHTMLСтраницы(СтрокаПоиска, КонтейнерСостояний); КонецПроцедуры &НаСервереБезКонтекста -Функция ПолучитьЗначенияДляОткрытия(Объект) - // Возвращает массив объектов (возможно из одного элемента) для показа пользователю. - Результат = Новый Массив; +Процедура ПриВыполненииПоискаНаСервере(КонтейнерСостояний, СтрокаПоиска, НаправлениеПоиска = "ПерваяЧасть") - // Объект ссылочного типа - Если ОбщегоНазначения.ЗначениеСсылочногоТипа(Объект) Тогда - Результат.Добавить(Объект); - Возврат Результат; - КонецЕсли; + СохранитьСтрокуПоискаВИстории(СтрокаПоиска, КонтейнерСостояний.ИсторияПоиска); - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект)); - ИмяМетаданного = МетаданныеОбъекта.Имя; + ПараметрыПоиска = Обработки.ПолнотекстовыйПоискВДанных.ПараметрыПоиска(); + ЗаполнитьЗначенияСвойств(ПараметрыПоиска, КонтейнерСостояний, + "ТекущаяПозиция, ИскатьВРазделах, ОбластиПоиска"); + ПараметрыПоиска.СтрокаПоиска = СтрокаПоиска; + ПараметрыПоиска.НаправлениеПоиска = НаправлениеПоиска; - ПолноеИмяОбъекта = ВРег(Метаданные.НайтиПоТипу(ТипЗнч(Объект)).ПолноеИмя()); - ЭтоРегистрСведений = (СтрНайти(ПолноеИмяОбъекта, "РЕГИСТРСВЕДЕНИЙ.") > 0); - - Если Не ЭтоРегистрСведений Тогда // Регистр бухгалтерии или накопления или расчета. - Регистратор = Объект["Регистратор"]; - Результат.Добавить(Регистратор); - Возврат Результат; - КонецЕсли; - - // Ниже - это уже регистр сведений. - Если МетаданныеОбъекта.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда - Регистратор = Объект["Регистратор"]; - Результат.Добавить(Регистратор); - Возврат Результат; - КонецЕсли; - - // Независимый регистр сведений - // сперва - основные типы. - Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл - Если Измерение.Ведущее Тогда - ЗначениеИзмерения = Объект[Измерение.Имя]; - - Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ЗначениеИзмерения) Тогда - Результат.Добавить(ЗначениеИзмерения); - КонецЕсли; - - КонецЕсли; - КонецЦикла; - - Если Результат.Количество() = 0 Тогда - // теперь - любые типы - Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл - Если Измерение.Ведущее Тогда - ЗначениеИзмерения = Объект[Измерение.Имя]; - Результат.Добавить(ЗначениеИзмерения); - КонецЕсли; - КонецЦикла; - КонецЕсли; + РезультатПоиска = Обработки.ПолнотекстовыйПоискВДанных.ВыполнитьПолнотекстовыйПоиск(ПараметрыПоиска); - // Нет ни одного ведущего измерения - вернем сам ключ регистра сведений. - Если Результат.Количество() = 0 Тогда - Результат.Добавить(Объект); - КонецЕсли; - - Возврат Результат; -КонецФункции - -&НаСервереБезКонтекста -Функция СохранитьСтрокуИВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, СписокВыбора, ДополнительныеПараметры) - // Процедура выполняет полнотекстовый поиск. - - СохранитьСтрокуПоиска(СписокВыбора, СтрокаПоиска); - - Возврат ВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, ДополнительныеПараметры); - -КонецФункции - -&НаСервереБезКонтекста -Процедура СохранитьСтрокуПоиска(СписокВыбора, СтрокаПоиска) - - СохраненнаяСтрока = СписокВыбора.НайтиПоЗначению(СтрокаПоиска); - - Если СохраненнаяСтрока <> Неопределено Тогда - СписокВыбора.Удалить(СохраненнаяСтрока); - КонецЕсли; - - СписокВыбора.Вставить(0, СтрокаПоиска); - - КоличествоСтрок = СписокВыбора.Количество(); - - Если КоличествоСтрок > 20 Тогда - СписокВыбора.Удалить(КоличествоСтрок - 1); - КонецЕсли; - - Строки = СписокВыбора.ВыгрузитьЗначения(); - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", - "", - Строки); + ЗаполнитьЗначенияСвойств(КонтейнерСостояний, РезультатПоиска, + "ТекущаяПозиция, Количество, ПолноеКоличество, КодОшибки, ОписаниеОшибки, РезультатыПоиска"); КонецПроцедуры -&НаСервере -Процедура СохранитьНастройкиПоиска() - - Настройки = Новый Структура; - Настройки.Вставить("ОбластиПоиска", ОбластиПоиска); - Настройки.Вставить("ИскатьВРазделах", ИскатьВРазделах); - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПолнотекстовогоПоиска", "", Настройки); - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, ДополнительныеПараметры = Неопределено) - // Процедура выполняет полнотекстовый поиск. - - РазмерПорции = 20; - - СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(СтрокаПоиска, РазмерПорции); - - Если ДополнительныеПараметры <> Неопределено Тогда - Если ДополнительныеПараметры.ИскатьВРазделах И ДополнительныеПараметры.ОбластиПоиска.Количество() > 0 Тогда - СписокПоиска.ИспользованиеМетаданных = ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать; - ОбластьПоиска = Новый Массив; - Для Каждого Область Из ДополнительныеПараметры.ОбластиПоиска Цикл - ОбластьПоиска.Добавить(ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Область.Значение)); - КонецЦикла; - СписокПоиска.ОбластьПоиска = ОбластьПоиска; - КонецЕсли; - КонецЕсли; - - Если Направление = 0 Тогда - СписокПоиска.ПерваяЧасть(); - ИначеЕсли Направление = -1 Тогда - СписокПоиска.ПредыдущаяЧасть(ТекущаяПозиция); - ИначеЕсли Направление = 1 Тогда - СписокПоиска.СледующаяЧасть(ТекущаяПозиция); - КонецЕсли; - - РезультатыПоиска = Новый СписокЗначений; - Для Каждого Результат Из СписокПоиска Цикл - СтруктураРезультата = Новый Структура; - СтруктураРезультата.Вставить("Значение", Результат.Значение); - СтруктураРезультата.Вставить("ЗначенияДляОткрытия", ПолучитьЗначенияДляОткрытия(Результат.Значение)); - РезультатыПоиска.Добавить(СтруктураРезультата); - КонецЦикла; - - HTMLТекст = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст); - - HTMLТекст = СтрЗаменить(HTMLТекст, "", ""); - HTMLТекст = СтрЗаменить(HTMLТекст, "", ""); - HTMLТекст = СтрЗаменить(HTMLТекст, "", ""); - HTMLТекст = СтрЗаменить(HTMLТекст, "", ""); - HTMLТекст = СтрЗаменить(HTMLТекст, "", ""); - HTMLТекст = СтрЗаменить(HTMLТекст, "", ""); - HTMLТекст = СтрЗаменить(HTMLТекст, "overflow:auto", ""); - - ТекущаяПозиция = СписокПоиска.НачальнаяПозиция(); - ПолноеКоличество = СписокПоиска.ПолноеКоличество(); - СлишкомМногоРезультатов = СписокПоиска.СлишкомМногоРезультатов(); - - Результат = Новый Структура; - Результат.Вставить("РезультатПоиска", РезультатыПоиска); - Результат.Вставить("ТекущаяПозиция", ТекущаяПозиция); - Результат.Вставить("ПолноеКоличество", ПолноеКоличество); - Результат.Вставить("HTMLТекст", HTMLТекст); - Результат.Вставить("СлишкомМногоРезультатов", СлишкомМногоРезультатов); - - Возврат Результат; - -КонецФункции - &НаКлиенте -Процедура HTMLТекстПриНажатииПослеВыбораИзСписка(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт - Если ВыбранныйЭлемент <> Неопределено Тогда - ОткрытьЗначениеПоиска(ВыбранныйЭлемент.Значение); +Процедура ПослеОткрытияНавигационнойСсылки(ПриложениеЗапущено, Контекст) Экспорт + + Если Не ПриложениеЗапущено Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Открытие объектов данного типа не предусмотрено'")); КонецЕсли; + КонецПроцедуры -&НаСервере -Процедура СформироватьПредставлениеОбластиПоиска() +#КонецОбласти + +#Область Представления + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьИсториюПоиска(Элемент, КонтейнерСостояний) - СохранитьНастройкиПоиска(); + ИсторияПоиска = КонтейнерСостояний.ИсторияПоиска; + + Если ТипЗнч(ИсторияПоиска) = Тип("Массив") Тогда + Элемент.СписокВыбора.ЗагрузитьЗначения(ИсторияПоиска); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПредставлениеОбластиПоиска(КонтейнерСостояний) + + ИскатьВРазделах = КонтейнерСостояний.ИскатьВРазделах; + ОбластиПоиска = КонтейнерСостояний.ОбластиПоиска; Если Не ИскатьВРазделах Или ОбластиПоиска.Количество() = 0 Тогда - Элементы.ОбластиПоискаПредставление.Заголовок = НСтр("ru = 'Везде'"); - Возврат; + Возврат НСтр("ru = 'Везде'"); КонецЕсли; - ПредставлениеОбластиПоиска = ""; - Если ОбластиПоиска.Количество() < 4 Тогда - Для Каждого Область Из ОбластиПоиска Цикл + Если ОбластиПоиска.Количество() < 5 Тогда + ПредставлениеОбластиПоиска = ""; + Для каждого Область Из ОбластиПоиска Цикл ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Область.Значение); - ПредставлениеОбластиПоиска = ПредставлениеОбластиПоиска + ПредставлениеФормыСписка(ОбъектМетаданных) + ","; + ПредставлениеОбластиПоиска = ПредставлениеОбластиПоиска + ПредставлениеФормыСписка(ОбъектМетаданных) + ", "; КонецЦикла; - Элементы.ОбластиПоискаПредставление.Заголовок = Лев(ПредставлениеОбластиПоиска, СтрДлина(ПредставлениеОбластиПоиска)-1); - Иначе - Элементы.ОбластиПоискаПредставление.Заголовок = НСтр("ru = 'В выбранных разделах'"); + Возврат Лев(ПредставлениеОбластиПоиска, СтрДлина(ПредставлениеОбластиПоиска) - 2); КонецЕсли; -КонецПроцедуры - -&НаСервере -Функция ПредставлениеФормыСписка(Объект) + Возврат НСтр("ru = 'В выбранных разделах'"); - Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеСписка) Тогда - Представление = Объект.РасширенноеПредставлениеСписка; - ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеСписка) Тогда - Представление = Объект.ПредставлениеСписка; - Иначе - Представление = Объект.Представление(); +КонецФункции + +&НаСервереБезКонтекста +Функция ПредставлениеФормыСписка(ОбъектМетаданных) + + Если Не ПустаяСтрока(ОбъектМетаданных.РасширенноеПредставлениеСписка) Тогда + Представление = ОбъектМетаданных.РасширенноеПредставлениеСписка; + ИначеЕсли Не ПустаяСтрока(ОбъектМетаданных.ПредставлениеСписка) Тогда + Представление = ОбъектМетаданных.ПредставлениеСписка; + Иначе + Представление = ОбъектМетаданных.Представление(); КонецЕсли; Возврат Представление; КонецФункции +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьДоступностьКнопокНавигации(ЭлементКнопкиСледующие, ЭлементКнопкиПредыдущие, КонтейнерСостояний) + + Если КонтейнерСостояний.Количество = 0 Тогда + ЭлементКнопкиСледующие.Доступность = Ложь; + ЭлементКнопкиПредыдущие.Доступность = Ложь; + Иначе + + ПолноеКоличество = КонтейнерСостояний.ПолноеКоличество; + ТекущаяПозиция = КонтейнерСостояний.ТекущаяПозиция; + Количество = КонтейнерСостояний.Количество; + + ЭлементКнопкиСледующие.Доступность = (ПолноеКоличество - ТекущаяПозиция) > Количество; + ЭлементКнопкиПредыдущие.Доступность = (ТекущаяПозиция > 0); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеИнформацииОНайденном(КонтейнерСостояний) + + Если КонтейнерСостояний.Количество <> 0 Тогда + + ТекущаяПозиция = КонтейнерСостояний.ТекущаяПозиция; + Количество = КонтейнерСостояний.Количество; + ПолноеКоличество = КонтейнерСостояний.ПолноеКоличество; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Показаны %1 - %2 из %3'"), + Формат(ТекущаяПозиция + 1, "ЧН=0; ЧГ="), + Формат(ТекущаяПозиция + Количество, "ЧН=0; ЧГ="), + Формат(ПолноеКоличество, "ЧН=0; ЧГ=")); + + КонецЕсли; + + Возврат ""; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеHTMLСтраницы(СтрокаПоиска, КонтейнерСостояний) + + КодОшибки = КонтейнерСостояний.КодОшибки; + + Если ПустаяСтрока(КодОшибки) Тогда + HTMLСтраница = НоваяHTMLСтраницаРезультата(КонтейнерСостояний); + Иначе + HTMLСтраница = НоваяHTMLСтраницаОшибки(КонтейнерСостояний); + КонецЕсли; + + Возврат HTMLСтраница; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НоваяHTMLСтраницаРезультата(КонтейнерСостояний) + + ШаблонСтраницы = + " + | + | + | + | + | + |
      + |
        + |%Строки% + |
      + |
      + | + |"; + + ШаблонСтроки = + "
    • + | + | %ОписаниеHTML% + |
    • "; + + ШаблонНеактивнойСтроки = + "
    • + | + | %ОписаниеHTML% + |
    • "; + + РезультатыПоиска = КонтейнерСостояний.РезультатыПоиска; + ТекущаяПозиция = КонтейнерСостояний.ТекущаяПозиция; + + Строки = ""; + + Для каждого СтрокаРезультатаПоиска Из РезультатыПоиска Цикл + + Ссылка = СтрокаРезультатаПоиска.Ссылка; + Представление = СтрокаРезультатаПоиска.Представление; + ОписаниеHTML = СтрокаРезультатаПоиска.ОписаниеHTML; + + Если Ссылка = "#" Тогда + Строка = ШаблонНеактивнойСтроки; + Иначе + Строка = СтрЗаменить(ШаблонСтроки, "%Ссылка%", Ссылка); + КонецЕсли; + + Строка = СтрЗаменить(Строка, "%Представление%", Представление); + Строка = СтрЗаменить(Строка, "%ОписаниеHTML%", ОписаниеHTML); + + Строки = Строки + Строка; + + КонецЦикла; + + HTMLСтраница = СтрЗаменить(ШаблонСтраницы, "%Строки%", Строки); + HTMLСтраница = СтрЗаменить(HTMLСтраница , "%ТекущаяПозиция%", ТекущаяПозиция + 1); + + Возврат HTMLСтраница; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НоваяHTMLСтраницаОшибки(КонтейнерСостояний) + + ШаблонСтраницы = + " + | + | + | + | + | + |
      + |
      %1
      + |

      %2

      + |
      + | + |"; + + РекомендацииHTML = + НСтр("ru = '

      Рекомендации:

      + |
        + | %РекомендацияОбластиПоиска% + | %РекомендацияТекстЗапроса% + |
      • + | Воспользуйтесь поиском по началу слова.
        + | Используйте звездочку (*) в качестве окончания.
        + | Например, поиск стро* найдет все документы, которые содержат слова, начинающиеся на стро - + | Журнал ""Строительство и ремонт"", ""ООО СтройКомплект"" и.т.д. + |
      • + |
      • + | Воспользуйтесь нечетким поиском.
        + | Используйте решетку (#).
        + | Например, Сентинель#2 найдет все документы, содержащие такие слова, которые отличаются от слова + | Сентинель на одну или две буквы. + |
      • + |
      + |'"); + + ОписаниеОшибки = КонтейнерСостояний.ОписаниеОшибки; + КодОшибки = КонтейнерСостояний.КодОшибки; + ИскатьВРазделах = КонтейнерСостояний.ИскатьВРазделах; + ОбластиПоиска = КонтейнерСостояний.ОбластиПоиска; + + УказаныОбластиПоиска = ОбластиПоиска.Количество() > 0; + + РекомендацияОбластиПоискаHTML = ""; + РекомендацияТекстЗапросаHTML = ""; + + Если КодОшибки = "НичегоНеНайдено" Тогда + + Если ИскатьВРазделах И УказаныОбластиПоиска Тогда + + РекомендацияОбластиПоискаHTML = + НСтр("ru = '
    • Уточните область поиска.
      + |Попробуйте выбрать больше областей поиска или все разделы.
    • '"); + КонецЕсли; + + РекомендацияТекстЗапросаHTML = + НСтр("ru = '
    • Упростите запрос, исключив из него какое-либо слово.
    • '"); + + ИначеЕсли КодОшибки = "СлишкомМногоРезультатов" Тогда + + Если (Не ИскатьВРазделах) + Или (ИскатьВРазделах И Не УказаныОбластиПоиска) Тогда + + РекомендацияОбластиПоискаHTML = + НСтр("ru = '
    • Уточните область поиска.
      + |Попробуйте выбрать область поиска, задав точный раздел или список.
    • '"); + КонецЕсли; + + КонецЕсли; + + РекомендацииHTML = СтрЗаменить(РекомендацииHTML, "%РекомендацияОбластиПоиска%", РекомендацияОбластиПоискаHTML); + РекомендацииHTML = СтрЗаменить(РекомендацииHTML, "%РекомендацияТекстЗапроса%", РекомендацияТекстЗапросаHTML); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтраницы, ОписаниеОшибки, РекомендацииHTML); + +КонецФункции + +#КонецОбласти + +#Область БизнесЛогика + +&НаСервереБезКонтекста +Процедура ЗагрузитьНастройкиИИсториюПоиска(НастройкиПоиска) + + ИсторияПоиска = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", ""); + СохраненныеНастройкиПоиска = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПолнотекстовогоПоиска", ""); + + ИскатьВРазделах = Неопределено; + ОбластиПоиска = Неопределено; + + Если ТипЗнч(СохраненныеНастройкиПоиска) = Тип("Структура") Тогда + СохраненныеНастройкиПоиска.Свойство("ИскатьВРазделах", ИскатьВРазделах); + СохраненныеНастройкиПоиска.Свойство("ОбластиПоиска", ОбластиПоиска); + КонецЕсли; + + НастройкиПоиска.ИскатьВРазделах = ?(ИскатьВРазделах = Неопределено, Ложь, ИскатьВРазделах); + НастройкиПоиска.ОбластиПоиска = ?(ОбластиПоиска = Неопределено, Новый СписокЗначений, ОбластиПоиска); + НастройкиПоиска.ИсторияПоиска = ?(ИсторияПоиска = Неопределено, Новый Массив, ИсторияПоиска); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура СохранитьСтрокуПоискаВИстории(СтрокаПоиска, ИсторияПоиска) + + СохраненнаяСтрока = ИсторияПоиска.Найти(СтрокаПоиска); + + Если СохраненнаяСтрока <> Неопределено Тогда + ИсторияПоиска.Удалить(СохраненнаяСтрока); + КонецЕсли; + + ИсторияПоиска.Вставить(0, СтрокаПоиска); + + КоличествоСтрок = ИсторияПоиска.Количество(); + + Если КоличествоСтрок > 20 Тогда + ИсторияПоиска.Удалить(КоличествоСтрок - 1); + КонецЕсли; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", + "", + ИсторияПоиска); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура СохранитьНастройкиПоиска(ИскатьВРазделах, ОбластиПоиска) + + Настройки = Новый Структура; + Настройки.Вставить("ИскатьВРазделах", ИскатьВРазделах); + Настройки.Вставить("ОбластиПоиска", ОбластиПоиска); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПолнотекстовогоПоиска", "", Настройки); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo b/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo index d37825bf4..80e1df871 100644 --- a/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo +++ b/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo @@ -12,4 +12,5 @@ PersonalComputer MobileDevice + true diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl index 826f82468..10e427fb2 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl @@ -1065,24 +1065,6 @@ КонецФункции -// Возвращает кодировку стандартных поток вывода и ошибок, используемую в текущей ОС. -// -// Возвращаемое значение: -// КодировкаТекста, кодировка стандартных потоков вывода и ошибок. -// -Функция ПолучитьКодировкуСтандартныхПотоков() - - СисИнфо = Новый СистемнаяИнформация(); - Если (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда - Кодировка = КодировкаТекста.OEM; - Иначе - Кодировка = КодировкаТекста.Системная; - КонецЕсли; - - Возврат Кодировка; - -КонецФункции - // Возвращает значения свойств информационной базы. // // Параметры: @@ -1699,12 +1681,12 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно выполнить операцию администрирования кластера серверов по причине: файл %1 не найден. - | - |Для администрирования кластера через сервер администрирования (ras) требуется установить на данном - |компьютере клиент сервера администрирования (rac). - |Для его установки: - |- Для компьютеров с ОС Windows требуется переустановить платформу, установив компонент ""Администрирование сервера 1С:Предприятия""; - |- Для компьютеров с ОС Linux требуется установить пакет 1c-enterprise83-server*.'"), + | + |Для администрирования кластера через сервер администрирования (ras) требуется установить на данном + |компьютере клиент сервера администрирования (rac). + |Для его установки: + |- Для компьютеров с ОС Windows требуется переустановить платформу, установив компонент ""Администрирование сервера 1С:Предприятия""; + |- Для компьютеров с ОС Linux требуется установить пакет 1c-enterprise83-server*.'"), ФайлКлиента.ПолноеИмя); КонецЕсли; @@ -1737,66 +1719,23 @@ КонецЦикла; КонецЕсли; - // Перенаправление stdout и stderr. - ФайлПотокаВывода = ПолучитьИмяВременногоФайла("out"); - ФайлПотокаОшибок = ПолучитьИмяВременногоФайла("err"); - КоманднаяСтрока = КоманднаяСтрока + " > """ + ФайлПотокаВывода + """ 2>""" + ФайлПотокаОшибок + """"; + ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ТекущийКаталог = КаталогИсполняемыхФайловПлатформы(); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина; - Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда - - // Для Windows выполняем запуск через cmd.exe (для перенаправления stdout и stderr). - КоманднаяСтрока = "cmd /c " + " """ + КоманднаяСтрока + """"; - - #Если Сервер Тогда - - ЗапуститьПриложение(КоманднаяСтрока, КаталогИсполняемыхФайловПлатформы(), Истина); - - #Иначе - - // Для Windows-клиента используем Wscript.Shell, чтобы избежать появления окон с cmd. - - Оболочка = Новый COMОбъект("Wscript.Shell"); - Оболочка.Run(КоманднаяСтрока, 0, Истина); - - #КонецЕсли - - Иначе - - // Для ОС Linux просто запускаем команду. - - ЗапуститьПриложение(КоманднаяСтрока, КаталогИсполняемыхФайловПлатформы(), Истина); - - КонецЕсли; + Результат = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(КоманднаяСтрока, ПараметрыЗапускаПрограммы); - ЧтениеПотокаОшибок = Новый ЧтениеТекста(ФайлПотокаОшибок, ПолучитьКодировкуСтандартныхПотоков()); - ПотокОшибок = ЧтениеПотокаОшибок.Прочитать(); - ЧтениеПотокаОшибок.Закрыть(); - - УдалитьВременныйФайл(ФайлПотокаОшибок); + ПотокВывода = Результат.ПотокВывода; + ПотокОшибок = Результат.ПотокОшибок; Если ЗначениеЗаполнено(ПотокОшибок) Тогда - - УдалитьВременныйФайл(ФайлПотокаВывода); ВызватьИсключение ПотокОшибок; - - Иначе - - ЧтениеПотокаВывода = Новый ЧтениеТекста(ФайлПотокаВывода, ПолучитьКодировкуСтандартныхПотоков()); - ПотокВывода = ЧтениеПотокаВывода.Прочитать(); - ЧтениеПотокаВывода.Закрыть(); - - УдалитьВременныйФайл(ФайлПотокаВывода); - - Если ПотокВывода = Неопределено Тогда - - ПотокВывода = ""; - - КонецЕсли; - - Возврат ПотокВывода; - КонецЕсли; + Возврат ПотокВывода; + КонецФункции // Преобразует перенаправленный поток вывода консольного клиента сервера @@ -2349,26 +2288,6 @@ КонецФункции -Процедура УдалитьВременныйФайл(ПолноеИмяФайла) - - Если ПустаяСтрока(ПолноеИмяФайла) Тогда - - Возврат; - - КонецЕсли; - - Попытка - - УдалитьФайлы(ПолноеИмяФайла); - - Исключение - - Возврат; - - КонецПопытки; - -КонецПроцедуры - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl index e0e8e3e9e..db6e69bb5 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl @@ -4026,7 +4026,10 @@ // Дополнительный или подчиненный? Вариант = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ДополнительныйЭлемент.Значение); - СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение", Вариант.Сокращение, ТипАдресногоЭлемента)); + // У ФИАС некоторые сокращения ошибочно содержат в конце точку. Для поиска вариантов эту точку необходимо убрать. + СокращениеВарианта = ?( СтрЗаканчиваетсяНа(Вариант.Сокращение, "."), Лев(Вариант.Сокращение, СтрДлина(Вариант.Сокращение) - 1), Вариант.Сокращение); + + СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение", СокращениеВарианта, ТипАдресногоЭлемента)); Если СтрокиВариантов.Количество() > 0 Тогда Код = СтрокиВариантов[0].Идентификатор; Если Код = 90 Тогда @@ -4700,7 +4703,10 @@ Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); - Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2070", НСтр("ru = 'А/я'"), 3, 7)); + Результат.Добавить(СтрокаОбъектаАдресации("2080", НСтр("ru = 'В/ч'"), 3, 8)); + Результат.Добавить(СтрокаОбъектаАдресации("2090", НСтр("ru = 'П/о'"), 3, 9)); // Наши сокращения для поддержки обратной совместимости при парсинге. Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); @@ -5268,7 +5274,7 @@ // Функция ПередЧтениемXDTOКонтактнаяИнформация(ТекстXML) -Если СтрНайти(ТекстXML, "Адрес") = 0 Тогда + Если СтрНайти(ТекстXML, "Адрес") = 0 Тогда Возврат ТекстXML; КонецЕсли; @@ -6197,6 +6203,10 @@ КонецПроцедуры +Функция ПерваяБукваЗаглавная(Строка) + Возврат ВРег(Лев(Строка, 1)) + Сред(НРег(Строка), 2); // Использовать ТРег нельзя. +КонецФункции + #Область СлужебныйПрограммныйИнтерфейсФоновыеОперацииСКлассификатором // Обработчик фоновой загрузки. @@ -6211,7 +6221,7 @@ // Процедура ФоновоеЗаданиеЗагрузкиКлассификатораАдресовССайта(Параметры, АдресРезультата) Экспорт - ЗагрузитьКлассификаторАдресовССайта(Параметры[0], Параметры[1]); + ЗагрузитьКлассификаторАдресовССайта(Параметры[0]); КонецПроцедуры @@ -6320,10 +6330,6 @@ КонецФункции -Функция ПерваяБукваЗаглавная(Строка) - Возврат ВРег(Лев(Строка, 1)) + НРег(Сред(Строка, 2)); -КонецФункции - #КонецОбласти #Область ПереносУстаревшегоКлассификатора @@ -7548,7 +7554,7 @@ ПутьДляСохранения = ВременныйКаталог + ВРег(ФайлРегиона.ИмяФайла); ПараметрыПолучения.Вставить("ПутьДляСохранения", ПутьДляСохранения); - ПараметрыПолучения.Вставить("Таймаут", 240); + ПараметрыПолучения.Вставить("Таймаут", 180); ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ОписаниеРегиона.Адрес, ПараметрыПолучения); Если Не ЗагруженныйФайл.Статус Тогда УдалитьВременныйФайл(ВременныйКаталог); diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index d63fbf97f..1c27fe29b 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -50,8 +50,10 @@ Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.Анкета.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ЧитаемыеОбъекты = "Документ.Анкета"; Обработчик.ИзменяемыеОбъекты = "Документ.Анкета"; + Обработчик.БлокируемыеОбъекты = "Документ.Анкета"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.3.5.6"; @@ -62,20 +64,24 @@ Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.ВопросыШаблонаАнкеты.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ЧитаемыеОбъекты = "Справочник.ВопросыШаблонаАнкеты"; Обработчик.ИзменяемыеОбъекты = "Справочник.ВопросыШаблонаАнкеты"; + Обработчик.БлокируемыеОбъекты = "Справочник.ВопросыШаблонаАнкеты"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.3.5.6"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("a1581723-c1f5-4b90-b716-a180a4d5a4ad"); Обработчик.Процедура = "ПланыВидовХарактеристик.ВопросыДляАнкетирования.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Обработчик.Комментарий = НСтр("ru = 'Заполнение значения нового реквизита ""Вид переключателя"" плана видов характеристик ""Вопросы для анкетирования"". - |До завершения обработки ""Вид переключателя"" в данном плане видов характеристик будет отображаться некорректно.'"); + Обработчик.Комментарий = НСтр("ru = 'Заполнение значения нового реквизита ""Вид переключателя"" в списке ""Вопросы для анкетирования"". + |До завершения обработки ""Вид переключателя"" в данном списке будет отображаться некорректно.'"); Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ПроцедураЗаполненияДанныхОбновления = "ПланыВидовХарактеристик.ВопросыДляАнкетирования.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ЧитаемыеОбъекты = "ПланВидовХарактеристик.ВопросыДляАнкетирования"; Обработчик.ИзменяемыеОбъекты = "ПланВидовХарактеристик.ВопросыДляАнкетирования"; + Обработчик.БлокируемыеОбъекты = "ПланВидовХарактеристик.ВопросыДляАнкетирования"; КонецПроцедуры @@ -1293,7 +1299,7 @@ Элемент.АвтоМаксимальнаяШирина = Ложь; Элемент.РастягиватьПоГоризонтали = Истина; Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт, , 8); - + Если РеквизитыЭлементарногоВопроса.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Тогда Элемент = Форма.Элементы.Добавить(ИмяВопроса + "_Ответ_" + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ="),Тип("ПолеФормы"),ЭлементГруппа); @@ -1564,27 +1570,33 @@ Функция ПолучитьВыборкуРазделовПоШаблонуАнкеты(ШаблонАнкеты) Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, - | ВопросыШаблонаАнкеты.Формулировка, - | КоличествоВопросов.Количество + Запрос.Текст = " + |ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВопросыШаблонаАнкеты.Ссылка) КАК Количество, + | ВопросыШаблонаАнкеты.Родитель КАК Родитель + |ПОМЕСТИТЬ КоличествоВопросов |ИЗ | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВопросыШаблонаАнкеты.Ссылка) КАК Количество, - | ВопросыШаблонаАнкеты.Родитель КАК Родитель - | ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) - | - | СГРУППИРОВАТЬ ПО - | ВопросыШаблонаАнкеты.Родитель) КАК КоличествоВопросов + |ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | И НЕ ВопросыШаблонаАнкеты.ЭтоГруппа + | + |СГРУППИРОВАТЬ ПО + | ВопросыШаблонаАнкеты.Родитель + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, + | ВопросыШаблонаАнкеты.Формулировка КАК Формулировка, + | КоличествоВопросов.Количество КАК Количество + |ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + | ЛЕВОЕ СОЕДИНЕНИЕ КоличествоВопросов КАК КоличествоВопросов | ПО ВопросыШаблонаАнкеты.Ссылка = КоличествоВопросов.Родитель |ГДЕ | ВопросыШаблонаАнкеты.ЭтоГруппа - | И (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) + | И НЕ ВопросыШаблонаАнкеты.ПометкаУдаления | И ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты | |УПОРЯДОЧИТЬ ПО @@ -2065,28 +2077,28 @@ Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ - | НазначениеОпросов.Ссылка, - | НазначениеОпросов.СвободныйОпрос, - | НазначениеОпросов.ДатаОкончания, - | НазначениеОпросов.Наименование + | НазначениеОпросов.Ссылка КАК Ссылка, + | НазначениеОпросов.СвободныйОпрос КАК СвободныйОпрос, + | НазначениеОпросов.ДатаОкончания КАК ДатаОкончания, + | НазначениеОпросов.Наименование КАК Наименование |ПОМЕСТИТЬ ДействующиеОпросы |ИЗ | Документ.НазначениеОпросов КАК НазначениеОпросов |ГДЕ | НазначениеОпросов.Проведен - | И (НЕ НазначениеОпросов.ПометкаУдаления) + | И НЕ НазначениеОпросов.ПометкаУдаления | И НазначениеОпросов.ТипРеспондентов = &ТипРеспондентов - | И НЕ (НЕ НазначениеОпросов.ДатаНачала = &ПустаяДата - | И НЕ НАЧАЛОПЕРИОДА(НазначениеОпросов.ДатаНачала, ДЕНЬ) < &ТекущаяДата) - | И НЕ (НЕ НазначениеОпросов.ДатаОкончания = &ПустаяДата - | И НЕ КОНЕЦПЕРИОДА(НазначениеОпросов.ДатаОкончания, ДЕНЬ) > &ТекущаяДата) + | И НЕ(НЕ НазначениеОпросов.ДатаНачала = &ПустаяДата + | И НЕ НАЧАЛОПЕРИОДА(НазначениеОпросов.ДатаНачала, ДЕНЬ) < &ТекущаяДата) + | И НЕ(НЕ НазначениеОпросов.ДатаОкончания = &ПустаяДата + | И НЕ КОНЕЦПЕРИОДА(НазначениеОпросов.ДатаОкончания, ДЕНЬ) > &ТекущаяДата) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | ДействующиеОпросы.Ссылка, - | ДействующиеОпросы.ДатаОкончания, - | ДействующиеОпросы.Наименование + | ДействующиеОпросы.Ссылка КАК Ссылка, + | ДействующиеОпросы.ДатаОкончания КАК ДатаОкончания, + | ДействующиеОпросы.Наименование КАК Наименование |ПОМЕСТИТЬ ДействующиеОпросыОтборПоРеспонденту |ИЗ | ДействующиеОпросы КАК ДействующиеОпросы @@ -2111,57 +2123,62 @@ | ИЗ | ДействующиеОпросы КАК ДействующиеОпросы | ГДЕ - | (НЕ ДействующиеОпросы.СвободныйОпрос)) + | НЕ ДействующиеОпросы.СвободныйОпрос) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Анкета.Ссылка КАК Ссылка, + | Анкета.ДатаРедактирования КАК Дата, + | Анкета.Проведен КАК Проведен, + | Анкета.Опрос КАК Опрос + |ПОМЕСТИТЬ АнкетыПоДействующимЗапросам + |ИЗ + | Документ.Анкета КАК Анкета + |ГДЕ + | Анкета.Опрос В + | (ВЫБРАТЬ + | ДействующиеОпросыОтборПоРеспонденту.Ссылка + | ИЗ + | ДействующиеОпросыОтборПоРеспонденту КАК ДействующиеОпросыОтборПоРеспонденту) + | И Анкета.Респондент = &Респондент + | И НЕ Анкета.ПометкаУдаления |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВЫБОР - | КОГДА АнкетыПоДействующимЗапросам.Ссылка ЕСТЬ NULL + | КОГДА АнкетыПоДействующимЗапросам.Ссылка ЕСТЬ NULL | ТОГДА ""Опросы"" | ИНАЧЕ ""Анкеты"" | КОНЕЦ КАК Статус, | ВЫБОР - | КОГДА АнкетыПоДействующимЗапросам.Ссылка ЕСТЬ NULL + | КОГДА АнкетыПоДействующимЗапросам.Ссылка ЕСТЬ NULL | ТОГДА ДействующиеОпросыОтборПоРеспонденту.Ссылка | ИНАЧЕ АнкетыПоДействующимЗапросам.Ссылка | КОНЕЦ КАК АнкетаОпрос, | ДействующиеОпросыОтборПоРеспонденту.ДатаОкончания КАК ДатаОкончания, - | ДействующиеОпросыОтборПоРеспонденту.Наименование, + | ДействующиеОпросыОтборПоРеспонденту.Наименование КАК Наименование, | АнкетыПоДействующимЗапросам.Дата КАК ДатаАнкеты, | ЕСТЬNULL(АнкетыПоДействующимЗапросам.Проведен, ЛОЖЬ) КАК Проведен |ПОМЕСТИТЬ НеотвеченныеОпросыСохраненныеАнкеты |ИЗ | ДействующиеОпросыОтборПоРеспонденту КАК ДействующиеОпросыОтборПоРеспонденту - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | Анкета.Ссылка КАК Ссылка, - | Анкета.ДатаРедактирования КАК Дата, - | Анкета.Проведен КАК Проведен, - | Анкета.Опрос КАК Опрос - | ИЗ - | Документ.Анкета КАК Анкета - | ГДЕ - | Анкета.Опрос В - | (ВЫБРАТЬ - | ДействующиеОпросыОтборПоРеспонденту.Ссылка - | ИЗ - | ДействующиеОпросыОтборПоРеспонденту КАК ДействующиеОпросыОтборПоРеспонденту) - | И Анкета.Респондент = &Респондент - | И (НЕ Анкета.ПометкаУдаления)) КАК АнкетыПоДействующимЗапросам + | ЛЕВОЕ СОЕДИНЕНИЕ АнкетыПоДействующимЗапросам КАК АнкетыПоДействующимЗапросам | ПО ДействующиеОпросыОтборПоРеспонденту.Ссылка = АнкетыПоДействующимЗапросам.Опрос |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | НеотвеченныеОпросыСохраненныеАнкеты.Статус, - | НеотвеченныеОпросыСохраненныеАнкеты.АнкетаОпрос, - | НеотвеченныеОпросыСохраненныеАнкеты.ДатаОкончания, - | НеотвеченныеОпросыСохраненныеАнкеты.Наименование, - | НеотвеченныеОпросыСохраненныеАнкеты.ДатаАнкеты + | НеотвеченныеОпросыСохраненныеАнкеты.Статус КАК Статус, + | НеотвеченныеОпросыСохраненныеАнкеты.АнкетаОпрос КАК АнкетаОпрос, + | НеотвеченныеОпросыСохраненныеАнкеты.ДатаОкончания КАК ДатаОкончания, + | НеотвеченныеОпросыСохраненныеАнкеты.Наименование КАК Наименование, + | НеотвеченныеОпросыСохраненныеАнкеты.ДатаАнкеты КАК ДатаАнкеты |ИЗ | НеотвеченныеОпросыСохраненныеАнкеты КАК НеотвеченныеОпросыСохраненныеАнкеты |ГДЕ - | (НЕ НеотвеченныеОпросыСохраненныеАнкеты.Проведен)"; + | НЕ НеотвеченныеОпросыСохраненныеАнкеты.Проведен"; Запрос.УстановитьПараметр("Респондент", Респондент); Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index 81f70f735..11ab367d8 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -188,8 +188,8 @@ ЗафиксироватьТранзакцию(); Исключение - Результат = Ложь; ОтменитьТранзакцию(); + Результат = Ложь; Если Не ТолькоПроверка Тогда ВызватьИсключение; КонецЕсли; diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl index 7e472582c..81a211c82 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl @@ -74,7 +74,7 @@ КонецПроцедуры -// Вызывается из модулей объектов подсистемы Взаимодействия для +// Вызывается из модулей объектов подсистемы БизнесПроцессыИЗадачи для // возможности настройки логики ограничения в прикладном решении. // // Пример заполнения наборов значений доступа см. в комментарии diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index fd97ba9d6..580500fa9 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -1056,7 +1056,7 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистем.ПриОпределенииГруппИсполнителей. +// См. ИнтеграцияПодсистемБСП.ПриОпределенииГруппИсполнителей. Процедура ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра, НетГруппИсполнителей) Экспорт НетГруппИсполнителей = Ложь; diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 10b8c449c..c674b3d8e 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -1634,31 +1634,6 @@ Возврат Результат; КонецФункции -// См. СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. -Процедура СобратьСтатистикуКонфигурации() Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда - Возврат; - КонецЕсли; - - МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); - - ТекстЗапроса = - "ВЫБРАТЬ - | КОЛИЧЕСТВО(1) КАК Количество - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.Пользовательский"; - - Запрос = Новый Запрос(ТекстЗапроса); - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.ВариантыОтчетов.Пользовательский", Выборка.Количество()); - -КонецПроцедуры - // Формирует отчет с указанными параметрами. // // Параметры: @@ -2198,7 +2173,7 @@ Если ФильтрПоТипуОтчетов = Неопределено Или ФильтрПоТипуОтчетов = "Внутренний" Тогда НастроитьОтчетВМодулеМенеджера(ДеревоВариантов, Метаданные.Отчеты.УниверсальныйОтчет); // Подключаемые обработчики подсистем БСП. - ИнтеграцияСтандартныхПодсистем.ПриНастройкеВариантовОтчетов(ДеревоВариантов); + ИнтеграцияПодсистемБСП.ПриНастройкеВариантовОтчетов(ДеревоВариантов); // Переопределяемый модуль конфигурации. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(ДеревоВариантов); КонецЕсли; @@ -2275,7 +2250,7 @@ Функция ОбъектыСКомандамиОтчетов() Экспорт Результат = Новый Массив; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииОбъектовСКомандамиОтчетов(Результат); + ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСКомандамиОтчетов(Результат); ВариантыОтчетовПереопределяемый.ОпределитьОбъектыСКомандамиОтчетов(Результат); Возврат Результат; @@ -2504,6 +2479,7 @@ КомандыОтчетов.Индексы.Добавить("Обработана"); СтандартнаяОбработка = Источники.Строки.Количество() > 0; + ИнтеграцияПодсистемБСП.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); КомандыОтчетов.ЗаполнитьЗначения(Истина, "Обработана"); Если СтандартнаяОбработка Тогда @@ -2552,6 +2528,31 @@ КонецЦикла; КонецПроцедуры +// См. ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации. +Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(1) КАК Количество + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Пользовательский"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.ВариантыОтчетов.Пользовательский", Выборка.Количество()); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -3523,21 +3524,15 @@ ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш); //////////////////////////////////////////////////////////////////////////////// - // 4. Зарегистрировать ключевые операции. - Если Кэш.ОбновлятьЗамеры Тогда - ОбновитьЗамерыВариантов(Кэш); - КонецЕсли; - - //////////////////////////////////////////////////////////////////////////////// - // 5. Записать параметры в регистр. + // 4. Записать параметры в регистр. ЗаписатьПараметрыВариантовОтчетов(Кэш); //////////////////////////////////////////////////////////////////////////////// - // 6. Записать срез ключей вариантов отчетов расширений в регистр. + // 5. Записать срез ключей вариантов отчетов расширений в регистр. ЗафиксироватьТекущуюВерсиюРасширений(Кэш); //////////////////////////////////////////////////////////////////////////////// - // 7. Обновить разделенные данные в модели сервиса. + // 6. Обновить разделенные данные в модели сервиса. Если Кэш.МодельСервиса И Кэш.ЕстьВажныеИзменения Тогда Обработчики = Кэш.РазделенныеОбработчики; Если Обработчики = Неопределено Тогда @@ -4425,98 +4420,6 @@ ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"" (настройки)'"), АктуальноеНаименование); КонецПроцедуры -// Регистрирует изменения в таблице замеров. -Процедура ОбновитьЗамерыВариантов(Кэш) - // Регистрация глобальных ключевых операций. - СписокОпераций = СписокГлобальныхКлючевыхОпераций(); - Для Каждого ЭлементСписка Из СписокОпераций Цикл - ОбновлениеЗамера = Кэш.ТаблицаЗамеров.Добавить(); - ОбновлениеЗамера.СтароеИмя = ЭлементСписка.Значение; - ОбновлениеЗамера.АктуальноеИмя = ЭлементСписка.Значение; - ОбновлениеЗамера.АктуальноеНаименование = ЭлементСписка.Представление; - КонецЦикла; - - ПриОбновленииКлючевыхОпераций(Кэш.ТаблицаЗамеров); -КонецПроцедуры - -// Актуализирует состав указанных ключевых операций. -// -// Параметры: -// ТаблицаОбновленияКлючевыхОпераций - ТаблицаЗначений - Состав ключевых операций. -// * СтароеИмя - Строка - Старое имя ключевой операции. -// * АктуальноеИмя - Строка - Актуальное имя ключевой операции. -// * АктуальноеНаименование - Строка - Представление ключевой операции. -// -// Места использования: -// ВариантыОтчетов.ОбновитьЗамерыВариантов(). -// -Процедура ПриОбновленииКлючевыхОпераций(ТаблицаОбновленияКлючевыхОпераций) - ТекстЗапроса = - "ВЫБРАТЬ - | ТаблицаОбновленияКлючевыхОпераций.СтароеИмя КАК СтароеИмя, - | ТаблицаОбновленияКлючевыхОпераций.АктуальноеИмя КАК АктуальноеИмя, - | ТаблицаОбновленияКлючевыхОпераций.АктуальноеНаименование КАК АктуальноеНаименование - |ПОМЕСТИТЬ втТаблицаОбновления - |ИЗ - | &ТаблицаОбновленияКлючевыхОпераций КАК ТаблицаОбновленияКлючевыхОпераций - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | втТаблицаОбновления.АктуальноеИмя, - | втТаблицаОбновления.АктуальноеНаименование, - | ВЫБОР - | КОГДА НЕ АктуальныеОперации.Ссылка ЕСТЬ NULL - | ТОГДА 2 - | КОГДА НЕ СтарыеОперации.Ссылка ЕСТЬ NULL - | ТОГДА 1 - | ИНАЧЕ 3 - | КОНЕЦ КАК Приоритет, - | ЕСТЬNULL(АктуальныеОперации.Ссылка, СтарыеОперации.Ссылка) КАК Ссылка, - | ЕСТЬNULL(АктуальныеОперации.Имя, СтарыеОперации.Имя) КАК Имя, - | ЕСТЬNULL(АктуальныеОперации.Наименование, СтарыеОперации.Наименование) КАК Наименование - |ИЗ - | втТаблицаОбновления КАК втТаблицаОбновления - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючевыеОперации КАК АктуальныеОперации - | ПО втТаблицаОбновления.АктуальноеИмя = АктуальныеОперации.Имя - | И (АктуальныеОперации.ПометкаУдаления = ЛОЖЬ) - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючевыеОперации КАК СтарыеОперации - | ПО втТаблицаОбновления.СтароеИмя = СтарыеОперации.Имя - | И (СтарыеОперации.ПометкаУдаления = ЛОЖЬ) - | - |УПОРЯДОЧИТЬ ПО - | Приоритет УБЫВ"; - - МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ТаблицаОбновленияКлючевыхОпераций", ТаблицаОбновленияКлючевыхОпераций); - - Обработанные = Новый Массив; - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - АктуальноеИмя = Выборка.АктуальноеИмя; - Если Обработанные.Найти(АктуальноеИмя) = Неопределено Тогда - Обработанные.Добавить(АктуальноеИмя); - Иначе - Продолжить; // Уже обработана операция с таким именем и более высоким приоритетом. - КонецЕсли; - Если Выборка.Имя = АктуальноеИмя - И Выборка.Наименование = Выборка.АктуальноеНаименование Тогда - Продолжить; // Обновление не требуется. - КонецЕсли; - Если Выборка.Приоритет = 3 Тогда - КлючеваяОперацияСсылка = МодульОценкаПроизводительности.СоздатьКлючевуюОперацию(АктуальноеИмя); - Иначе - КлючеваяОперацияСсылка = Выборка.Ссылка; - КонецЕсли; - КлючеваяОперацияОбъект = КлючеваяОперацияСсылка.ПолучитьОбъект(); - КлючеваяОперацияОбъект.Имя = АктуальноеИмя; - КлючеваяОперацияОбъект.Наименование = Выборка.АктуальноеНаименование; - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(КлючеваяОперацияОбъект); - КонецЦикла; -КонецПроцедуры - // Шаблон таблицы для обновления замеров. Функция ТаблицаЗамеров() Результат = Новый ТаблицаЗначений; @@ -4526,17 +4429,6 @@ Возврат Результат; КонецФункции -// Возвращает список глобальных ключевых операций. -Функция СписокГлобальныхКлючевыхОпераций() - СписокОпераций = Новый СписокЗначений; - СписокОпераций.Добавить("ПанельОтчетов.Открытие", НСтр("ru = 'Панель отчетов (открытие)'")); - СписокОпераций.Добавить("ПанельОтчетов.Поиск", НСтр("ru = 'Панель отчетов (поиск в режиме просмотра)'")); - СписокОпераций.Добавить("ПанельОтчетов.РежимНастройки", НСтр("ru = 'Панель отчетов (режим настройки)'")); - СписокОпераций.Добавить("СписокОтчетов.Открытие", НСтр("ru = 'Список отчетов (открытие)'")); - СписокОпераций.Добавить("СписокОтчетов.Поиск", НСтр("ru = 'Список отчетов (поиск)'")); - Возврат СписокОпераций; -КонецФункции - // Запись параметров вариантов отчетов в регистр. // // Значение параметра: @@ -5370,9 +5262,9 @@ КонецЕсли; Если ПараметрыПоиска.Свойство("ПометкаУдаления") Тогда - ЕстьОтборПоПометкеУдаления = Истина; + ЕстьОтборПоПометкеУдаления = ПараметрыПоиска.ПометкаУдаления; Иначе - ЕстьОтборПоПометкеУдаления = Ложь; + ЕстьОтборПоПометкеУдаления = Истина; КонецЕсли; Если Не ЕстьОтборПоПодсистемам И Не ЕстьСтрокаПоиска И Не ЕстьОтборПоТипамОтчетов И Не ЕстьОтборПоОтчетам Тогда @@ -5401,6 +5293,7 @@ Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы); Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); Запрос.УстановитьПараметр("ТипОтчетаРасширение", Перечисления.ТипыОтчетов.Расширение); + Запрос.УстановитьПараметр("НетОтбораПоПометкеУдаления", НЕ ЕстьОтборПоПометкеУдаления); Если ЕстьОтборПоПодсистемам Или ЕстьСтрокаПоиска Тогда ТекстЗапроса = @@ -5458,6 +5351,7 @@ | ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) | И ВариантыОтчетов.Отчет В(&ОтчетыПользователя) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + | И &ПоказыватьЛичныеВариантыОтчетовДругихАвторов |; | |//////////////////////////////////////////////////////////////////////////////// @@ -5485,7 +5379,7 @@ | ИЗ | Варианты КАК ВариантыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение - | ПО (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) + | ПО (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) | И ВариантыОтчетов.Ссылка = ВариантыРазмещение.Ссылка | И (ВариантыРазмещение.Подсистема В (&МассивПодсистем))) КАК РазмещениеВариантов | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ @@ -5500,7 +5394,8 @@ | Варианты КАК ВариантыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) - | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) + | И &ПоказыватьЛичныеВариантыОтчетовДругихАвторов + | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеКонфигурации.Ссылка | И (РазмещениеКонфигурации.Подсистема В (&МассивПодсистем)) | @@ -5542,7 +5437,7 @@ | ПО РазмещениеВсех.Ссылка = Варианты.Ссылка |ГДЕ | ЕСТЬNULL(ЛичныеНастройки.Видимость, Варианты.ВидимостьПоУмолчанию) - | И Варианты.ПометкаУдаления = ЛОЖЬ + | И (Варианты.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -5572,7 +5467,7 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение | ПО ВариантыОтчетов.Ссылка = Размещение.Ссылка |ГДЕ - | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) | И &ПоискВариантовИПодсистем | |ОБЪЕДИНИТЬ ВСЕ @@ -5605,8 +5500,8 @@ |ГДЕ | Пользовательские.Пользователь = &ТекущийПользователь | И &ПоискПользовательскихНастроек - | И Пользовательские.ПометкаУдаления = ЛОЖЬ - | И Варианты.ПометкаУдаления = ЛОЖЬ"; + | И (Пользовательские.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) + | И (Варианты.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления)"; Если Не ПравоЧтенияАвторов Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Автор КАК Автор", "НЕОПРЕДЕЛЕНО КАК Автор"); @@ -5663,16 +5558,6 @@ КонецЕсли; КонецЕсли; - Если ЕстьОтборПоПометкеУдаления Тогда - Если ПараметрыПоиска.ПометкаУдаления <> Ложь Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПометкаУдаления = ЛОЖЬ", ".ПометкаУдаления = ИСТИНА"); - КонецЕсли; - Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ", ""); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И НЕ ЕСТЬNULL(ВариантыКонфигурации.ПометкаУдаления, ЕСТЬNULL(ВариантыРасширений.ПометкаУдаления, ЛОЖЬ))", ""); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Пользовательские.ПометкаУдаления = ЛОЖЬ", ""); - КонецЕсли; - Если ЕстьСтрокаПоиска Тогда СтрокаПоиска = ВРег(СокрЛП(ПараметрыПоиска.СтрокаПоиска)); ШаблонПоиска = ""; @@ -5832,7 +5717,8 @@ | И НЕ(ВариантыОтчетов.Пользовательский | И ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) | И НЕ(НЕ ВариантыОтчетов.Пользовательский - | И ВариантыОтчетов.ПометкаУдаления)"; + | И ВариантыОтчетов.ПометкаУдаления) + | И &ПоказыватьЛичныеВариантыОтчетовДругихАвторов"; Если ЕстьОтборПоТипамОтчетов Тогда Запрос.УстановитьПараметр("ТипыОтчетов", ПараметрыПоиска.ТипыОтчетов); @@ -5844,25 +5730,11 @@ ""); КонецЕсли; - Если ЕстьОтборПоПометкеУдаления Тогда - Если ПараметрыПоиска.ПометкаУдаления <> Ложь Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПометкаУдаления = ЛОЖЬ", ".ПометкаУдаления = ИСТИНА"); - КонецЕсли; - Иначе - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВЫБОР - | КОГДА ВариантыОтчетов.Пользовательский - | ТОГДА ВариантыОтчетов.ИнтерактивнаяПометкаУдаления - | КОГДА ВариантыОтчетов.ТипОтчета = &ТипОтчетаРасширение - | ТОГДА ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL - | ИНАЧЕ ЕСТЬNULL(ВариантыКонфигурации.ПометкаУдаления, ВариантыОтчетов.ПометкаУдаления) - | КОНЕЦ КАК ПометкаУдаления", - "ЛОЖЬ КАК ПометкаУдаления"); - КонецЕсли; - КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоказыватьЛичныеВариантыОтчетовДругихАвторов", + ?(Пользователи.ЭтоПолноправныйПользователь(), "Истина", "(ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь)")); Запрос.Текст = ТекстЗапроса; Результат = Новый Структура; diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index 8f342304b..3bf936983 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -292,9 +292,6 @@ Если Не Форма.Модифицированность Тогда Форма.Модифицированность = Истина; КонецЕсли; - #Если ВебКлиент Тогда - Форма.ОбновитьОтображениеДанных(); // Для платформы. - #КонецЕсли КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index 90d8cfdbd..d10852ce8 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -110,6 +110,105 @@ КонецПроцедуры +// Возвращает признак использования версионирования для указанного объекта метаданных. +// +// Параметры: +// ИмяОбъекта - Строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". +// +// Возвращаемое значение: +// Булево - Истина, если включено. +// +Функция ВключеноВерсионированиеОбъекта(ИмяОбъекта) Экспорт + СписокОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИмяОбъекта); + Возврат ВключеноВерсионированиеОбъектов(СписокОбъектов)[ИмяОбъекта]; +КонецФункции + +// Возвращает признак использования версионирования для списка объектов. +// +// Параметры: +// СписокОбъектов - Массив - список имен объектов метаданных. +// +// Возвращаемое значение: +// Соответствие - результат проверки: +// * Ключ - Строка - имя объекта метаданных. +// * Значение - Булево - включено или выключено версионирование. +// +Функция ВключеноВерсионированиеОбъектов(СписокОбъектов) Экспорт + + СоответствиеТипов = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(СписокОбъектов); + ТипыОбъектов = Новый Массив; + Для Каждого Элемент Из СоответствиеТипов Цикл + ТипыОбъектов.Добавить(Элемент.Значение); + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ + | ИдентификаторыОбъектовМетаданных.ПолноеИмя КАК ИмяОбъекта, + | ЕСТЬNULL(НастройкиВерсионированияОбъектов.Использовать, ЛОЖЬ) КАК ВключеноВерсионирование + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВерсионированияОбъектов КАК НастройкиВерсионированияОбъектов + | ПО НастройкиВерсионированияОбъектов.ТипОбъекта = ИдентификаторыОбъектовМетаданных.Ссылка + |ГДЕ + | ИдентификаторыОбъектовМетаданных.Ссылка В(&ТипыОбъектов)"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ТипыОбъектов", ТипыОбъектов); + + Результат = Новый Соответствие; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Результат.Вставить(Выборка.ИмяОбъекта, Выборка.ВключеноВерсионирование); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Включает версионирования для указанного объекта метаданных. +// +// Параметры: +// ИмяОбъекта - Строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". +// ВариантВерсионирования - ПеречислениеСсылка.ВариантыВерсионированияОбъектов - вариант версионирования объекта. +// +Процедура ВключитьВерсионированиеОбъекта(ИмяОбъекта, Знач ВариантВерсионирования = Неопределено) Экспорт + + Если ВариантВерсионирования = Неопределено Тогда + ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи; + КонецЕсли; + + Если ТипЗнч(ВариантВерсионирования) = Тип("Строка") Тогда + Если Метаданные.Перечисления.ВариантыВерсионированияОбъектов.ЗначенияПеречисления.Найти(ВариантВерсионирования) <> Неопределено Тогда + ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов[ВариантВерсионирования]; + КонецЕсли; + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неизвестный вариант версионирования: ""%1""'"), ВариантВерсионирования); + ОбщегоНазначенияКлиентСервер.Проверить(ТипЗнч(ВариантВерсионирования) = Тип("ПеречислениеСсылка.ВариантыВерсионированияОбъектов"), + ТекстОшибки, "ВерсионированиеОбъектов.ВключитьВерсионированиеОбъекта"); + + Если Не ВключеноВерсионированиеОбъекта(ИмяОбъекта) Тогда + ЗаписатьНастройкуВерсионированияПоОбъекту(ИмяОбъекта, ВариантВерсионирования); + КонецЕсли; + +КонецПроцедуры + +// Включает версионирования для указанных объектов метаданных. +// +// Параметры: +// Объекты - Соответствие - объекты, для которых надо включить версионирование: +// * Ключ - Строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". +// * Значение - ПеречислениеСсылка.ВариантыВерсионированияОбъектов - вариант версионирования объекта. +// +Процедура ВключитьВерсионированиеОбъектов(Объекты) Экспорт + + Для Каждого Объект Из Объекты Цикл + ВключитьВерсионированиеОбъекта(Объект); + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -936,8 +1035,8 @@ КонецПроцедуры -// См. СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. -Процедура СобратьСтатистикуКонфигурации() Экспорт +// См. ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации. +Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда Возврат; @@ -2898,7 +2997,6 @@ ПользовательскоеПредставлениеНомера, Формат(Информация.ДатаВерсии, "ДЛФ=DT"))); - НачатьТранзакцию(); РежимЗаписи = Неопределено; ИдентификаторОшибки = "ОшибкаВосстановления"; @@ -2912,9 +3010,10 @@ ИдентификаторОшибки = "ОшибкаПроведения"; КонецЕсли; - ЗаписатьДанныеТекущейВерсии(Ссылка); - ВыполняетсяЗаписьОбъекта(Истина); + НачатьТранзакцию(); Попытка + ЗаписатьДанныеТекущейВерсии(Ссылка); + ВыполняетсяЗаписьОбъекта(Истина); Если ЗначениеЗаполнено(РежимЗаписи) Тогда Объект.Записать(РежимЗаписи); Иначе @@ -2931,8 +3030,8 @@ ЗаписатьВерсиюОбъекта(Объект); ЗафиксироватьТранзакцию(); Исключение - ВыполняетсяЗаписьОбъекта(Ложь); ОтменитьТранзакцию(); + ВыполняетсяЗаписьОбъекта(Ложь); ТекстСообщенияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат ИдентификаторОшибки; КонецПопытки; diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index 40522a79c..15cdbb6a9 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -566,9 +566,11 @@ Обработчик.Идентификатор = Новый УникальныйИдентификатор("301d4867-5fb2-45ff-9d32-dc3e5da008df"); Обработчик.Процедура = "Документы.ЭлектронноеПисьмоВходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.ЭлектронноеПисьмоВходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисемКОбработке"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ЧитаемыеОбъекты = "Документ.ЭлектронноеПисьмоВходящее, Документ.ЭлектронноеПисьмоИсходящее"; Обработчик.ИзменяемыеОбъекты = "Документ.ЭлектронноеПисьмоВходящее"; + Обработчик.БлокируемыеОбъекты = "Документ.ЭлектронноеПисьмоВходящее"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; @@ -581,60 +583,21 @@ Приоритет.Порядок = "Любой"; Обработчик.Комментарий = НСтр("ru = 'Выполняет дозаполнение реквизита ВзаимодействиеОснование для входящих писем, у которых письмо основание в ИБ есть, но оно не указано.'"); - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.3.3.28"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Идентификатор = Новый УникальныйИдентификатор("1c4d3aef-eb91-49d9-aa76-06ee605e9c82"); - Обработчик.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисемКОбработке"; - Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ЧитаемыеОбъекты = "Документ.ЭлектронноеПисьмоВходящее, Документ.ЭлектронноеПисьмоИсходящее"; - Обработчик.ИзменяемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; - Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоВходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; - Приоритет.Порядок = "Любой"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьСписокКонтактовИсходящихЭлектронныхПисем"; - Приоритет.Порядок = "До"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Приоритет.Порядок = "Любой"; - Обработчик.Комментарий = НСтр("ru = 'Выполняет дозаполнение реквизита ВзаимодействиеОснование для исходящее писем, у которых письмо основание в ИБ есть, но оно не указано.'"); - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.3.4.118"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Идентификатор = Новый УникальныйИдентификатор("eb7fe7da-ffd1-437f-85c7-8d673c79c4f0"); - Обработчик.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьСписокКонтактовИсходящихЭлектронныхПисем"; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.ЭлектронноеПисьмоИсходящее.ОпределитьНезаполненныеКонтактыВИсходящихЭлектронныхПисьмах"; - Обработчик.ОчередьОтложеннойОбработки = 2; - Обработчик.ЧитаемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; - Обработчик.ИзменяемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; - Обработчик.Комментарий = НСтр("ru = 'Выполняет определение контакта по электронной почте для исходящих писем, у которых он не установлен.'"); - Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоВходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; - Приоритет.Порядок = "После"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; - Приоритет.Порядок = "После"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Приоритет.Порядок = "Любой"; - Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.3.6.76"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("35e85660-7125-4079-b5df-5a71dbb43a48"); Обработчик.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.Комментарий = НСтр("ru = 'Перенос данных из реквизита одного ИдентификаторСообщенияОтправкаIMAP в другой для предотвращения потери данных. - |при переходе на последующие релизы.'"); + |при переходе на последующие релизы. + |Выполняет дозаполнение реквизита ВзаимодействиеОснование для исходящих писем, у которых письмо основание в ИБ есть, но оно не указано'"); Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 3; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.ЭлектронноеПисьмоИсходящее.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ЧитаемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; Обработчик.ИзменяемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; + Обработчик.БлокируемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьСписокКонтактовИсходящихЭлектронныхПисем"; @@ -652,7 +615,8 @@ Обработчик.Процедура = "Взаимодействия.ОбновитьПерсональныеУчетныеЗаписи"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("d57f7a36-46ca-4a52-baab-db960e3d376d"); - Обработчик.Комментарий = НСтр("ru = 'Обновляет сведения о персональных учетных записях.'"); + Обработчик.Комментарий = НСтр("ru = 'Обновляет сведения о персональных учетных записях электронной почты. + |До завершения обработки список персональных учетных записей электронной почты может быть неполным.'"); Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Взаимодействия.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; Обработчик.ЧитаемыеОбъекты = "РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты, Справочник.УчетныеЗаписиЭлектроннойПочты"; @@ -660,6 +624,15 @@ КонецПроцедуры +// См. РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов. +Процедура ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Документы.СообщениеSMS); + Объекты.Добавить(Метаданные.Документы.ЭлектронноеПисьмоВходящее); + Объекты.Добавить(Метаданные.Документы.ЭлектронноеПисьмоИсходящее); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1501,11 +1474,11 @@ |ИЗ | Справочник.Пользователи КАК СправочникКонтакт | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация - | ПО (ТаблицаКонтактнаяИнформация.Ссылка = Таблица.Ссылка) + | ПО (ТаблицаКонтактнаяИнформация.Ссылка = СправочникКонтакт.Ссылка) | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)) |ГДЕ - | Таблица.Наименование ПОДОБНО &Наименование - | И (НЕ Таблица.ПометкаУдаления)"; + | СправочникКонтакт.Наименование ПОДОБНО &Наименование + | И (НЕ СправочникКонтакт.ПометкаУдаления)"; Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл @@ -2651,7 +2624,7 @@ ИначеЕсли ПротоколПочты = "Все" Тогда ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма ,Соединение, ""); ПараметрыПисьма.Вставить("ПротоколПочты","IMAP"); - Объект.ИдентификаторСообщенияОтправкаIMAP = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма ,Соединение, "IMAP"); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма ,Соединение, "IMAP"); КонецЕсли; Возврат ИдентификаторПисьма; @@ -3704,11 +3677,11 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяДокумента); ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаПисьма.Письмо); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Исключение + ОтменитьТранзакцию(); СоответствиеОбработанныхДокументов.Вставить(ВыборкаПисьма.Письмо); ТекстСообщения = НСтр("ru = 'Не удалось заблокировать документ: %Регистратор% по причине: %Причина%'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Регистратор%", ВыборкаПисьма.Письмо); @@ -3720,27 +3693,23 @@ ТекстСообщения); Продолжить; - ОтменитьТранзакцию(); - КонецПопытки; - Попытка ПисьмоОбъект = ВыборкаПисьма.Письмо.ПолучитьОбъект(); Если ПисьмоОбъект = Неопределено Тогда СоответствиеОбработанныхДокументов.Вставить(ВыборкаПисьма.Письмо); - Продолжить; + Иначе + ПисьмоОбъект.ВзаимодействиеОснование = ВыборкаПисьма.ПисьмоОснование; + + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПисьмоОбъект, Истина); + + СоответствиеОбработанныхДокументов.Вставить(ВыборкаПисьма.Письмо); + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВыборкаПисьма.Письмо,, Параметры.Очередь); КонецЕсли; - ПисьмоОбъект.ВзаимодействиеОснование = ВыборкаПисьма.ПисьмоОснование; - - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПисьмоОбъект, Истина); - - СоответствиеОбработанныхДокументов.Вставить(ВыборкаПисьма.Письмо); - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВыборкаПисьма.Письмо,, Параметры.Очередь); - ЗафиксироватьТранзакцию(); Исключение @@ -4431,12 +4400,12 @@ ТекстHTML = "" + ТекстHTML + "" КонецЕсли; - ТекстHTML = СодержимоеТегаHTML(ТекстHTML, "html", Истина); - ТаблицаФайлов = ПолучитьВложенияПисьмаСНеПустымИД(Письмо); Если ТаблицаФайлов.Количество() Тогда + ТекстHTML = СодержимоеТегаHTML(ТекстHTML, "html", Истина); + ДокументHTML = ЗаменитьИдентификаторыКартинокНаПутьКФайлам(ТекстHTML, ТаблицаФайлов, Кодировка); Возврат ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML); @@ -4455,12 +4424,13 @@ КонецФункции -// Находит в HTML содержимое? находящееся в теге. +// Находит в HTML содержимое находящееся в теге. // // Параметры: // Текст - Строка - текст XML, в котором выполняется поиск. // ИмяТега - Строка - тег, содержимое которого необходимо найти. -// ВключатьОткрывающийЗакрывающийТег - Булево - признак того, что найденное включает открывающий и закрывающий тег, по умолчанию Ложь. +// ВключатьОткрывающийЗакрывающийТег - Булево - признак того, что найденное включает открывающий и закрывающий тег, по +// умолчанию Ложь. // НомерПоПорядку - Число - позиция, с которой начинается поиск, по умолчанию 1. // // Возвращаемое значение: @@ -5590,6 +5560,8 @@ Возврат; КонецЕсли; + ВыборкаДокументы = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -5597,8 +5569,6 @@ Возврат; КонецЕсли; - ВыборкаДокументы = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - Пока ВыборкаДокументы.Следующий() Цикл ТаблицаАдресатовСообщения.Очистить(); @@ -5643,6 +5613,7 @@ Исключение + ОтменитьТранзакцию(); ТекстСообщения = НСтр("ru = 'Не удалось отправить : %Ссылка% по причине: %Причина%'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", ВыборкаДокументы.Ссылка); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -5651,15 +5622,10 @@ МетаданныеДокумента, ВыборкаДокументы.Ссылка, ТекстСообщения); - ОтменитьТранзакцию(); КонецПопытки; КонецЦикла; - - ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Закончена регламентная отправка сообщений SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); КонецПроцедуры @@ -5670,10 +5636,6 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS); - Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") Тогда - Возврат; - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); МетаданныеДокумента = Метаданные.Документы.СообщениеSMS; @@ -5757,6 +5719,7 @@ Исключение + ОтменитьТранзакцию(); ТекстСообщения = НСтр("ru = 'Не удалось обновить статусы доставки : %Ссылка% по причине: %Причина%'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", ВыборкаДокументы.Ссылка); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -5765,7 +5728,6 @@ МетаданныеДокумента, ВыборкаДокументы.Ссылка, ТекстСообщения); - ОтменитьТранзакцию(); КонецПопытки; @@ -6206,8 +6168,8 @@ Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ - | ПравилаОбработкиЭлектроннойПочты.КомпоновщикНастроек, - | ПравилаОбработкиЭлектроннойПочты.ПомещатьВПапку + | ПравилаОбработкиЭлектроннойПочты.КомпоновщикНастроек КАК КомпоновщикНастроек, + | ПравилаОбработкиЭлектроннойПочты.ПомещатьВПапку КАК ПомещатьВПапку |ИЗ | Справочник.ПравилаОбработкиЭлектроннойПочты КАК ПравилаОбработкиЭлектроннойПочты |ГДЕ @@ -6218,6 +6180,7 @@ | ЖурналДокументов.Взаимодействия КАК Взаимодействия | ГДЕ | Взаимодействия.Ссылка = &Письмо) + | И НЕ ПравилаОбработкиЭлектроннойПочты.ПометкаУдаления | |УПОРЯДОЧИТЬ ПО | ПравилаОбработкиЭлектроннойПочты.РеквизитДопУпорядочивания"; diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index 08d821d31..6d75f7f07 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -9,7 +9,8 @@ // Контакт - Ссылка - контакт для которого получается информация. // Представление - Строка - в данный параметр будет помещено полученное представление. // СтрокаКИ - Строка - в данный параметр будет помещено полученная контактная информация. -// ТипКонтактнойИнформации - Перечисления.ТипыКонтактнойИнформации - возможность установить отбор по типу получаемой контактной информации. +// ТипКонтактнойИнформации - Перечисления.ТипыКонтактнойИнформации - возможность установить отбор по типу получаемой +// контактной информации. // Процедура ПредставлениеИВсяКонтактнаяИнформациюКонтакта(Контакт, Представление, СтрокаКИ,ТипКонтактнойИнформации = Неопределено) Экспорт @@ -214,21 +215,49 @@ КонецФункции +Функция ОтправитьПолучитьПочтуПользователяВФоне(УникальныйИдентификатор) Экспорт + + ПараметрыПроцедуры = Новый Структура; + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение и отправка электронной почты пользователя'"); + + ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне( + "ВзаимодействияВызовСервера.ОтправитьЗагрузитьПочтуПользователя", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + Возврат ДлительнаяОперация; + +КонецФункции + // Выполняет отправку писем пользователя и // получение электронной почты по доступным для пользователя учетным записям. // -// Параметры: +// Возвращаемое значение: +// Структура // Получено - Число - в данный параметр будет возвращено количество полученных писем. // ДоступноУчетныхЗаписей - Число - в данный параметр будет возвращено количество доступных пользователю учетных // записей. // ЕстьОшибки - Булево - признак наличия ошибок при получении писем. // -Процедура ОтправитьЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки) Экспорт +Функция ОтправитьЗагрузитьПочтуПользователя(ПараметрыВыгрузки, АдресХранилища) Экспорт + + ПолученоПисем = 0; + ДоступноУчетныхЗаписей = 0; + ЕстьОшибки = Ложь; УправлениеЭлектроннойПочтой.ОтправитьПочтуПользователя(); - УправлениеЭлектроннойПочтой.ЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки) + УправлениеЭлектроннойПочтой.ЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки); -КонецПроцедуры + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("ПолученоПисем", ПолученоПисем); + СтруктураВозврата.Вставить("ДоступноУчетныхЗаписей", ДоступноУчетныхЗаписей); + СтруктураВозврата.Вставить("ЕстьОшибки", ЕстьОшибки); + + ПоместитьВоВременноеХранилище(СтруктураВозврата, АдресХранилища); + +КонецФункции /////////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с взаимодействиями. @@ -468,6 +497,14 @@ КонецФункции +Функция РезультатОтправкиПолученияПочтыПользователя(АдресРезультата) Экспорт + + Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + Возврат Результат; + +КонецФункции + + Функция СтруктураДанныхФайла() СтруктураДанныхФайла = Новый Структура; diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index 01557cea4..eff0a517b 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -615,7 +615,7 @@ Если ДанныеСобытия.Href <> Неопределено Тогда СтандартнаяОбработка = ЛОЖЬ; - ОбщегоНазначенияКлиент.ПерейтиПоСсылке(ДанныеСобытия.Href); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ДанныеСобытия.Href); КонецЕсли; diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl index 4cda5b344..b138ae15f 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl @@ -6,7 +6,7 @@ // Структура - коллекция параметров: // * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте. // * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать и обновлять компоненту. -// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. // * ИдентификаторыСозданияОбъектов - Массив - идентификатор создания экземпляра модуля объекта, // используется только для компонент, у которых есть несколько идентификаторов создания объектов, // при задании параметр Идентификатор будет использоваться только для определения компоненты. @@ -37,7 +37,7 @@ // Оповещение - ОписаниеОповещения - Описание оповещения о подключении со следующими параметрами: // * Результат - Структура - результат подключения компоненты: // ** Подключено - Булево - признак подключения. -// ** ПодключаемыйМодуль - AddIn - экземпляр объекта внешней компоненты. +// ** ПодключаемыйМодуль - AddIn - экземпляр объекта внешней компоненты; // - ФиксированноеСоответствие - экземпляры объектов внешней компоненты, // указанные в ПараметрыПодключения.ИдентификаторыСозданияОбъектов, // Ключ - Идентификатор, Значение - экземпляр объекта. @@ -169,8 +169,7 @@ // // Возвращаемое значение: // Структура - коллекция параметров: -// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать -// (только для веб клиента). +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. // // Пример: // diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl index 11450a7e4..fe511a490 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl @@ -752,7 +752,7 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики выполнения регламентный заданий. -// Обновление всех компонент регламентным заданием. +// Обновление всех компонент. // Процедура ОбновитьВсеКомпонентыССайта() Экспорт diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl index c07e9d0eb..4e775c5db 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl @@ -107,7 +107,7 @@ // Ответ: // - Структура - Выполнено - результат в структуре. - // - Неопределено - Отменено пользователем. + // - Неопределено - Отменено пользователем. Если Результат = Неопределено Тогда // Освобождаем выделенную память. @@ -157,7 +157,7 @@ КонецЕсли; - Контекст.Вставить("Местоположение", Информация.Местоположение); + Контекст.Вставить("Местоположение", Информация.Местоположение); ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпоненту(Контекст); @@ -200,7 +200,7 @@ |возможно только в тонком и толстом клиенте Windows'")); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - + КонецПроцедуры // Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows. @@ -236,7 +236,7 @@ Результат.Вставить("Подключено" , Ложь); Результат.Вставить("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); КонецПроцедуры @@ -253,7 +253,7 @@ ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); КонецПроцедуры - + #КонецОбласти #Область УстановкаВнешнейКомпоненты @@ -292,12 +292,12 @@ Возврат; КонецЕсли; - + Информация = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. // Освобождаем выделенную память. УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. - + Доступна = ПроверитьДоступностьКомпоненты(Информация); Если Не Доступна Тогда @@ -313,7 +313,7 @@ ПараметрыФормы,,,,, ОповещениеФормы); Возврат; - + КонецЕсли; Контекст.Вставить("Местоположение", Информация.Местоположение); @@ -403,7 +403,7 @@ // Ссылка - СправочникСсылка.ВнешниеКомпоненты - контейнер внешней компоненты в информационной базе. // Процедура СохранитьКомпонентуВФайл(Ссылка) Экспорт - + Контекст = Новый Структура; Контекст.Вставить("Ссылка", Ссылка); diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index e18d976c4..75f01350e 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -182,6 +182,12 @@ ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ТекущийОбъект)); ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ДействующиеДаты = ДатыЗапретаИзмененияСлужебный.ДействующиеДатыЗапрета(); + ИсточникиДанных = ДействующиеДаты.ИсточникиДанных.Получить(ПолноеИмя); + Если ИсточникиДанных = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Если ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда // Приведение менеджера записи к набору записей с одной записью. МенеджерДанных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); @@ -203,6 +209,8 @@ Форма.ТолькоПросмотр = Истина; КонецЕсли; + Возврат Ложь; + КонецФункции // Добавляет строку описания источника данных для проверки запрета изменения. diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index 6fb1f0284..fdfb459b5 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -156,7 +156,7 @@ // Обработчики событий подсистемы Пользователи. -// См. ИнтеграцияСтандартныхПодсистем.ПослеОбновленияСоставовГруппПользователей. +// См. ИнтеграцияПодсистемБСП.ПослеОбновленияСоставовГруппПользователей. Процедура ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы) Экспорт ОбновитьВерсиюДатЗапретаИзменения(); @@ -358,6 +358,8 @@ Возврат; КонецЕсли; + ИзменениеЗапрещено = Ложь; + Если НЕ ИсточникРегистр И НЕ Источник.ЭтоНовый() И НЕ Удаление Тогда @@ -368,7 +370,7 @@ ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда - Отказ = Истина; + ИзменениеЗапрещено = Истина; КонецЕсли; ИначеЕсли ИсточникРегистр И Замещение Тогда @@ -379,7 +381,7 @@ ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда - Отказ = Истина; + ИзменениеЗапрещено = Истина; КонецЕсли; ИначеЕсли ТипЗнч(Источник) = Тип("УдалениеОбъекта") Тогда @@ -391,7 +393,7 @@ ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда - Отказ = Истина; + ИзменениеЗапрещено = Истина; КонецЕсли; Иначе @@ -406,7 +408,7 @@ ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда - Отказ = Истина; + ИзменениеЗапрещено = Истина; КонецЕсли; КонецЕсли; @@ -417,7 +419,11 @@ ДополнительныеПараметры.Вставить("СообщитьОЗапрете", СообщитьОЗапрете); КонецЕсли; - Если Не Отказ Или Не СообщитьОЗапрете Тогда + Если ИзменениеЗапрещено Тогда + Отказ = Истина; + КонецЕсли; + + Если Не (ИзменениеЗапрещено И СообщитьОЗапрете) Тогда Возврат; КонецЕсли; @@ -1531,7 +1537,7 @@ ИсточникиДанных.Колонки.Добавить("ПолеОбъекта", Новый ОписаниеТипов("Строка")); ИсточникиДанных.Индексы.Добавить("Таблица"); - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииИсточниковДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных); + ИнтеграцияПодсистемБСП.ПриЗаполненииИсточниковДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных); ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных); Источники = Новый Соответствие; diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index 1c43ad621..459c2fdfc 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -333,6 +333,14 @@ Возврат; КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + Если ПараметрыСеанса.ОтмененныеДлительныеОперации.Найти(ИдентификаторЗадания) = Неопределено Тогда + ОтмененныеДлительныеОперации = Новый Массив(ПараметрыСеанса.ОтмененныеДлительныеОперации); + ОтмененныеДлительныеОперации.Добавить(ИдентификаторЗадания); + ПараметрыСеанса.ОтмененныеДлительныеОперации = Новый ФиксированныйМассив(ОтмененныеДлительныеОперации); + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания); Если Задание = Неопределено ИЛИ Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда @@ -401,6 +409,42 @@ КонецФункции +// Получает сообщения пользователю, отфильтровывает служебные сообщения о состоянии длительной операции. +// +// Параметры: +// УдалятьПолученные - Булево - Признак необходимости удаления полученных сообщений. +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. +// +// Возвращаемое значение: +//  Массив - ФиксированныйМассив - Массив объектов СообщениеПользователю, которые были сформированы в +// фоновом задании. +Функция СообщенияПользователю(УдалятьПолученные = Ложь, ИдентификаторЗадания = Неопределено) Экспорт + + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + Если ФоновоеЗадание <> Неопределено Тогда + ВсеСообщения = ФоновоеЗадание.ПолучитьСообщенияПользователю(УдалятьПолученные); + КонецЕсли; + Иначе + ВсеСообщения = ПолучитьСообщенияПользователю(УдалятьПолученные); + КонецЕсли; + + Результат = Новый Массив; + + Для Каждого Сообщение Из ВсеСообщения Цикл + Если СтрНачинаетсяС(Сообщение.Текст, "{" + СообщениеПрогресса() + "}") Тогда + Если УдалятьПолученные Тогда + Сообщение.Сообщить(); + КонецЕсли; + Иначе + Результат.Добавить(Сообщение); + КонецЕсли; + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -441,7 +485,25 @@ КонецЕсли; Если Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда - Результат.Статус = "Отменено"; + УстановитьПривилегированныйРежим(Истина); + Если ПараметрыСеанса.ОтмененныеДлительныеОперации.Найти(ИдентификаторЗадания) = Неопределено Тогда + Результат.Статус = "Ошибка"; + Если Задание.ИнформацияОбОшибке <> Неопределено Тогда + Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Операция отменена администратором.'"); + Результат.ПодробноеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки; + КонецЕсли; + Если ИсключениеПриОшибке Тогда + Если Не ПустаяСтрока(Результат.КраткоеПредставлениеОшибки) Тогда + ТекстСообщения = Результат.КраткоеПредставлениеОшибки; + Иначе + ТекстСообщения = НСтр("ru = 'Не удалось выполнить данную операцию.'"); + КонецЕсли; + ВызватьИсключение ТекстСообщения; + КонецЕсли; + Иначе + Результат.Статус = "Отменено"; + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); Возврат Результат; КонецЕсли; @@ -506,41 +568,15 @@ ОбщегоНазначения.ВыполнитьМетодОбъекта(Отчет, Параметры.ИмяМетода, ПараметрыМетода); КонецПроцедуры -// Получает сообщения пользователю, отфильтровывает служебные сообщения о состоянии длительной операции. -// -// Параметры: -// УдалятьПолученные - Булево - Признак необходимости удаления полученных сообщений. -// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. -// -// Возвращаемое значение: -//  Массив - ФиксированныйМассив - Массив объектов СообщениеПользователю, которые были сформированы в -// фоновом задании. -Функция СообщенияПользователю(УдалятьПолученные = Ложь, ИдентификаторЗадания = Неопределено) Экспорт +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); - Если ФоновоеЗадание <> Неопределено Тогда - ВсеСообщения = ФоновоеЗадание.ПолучитьСообщенияПользователю(УдалятьПолученные); - КонецЕсли; - Иначе - ВсеСообщения = ПолучитьСообщенияПользователю(УдалятьПолученные); + Если ИмяПараметра = "ОтмененныеДлительныеОперации" Тогда + ПараметрыСеанса.ОтмененныеДлительныеОперации = Новый ФиксированныйМассив(Новый Массив); + УстановленныеПараметры.Добавить("ОтмененныеДлительныеОперации"); КонецЕсли; - Результат = Новый Массив; - - Для Каждого Сообщение Из ВсеСообщения Цикл - Если СтрНачинаетсяС(Сообщение.Текст, "{" + СообщениеПрогресса() + "}") Тогда - Если УдалятьПолученные Тогда - Сообщение.Сообщить(); - КонецЕсли; - Иначе - Результат.Добавить(Сообщение); - КонецЕсли; - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Результат); - -КонецФункции +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index 874faea9b..12bf52064 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -2881,8 +2881,7 @@ ИмяФайлаСообщений = Параметры.РабочийКаталог + "Выгрузка.log"; - КодВозврата = NULL; - ЗапуститьПриложение(Кавычка + Параметры.КаталогBIN + "1cv8.exe" + Кавычка + " DESIGNER" + СтрокаКоманды = Кавычка + Параметры.КаталогBIN + "1cv8.exe" + Кавычка + " DESIGNER" + " /IBConnectionString " + Кавычка + Параметры.ПутьККонфигурации + Кавычка + ?(Параметры.Пользователь = "", "", @@ -2890,11 +2889,14 @@ + КлючЗапуска + " /Out " + Кавычка + ИмяФайлаСообщений + Кавычка + " /DisableStartupDialogs" // Без стартового диалога и диалогов аутентификации. - + " /DisableStartupMessages" // Без стартовых предупреждений. - , - , - Истина, - КодВозврата); + + " /DisableStartupMessages"; // Без стартовых предупреждений. + + ПараметрыЗапускаКоманды = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина; + + РезультатЗапуска = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаКоманды); + + КодВозврата = РезультатЗапуска.КодВозврата; Если КодВозврата = 0 Тогда Результат.Успех = Истина; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl index a82da1f5f..0942ad686 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl @@ -266,10 +266,10 @@ КонецЕсли; Если Не ПустаяСтрока(ШагСценария.СохранениеРезультата) Тогда - Результат = ОбщегоНазначения.ВычислитьВБезопасномРежиме(ИсполняемыйФрагмент); + Результат = Вычислить(ИсполняемыйФрагмент); СохраняемыеПараметры.Вставить(ШагСценария.СохранениеРезультата, Результат); Иначе - ОбщегоНазначения.ВыполнитьВБезопасномРежиме(ИсполняемыйФрагмент); + Выполнить(ИсполняемыйФрагмент); КонецЕсли; КонецЦикла; @@ -406,7 +406,7 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. -// См. ИнтеграцияСтандартныхПодсистем.ПриРегистрацииМенеджеровВнешнихМодулей. +// См. ИнтеграцияПодсистемБСП.ПриРегистрацииМенеджеровВнешнихМодулей. Процедура ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры) Экспорт Менеджеры.Добавить(ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный); diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl index 691fe1650..51283cecb 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl @@ -86,8 +86,6 @@ КонецЕсли; КонецЦикла; - Форма.ОбновитьОтображениеДанных(); - КонецПроцедуры // Спрашивает у пользователя подтверждение на включение редактирования реквизитов @@ -210,7 +208,6 @@ Если ВсеРеквизитыРазблокированы Тогда Форма.Элементы.РазрешитьРедактированиеРеквизитовОбъекта.Доступность = Ложь; - Форма.ОбновитьОтображениеДанных(); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl index f4c0ef955..d887f4545 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl @@ -13,7 +13,7 @@ Функция ЗапретРедактированияПредусмотрен(ПолноеИмя) Экспорт Объекты = Новый Соответствие; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); Возврат Объекты[ПолноеИмя] <> Неопределено; diff --git a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl similarity index 96% rename from SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl rename to SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl index eb11cc682..41e721847 100644 --- a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl @@ -212,7 +212,7 @@ МодульВнешниеКомпонентыСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыСлужебный"); МодульВнешниеКомпонентыСлужебный.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); КонецЕсли; - + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); МодульДатыЗапретаИзмененияСлужебный.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); @@ -485,12 +485,12 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ"); МодульСоединенияИБ.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); МодульЦентрМониторингаСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -631,6 +631,21 @@ МодульУправлениеДоступомСлужебный.ПриНастройкеВариантовОтчетов(Настройки); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтчетОДвиженияхДокумента") Тогда + МодульОтчетОДвиженияхДокумента = ОбщегоНазначения.ОбщийМодуль("Отчеты.ОтчетОДвиженияхДокумента"); + МодульОтчетОДвиженияхДокумента.ПриНастройкеВариантовОтчетов(Настройки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиСлужебный"); + МодульОценкаПроизводительностиСлужебный.ПриНастройкеВариантовОтчетов(Настройки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульРезультатыПроверкиУчета = ОбщегоНазначения.ОбщийМодуль("Отчеты.РезультатыПроверкиУчета"); + МодульРезультатыПроверкиУчета.ПриНастройкеВариантовОтчетов(Настройки); + КонецЕсли; + КонецПроцедуры // См. ВариантыОтчетовПереопределяемый.ОпределитьОбъектыСКомандамиОтчетов. @@ -643,6 +658,20 @@ КонецПроцедуры +Процедура ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтчетОДвиженияхДокумента") Тогда + МодульОтчетОДвиженияхДокумента = ОбщегоНазначения.ОбщийМодуль("Отчеты.ОтчетОДвиженияхДокумента"); + МодульОтчетОДвиженияхДокумента.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульРезультатыПроверкиУчета = ОбщегоНазначения.ОбщийМодуль("Отчеты.РезультатыПроверкиУчета"); + МодульРезультатыПроверкиУчета.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ГрупповоеИзменениеОбъектов @@ -691,7 +720,7 @@ МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); МодульДополнительныеОтчетыИОбработки.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; - + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаметкиПользователя") Тогда МодульЗаметкиПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("ЗаметкиПользователяСлужебный"); МодульЗаметкиПользователяСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); @@ -736,7 +765,7 @@ МодульОбменСообщениямиВнутренний = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениямиВнутренний"); МодульОбменСообщениямиВнутренний.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; - + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); @@ -851,6 +880,11 @@ МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); МодульУправлениеСвойствамиСлужебный.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); @@ -1140,6 +1174,11 @@ МодульЭлектроннаяПодписьСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + МодульКонтрольВеденияУчетаСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); + КонецЕсли; + КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПослеОбновленияИнформационнойБазы. @@ -1828,6 +1867,11 @@ МодульФайловыеФункцииСлужебныйВМоделиСервиса.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + МодульКонтрольВеденияУчетаСлужебный.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); + КонецЕсли; + КонецПроцедуры // См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков. @@ -1920,6 +1964,20 @@ #КонецОбласти +#Область РаботаСФайлами + +// См. РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов. +Процедура ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(Объекты) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(Объекты); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область РегламентныеЗадания // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. @@ -2102,6 +2160,11 @@ МодульСправочникиПрофилиГруппДоступа.ПриЗаполненииСпискаТекущихДел(ТекущиеДела); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + МодульКонтрольВеденияУчетаСлужебный.ПриЗаполненииСпискаТекущихДел(ТекущиеДела); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -2144,11 +2207,6 @@ МодульОбменДаннымиСервер.ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей, ПараметрыОбновления); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда - МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); - МодульУправлениеПечатью.ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей, ПараметрыОбновления); - КонецЕсли; - КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииЗависимостейПравДоступа. @@ -2280,4 +2338,31 @@ #КонецОбласти +#Область ЦентрМониторинга + +// См. ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации. +Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт + + ОбновлениеИнформационнойБазыСлужебный.ПриСбореПоказателейСтатистикиКонфигурации(); + ПользователиСлужебный.ПриСбореПоказателейСтатистикиКонфигурации(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ПриСбореПоказателейСтатистикиКонфигурации(); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ПриСбореПоказателейСтатистикиКонфигурации(); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриСбореПоказателейСтатистикиКонфигурации(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/ИнтеграцияСтандартныхПодсистем.mdo b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/ИнтеграцияПодсистемБСП.mdo similarity index 85% rename from SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/ИнтеграцияСтандартныхПодсистем.mdo rename to SSL/src/CommonModules/ИнтеграцияПодсистемБСП/ИнтеграцияПодсистемБСП.mdo index 3ce8ecea8..e677d5009 100644 --- a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/ИнтеграцияСтандартныхПодсистем.mdo +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/ИнтеграцияПодсистемБСП.mdo @@ -1,6 +1,6 @@ - ИнтеграцияСтандартныхПодсистем + ИнтеграцияПодсистемБСП ru Интеграция стандартных подсистем diff --git a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистемКлиент/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl similarity index 90% rename from SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистемКлиент/Module.bsl rename to SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl index 2fd367e18..a0f6e3bd9 100644 --- a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистемКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl @@ -183,6 +183,11 @@ // См. ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы. Процедура ПередЗавершениемРаботыСистемы(Отказ, Предупреждения) Экспорт + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда + МодульСоединенияИБКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СоединенияИБКлиент"); + МодульСоединенияИБКлиент.ПередЗавершениемРаботыСистемы(Отказ, Предупреждения); + КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); МодульОбновлениеКонфигурацииКлиент.ПередЗавершениемРаботыСистемы(Отказ, Предупреждения); @@ -204,6 +209,24 @@ #КонецОбласти +#Область ФункциональностьОтчетов + +Процедура ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОтчетОДвиженияхДокумента") Тогда + МодульОтчетОДвиженияхДокументаСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОтчетОДвиженияхДокументаСлужебныйКлиент"); + МодульОтчетОДвиженияхДокументаСлужебныйКлиент.ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка); + КонецЕсли; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонтрольВеденияУчетаСлужебныйКлиент"); + МодульКонтрольВеденияУчетаСлужебныйКлиент.ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область РезервноеКопированиеИБ // Проверяет возможность выполнения резервного копирования в пользовательском режиме. diff --git a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистемКлиент/ИнтеграцияСтандартныхПодсистемКлиент.mdo b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/ИнтеграцияПодсистемБСПКлиент.mdo similarity index 83% rename from SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистемКлиент/ИнтеграцияСтандартныхПодсистемКлиент.mdo rename to SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/ИнтеграцияПодсистемБСПКлиент.mdo index 747fcb113..ab644c808 100644 --- a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистемКлиент/ИнтеграцияСтандартныхПодсистемКлиент.mdo +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/ИнтеграцияПодсистемБСПКлиент.mdo @@ -1,6 +1,6 @@ - ИнтеграцияСтандартныхПодсистемКлиент + ИнтеграцияПодсистемБСПКлиент ru Интеграция стандартных подсистем клиент diff --git a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl index 2bb0ead60..fa89bbbcd 100644 --- a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl @@ -10,6 +10,10 @@ #Область ПрограммныйИнтерфейс +#Область ДляВызоваИзДругихПодсистем + +// ТехнологияСервиса.БазоваяФункциональность + #Область ВыгрузкаЗагрузкаДанных // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке. @@ -58,12 +62,7 @@ Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт СтандартныеПодсистемыСервер.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ"); - МодульСоединенияИБ.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); - КонецЕсли; - + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); @@ -79,9 +78,9 @@ МодульВнешниеКомпонентыСлужебный.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда - МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); - МодульРегламентныеЗаданияСлужебный.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда + МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ"); + МодульСоединенияИБ.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.АдресныйКлассификаторВМоделиСервиса") Тогда @@ -134,6 +133,11 @@ МодульПользователиСлужебный.ПослеЗагрузкиДанных(Контейнер); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); + МодульРегламентныеЗаданияСлужебный.ПослеЗагрузкиДанных(Контейнер); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); МодульРаботаВМоделиСервиса.ПослеЗагрузкиДанных(Контейнер); @@ -173,6 +177,10 @@ #КонецОбласти +// Конец ТехнологияСервиса.БазоваяФункциональность + +#КонецОбласти + #КонецОбласти // Обработка программных событий, возникающих в подсистемах БСП. diff --git a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl index 3da01f9bb..d38af7528 100644 --- a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl @@ -129,7 +129,7 @@ МассивОбработчиков = Новый Массив(); - ИнтеграцияСтандартныхПодсистем.РегистрацияИнтерфейсовОтправляемыхСообщений(МассивОбработчиков); + ИнтеграцияПодсистемБСП.РегистрацияИнтерфейсовОтправляемыхСообщений(МассивОбработчиков); ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый.ЗаполнитьОбработчикиОтправляемыхСообщений( МассивОбработчиков); @@ -147,7 +147,7 @@ МассивОбработчиков = Новый Массив(); - ИнтеграцияСтандартныхПодсистем.РегистрацияИнтерфейсовПринимаемыхСообщений(МассивОбработчиков); + ИнтеграцияПодсистемБСП.РегистрацияИнтерфейсовПринимаемыхСообщений(МассивОбработчиков); ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый.ЗаполнитьОбработчикиПринимаемыхСообщений( МассивОбработчиков); diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index ada2a6309..790d27c93 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -488,17 +488,20 @@ // Параметры: // Форма - УправляемаяФорма - форма, в которой требуется заполнить реквизит. // ПутьРеквизита - Строка - путь к данным, например: "Объект.ПроизводственныйКалендарь". +// КПП - Строка - индивидуальный номер налогоплательщика (код причины постановки на учет) для определения региона. // -Процедура ЗаполнитьПроизводственныйКалендарьВФорме(Форма, ПутьРеквизита) Экспорт +Процедура ЗаполнитьПроизводственныйКалендарьВФорме(Форма, ПутьРеквизита, КПП = Неопределено) Экспорт - Если ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоПроизводственныхКалендарей") Тогда - Возврат; + Календарь = Неопределено; + + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоПроизводственныхКалендарей") Тогда + Календарь = ЕдинственныйПроизводственныйКалендарь(); + Иначе + Календарь = РегиональныйПроизводственныйКалендарь(КПП); КонецЕсли; - ИспользуемыеКалендари = Справочники.ПроизводственныеКалендари.СписокПроизводственныхКалендарей(); - - Если ИспользуемыеКалендари.Количество() > 0 Тогда - ОбщегоНазначенияКлиентСервер.УстановитьРеквизитФормыПоПути(Форма, ПутьРеквизита, ИспользуемыеКалендари[0]); + Если Календарь <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.УстановитьРеквизитФормыПоПути(Форма, ПутьРеквизита, Календарь); КонецЕсли; КонецПроцедуры @@ -742,14 +745,20 @@ Обработчик.ОбщиеДанные = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.2.119"; + Обработчик.Версия = "2.4.3.35"; + Обработчик.Процедура = "КалендарныеГрафики.ОбновитьПроизводственныеКалендари"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.4.3.114"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.ОбщиеДанные = Истина; Если Не ОбщегоНазначения.РазделениеВключено() Тогда Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.2.119"; + Обработчик.Версия = "2.4.3.114"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"; Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ПроцедураЗаполненияДанныхОбновления = "КалендарныеГрафики.ЗаполнитьДанныеОбновленияДанныхЗависимыхОтПроизводственныхКалендарей"; @@ -783,6 +792,50 @@ #Область СлужебныеПроцедурыИФункции +// Получает таблицу поставляемых в составе программы производственных календарей. +// +// Возвращаемое значение: +// ТаблицаЗначений. +// +Функция ТаблицаПроизводственныхКалендарей() Экспорт + + Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") = Неопределено Тогда + Возврат Новый ТаблицаЗначений; + КонецЕсли; + + МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков"); + ТекстовыйДокумент = МодульКалендарныеГрафики.ПолучитьМакет("ПроизводственныеКалендари"); + ТаблицаКалендарей = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ТекстовыйДокумент.ПолучитьТекст()).Данные; + + Возврат ТаблицаКалендарей; + +КонецФункции + +// Получает единственный производственный календарь в ИБ. +// +Функция ЕдинственныйПроизводственныйКалендарь() + + ИспользуемыеКалендари = Справочники.ПроизводственныеКалендари.СписокПроизводственныхКалендарей(); + + Если ИспользуемыеКалендари.Количество() = 1 Тогда + Возврат ИспользуемыеКалендари[0]; + КонецЕсли; + +КонецФункции + +// Определяет региональный производственный календарь по КПП. +// +Функция РегиональныйПроизводственныйКалендарь(КПП) + + Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков"); + Возврат МодульКалендарныеГрафики.РегиональныйПроизводственныйКалендарь(КПП); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -790,14 +843,12 @@ // Процедура ОбновитьПроизводственныеКалендари() Экспорт - Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") = Неопределено Тогда + ТаблицаКалендарей = ТаблицаПроизводственныхКалендарей(); + + Если ТаблицаКалендарей.Количество() = 0 Тогда Возврат; КонецЕсли; - МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков"); - ТекстовыйДокумент = МодульКалендарныеГрафики.ПолучитьМакет("ПроизводственныеКалендари"); - ТаблицаКалендарей = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ТекстовыйДокумент.ПолучитьТекст()).Данные; - Справочники.ПроизводственныеКалендари.ОбновитьПроизводственныеКалендари(ТаблицаКалендарей); КонецПроцедуры diff --git a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl index 3b3a300f9..30178a59e 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl @@ -204,10 +204,10 @@ Исключение + ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОтменитьТранзакцию(); КонецПопытки; diff --git a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl new file mode 100644 index 000000000..26f8ca09d --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl @@ -0,0 +1,661 @@ +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции по выполнению проверок ведению учета и получению их результатов. + +// Выполняет проверку системы согласно переданных параметров. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило проверки, +// которая будет выполняться. +// +// Пример: +// Проверка = КонтрольВеденияУчета.ПроверкаПоИдентификатору("ПроверитьСсылочнуюЦелостность"); +// КонтрольВеденияУчета.ВыполнитьПроверку(Проверка); +// +Процедура ВыполнитьПроверку(Проверка) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", "Проверка", + Проверка, Тип("СправочникСсылка.ПравилаПроверкиУчета")); + + Если Проверка.ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + КонтрольВеденияУчетаСлужебный.ВыполнитьПроверку(Проверка); + +КонецПроцедуры + +// Выполняет проверки по заданному контексту. +// +// Параметры: +// КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - Контекст выполняемых проверок. +// +Процедура ВыполнитьПроверкиВКонтексте(КонтекстПроверокВеденияУчета) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверкиВКонтексте", + "КонтекстПроверокВеденияУчета", КонтекстПроверокВеденияУчета, + Метаданные.ОпределяемыеТипы.КонтекстПроверокВеденияУчета.Тип); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПравилаПроверкиУчета.Ссылка КАК Проверка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.КонтекстПроверокВеденияУчета = &КонтекстПроверокВеденияУчета + | И ПравилаПроверкиУчета.Использование"); + + Запрос.УстановитьПараметр("КонтекстПроверокВеденияУчета", КонтекстПроверокВеденияУчета); + Результат = Запрос.Выполнить().Выгрузить(); + + Для Каждого СтрокаРезультата Из Результат Цикл + ВыполнитьПроверку(СтрокаРезультата.Проверка); + КонецЦикла; + +КонецПроцедуры + +// Возвращает сводку по количеству выявленных проблем указанного вида проверки. +// +// Параметры: +// ВидПроверок - Строка, Массив, СправочникСсылка.ВидыПроверок - строковый идентификатор +// вида проверки (Свойство1), массив идентификаторов (Свойство1...СвойствоN) +// либо ссылка на вид проверки. +// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// по переданным свойствам на равенство, остальные свойства должны быть равны +// Неопределено (табличная часть дополнительных свойств должна быть пуста). +// Если Ложь, то значения остальных свойств могут быть произвольными, главное +// чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. +// +// Возвращаемое значение: +// Структура - сводка: +// * Количество - Число - общее количество найденных проблем. +// * ЕстьОшибки - Булево - признак того, имеются ли ошибки среди найденных проблем (с важностью "Ошибка"). +// +// Пример: +// 1) Результат = СводнаяИнформацияПоВидамПроверки("СистемныеПроверки"); +// 2) ВидПроверок = Новый Массив; +// ВидПроверок.Добавить("ЗакрытиеМесяца"); +// ВидПроверок.Добавить(Организация); +// ВидПроверок.Добавить(МесяцЗакрытия); +// Результат = СводнаяИнформацияПоВидамПроверки(ВидПроверок); +// +Функция СводнаяИнформацияПоВидамПроверки(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверки"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); + + СводнаяИнформация = Новый Структура; + СводнаяИнформация.Вставить("Количество", 0); + СводнаяИнформация.Вставить("ЕстьОшибки", Ложь); + + МассивВидовПроверок = Новый Массив; + Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда + МассивВидовПроверок.Добавить(ВидПроверок); + Иначе + МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); + Если МассивВидовПроверок.Количество() = 0 Тогда + Возврат СводнаяИнформация; + КонецЕсли; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(*) КАК Количество, + | ЕСТЬNULL(МАКСИМУМ(ВЫБОР + | КОГДА РезультатыПроверкиУчета.ВажностьПроблемы = ЗНАЧЕНИЕ(Перечисление.ВажностьПроблемыУчета.Ошибка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ), ЛОЖЬ) КАК ЕстьОшибки + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ВидПроверки В (&МассивВидовПроверок)"); + + Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); + Результат = Запрос.Выполнить().Выбрать(); + Результат.Следующий(); + + ЗаполнитьЗначенияСвойств(СводнаяИнформация, Результат); + + Возврат СводнаяИнформация; + +КонецФункции + +// Возвращает подробные сведения о выявленных проблемах указанного вида проверки. +// +// Параметры: +// ВидПроверок - Строка, Массив, СправочникСсылка.ВидыПроверок - строковый идентификатор +// вида проверки (Свойство1), массив идентификаторов (Свойство1...СвойствоN) +// либо ссылка на вид проверки. +// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// по переданным свойствам на равенство, остальные свойства должны быть равны +// Неопределено (табличная часть дополнительных свойств должна быть пуста). +// Если Ложь, то значения остальных свойств могут быть произвольными, главное +// чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица проблем: +// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. +// * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// идентифицировать ответственного в проблемном объекте. +// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// сведениями, связанными с выявленной проблемой +// * Выявлено - Дата - Серверное время идентификации проблемы. +// +// Пример: +// 1) Результат = ПодробнаяИнформацияПоВидамПроверки("СистемныеПроверки"); +// 2) ВидПроверок = Новый Массив; +// ВидПроверок.Добавить("ЗакрытиеМесяца"); +// ВидПроверок.Добавить(Организация); +// ВидПроверок.Добавить(МесяцЗакрытия); +// Результат = ПодробнаяИнформацияПоВидамПроверки(ВидПроверок); +// +Функция ПодробнаяИнформацияПоВидамПроверки(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.ПодробнаяИнформацияПоВидамПроверки"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); + + ПодробнаяИнформация = Новый ТаблицаЗначений; + МассивВидовПроверок = Новый Массив; + + Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда + МассивВидовПроверок.Добавить(ВидПроверок); + Иначе + МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); + КонецЕсли; + + Если МассивВидовПроверок.Количество() = 0 Тогда + Возврат ПодробнаяИнформация; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + | РезультатыПроверкиУчета.ВажностьПроблемы КАК ВажностьПроблемы, + | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, + | РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ВидПроверки В (&МассивВидовПроверок)"); + + Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + ПодробнаяИнформация = Результат.Выгрузить(); + КонецЕсли; + + Возврат ПодробнаяИнформация; + +КонецФункции + +// Ищет проверку по переданному идентификатору. +// +// Параметры: +// Идентификатор - Строка - Строковый идентификатор проверки. +// +// Возвращаемое значение: +// СправочникСсылка.ПравилаПроверкиУчета - Найденная проверка, +// либо пустая ссылка. если найти не удалось. +// +Функция ПроверкаПоИдентификатору(Идентификатор) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ПроверкаПоИдентификатору", "Идентификатор", Идентификатор, Тип("Строка")); + + Возврат КонтрольВеденияУчетаСлужебный.ПроверкаПоИдентификатору(Идентификатор); + +КонецФункции + +// Вычисляет количество проблем у переданного объекта. +// +// Параметры: +// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на объект для которого нужно вычислить количество проблем. +// +// Возвращаемое значение: +// Число - Количество найденных проблем по переданной ссылке на объект. +// +Функция КоличествоПроблемПоОбъекту(СсылкаНаОбъект) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.КоличествоПроблемПоОбъекту", "СсылкаНаОбъект", + СсылкаНаОбъект, ОбщегоНазначения.ОписаниеТипаВсеСсылки()); + + ТекущийПользовательПолноправный = Пользователи.ЭтоПолноправныйПользователь(); + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект = &ПроблемныйОбъект + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"); + Запрос.УстановитьПараметр("ПроблемныйОбъект", СсылкаНаОбъект); + + Если Не ТекущийПользовательПолноправный Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + Результат = Запрос.Выполнить().Выбрать(); + Если Результат.Следующий() Тогда + КоличествоПроблем = Результат.Количество; + Иначе + КоличествоПроблем = 0; + КонецЕсли; + + Если Не ТекущийПользовательПолноправный Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Запрос = Неопределено; + + Возврат КоличествоПроблем; + +КонецФункции + +// Вычисляет количество проблем у переданного объекта. +// +// Параметры: +// ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило для которого +// нужно вычислить количество проблем. +// +// Возвращаемое значение: +// Число - Количество найденных проблем по переданному правилу проверки. +// +Функция КоличествоПроблемПоПравилуПроверки(ПравилоПроверки) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.КоличествоПроблемПоПравилуПроверки", "ПравилоПроверки", + ПравилоПроверки, Тип("СправочникСсылка.ПравилаПроверкиУчета")); + + ТекущийПользовательПолноправный = Пользователи.ЭтоПолноправныйПользователь(); + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"); + Запрос.УстановитьПараметр("ПравилоПроверки", ПравилоПроверки); + + Если Не ТекущийПользовательПолноправный Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + Результат = Запрос.Выполнить().Выбрать(); + Если Результат.Следующий() Тогда + КоличествоПроблем = Результат.Количество; + Иначе + КоличествоПроблем = 0; + КонецЕсли; + + Если Не ТекущийПользовательПолноправный Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Запрос = Неопределено; + + Возврат КоличествоПроблем; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для разработки проверок ведения учета. + +// Формирует описание проблемы в виде структуры. +// +// Параметры: +// ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится +// выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +// Возвращаемое значение: +// Структура - Сформированное описание проблемы. +// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. +// Взято из переданной структуры ПараметрыПроверки. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится +// выполненная проверка. Взято из переданной структуры ПараметрыПроверки +// * ВажностьПроблемы - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится +// выполненная проверка. Взято из переданной структуры ПараметрыПроверки. +// * УточнениеПроблемы - Строка - Строка уточнения проблемы. По умолчанию не заполнена. +// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. +// * Выявлено - Дата - Серверное время обнаружения проблемы. +// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// сведениями, связанными с выявленной проблемой. +// По умолчанию Неопределено. +// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// идентифицировать ответственного в проблемном объекте. +// По умолчанию Неопределено. +// +Функция ОписаниеПроблемы(ПроблемныйОбъект, ПараметрыПроверки) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.ОписаниеПроблемы"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПроблемныйОбъект", ПроблемныйОбъект, ОбщегоНазначения.ОписаниеТипаВсеСсылки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПараметрыПроверки", ПараметрыПроверки, Тип("Структура"), КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствПараметровПроверки()); + + Возврат КонтрольВеденияУчетаСлужебный.ОписаниеПроблемы(ПроблемныйОбъект, ПараметрыПроверки); + +КонецФункции + +// Записывает результат выполнения проверки. +// +// Параметры: +// Проблема - Структура - Сформированная алгоритмом проверки структура проблемы. +// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому +// относится выполненная проверка. +// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. +// * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// идентифицировать ответственного в проблемном объекте. +// * ИгнорироватьПроблему - Булево - Флаг игнорирования проблемы. Если имеет значение "Истина", +// запись о проблеме игнорируется подсистемой. +// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// сведениями, связанными с выявленной проблемой. +// * Выявлено - Дата - Серверное время идентификации проблемы. +// +// ПараметрыПроверки - Структура - Сформированная алгоритмом проверки структура проблемы. Необязательный параметр. +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром +// ЛимитПроблем для определения предельного количества итераций. +// +Процедура ЗаписатьПроблему(Проблема, ПараметрыПроверки = Неопределено) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.ЗаписатьПроблему"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Проблема", Проблема, Тип("Структура"), КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствОписанияПроблемы()); + Если ПараметрыПроверки <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПараметрыПроверки", ПараметрыПроверки, Тип("Структура"), КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствПараметровПроверки()); + КонецЕсли; + + КонтрольВеденияУчетаСлужебный.ЗаписатьПроблему(Проблема, ПараметрыПроверки); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для встраивания подсистемы в формы объектов конфигурации. + +// Доопределяет переданный динамический список дополнительной колонкой. У доопределяемого списка +// должна быть определена основная таблица. Вызывается из события "ПриСозданииНаСервере" +// целевой формы списка. +// +// Параметры: +// УправляемаяФорма - УправляемаяФорма - Управляемая форма, содержащая доопределяемый список. +// ИменаСписков - Строка - Имена доопределяемых списков через запятую. +// ДополнительныеСвойства - Структура, Неопределено - Содержит дополнительные свойства, в случае +// необходимости их использования. +// +Процедура ПриСозданииНаСервереФормыСписка(УправляемаяФорма, ИменаСписков, ДополнительныеСвойства = Неопределено) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.ПриСозданииНаСервереФормыСписка"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "УправляемаяФорма", УправляемаяФорма, Тип("УправляемаяФорма")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИменаСписков", ИменаСписков, Тип("Строка")); + Если ДополнительныеСвойства <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДополнительныеСвойства", ДополнительныеСвойства, Тип("Структура")); + КонецЕсли; + + Если Не ПодсистемаДоступна() Тогда + Возврат; + КонецЕсли; + + ГлобальныеНастройки = КонтрольВеденияУчетаСлужебный.ГлобальныеНастройки(); + СписокИмен = СтрРазделить(ИменаСписков, ","); + Элементы = УправляемаяФорма.Элементы; + + Для Каждого ИмяСписка Из СписокИмен Цикл + ТаблицаФормы = Элементы.Найти(СокрЛП(ИмяСписка)); + Если ТаблицаФормы <> Неопределено Тогда + + ТекущийСписок = УправляемаяФорма[ТаблицаФормы.ПутьКДанным]; + ОсновнаяТаблица = ТекущийСписок.ОсновнаяТаблица; + + Если ЗначениеЗаполнено(ОсновнаяТаблица) Тогда + + ТекстЗапроса = ""; + Если ТекущийСписок.ПроизвольныйЗапрос Тогда + ТекстЗапроса = ТекущийСписок.ТекстЗапроса; + Иначе + ИсполняемаяСхема = ТаблицаФормы.ПолучитьИсполняемуюСхемуКомпоновкиДанных(); + НаборДанныхДинамическогоСписка = ИсполняемаяСхема.НаборыДанных.Найти("НаборДанныхДинамическогоСписка"); + Если НаборДанныхДинамическогоСписка <> Неопределено Тогда + ТекущийСписок.ПроизвольныйЗапрос = Истина; + ТекстЗапроса = НаборДанныхДинамическогоСписка.Запрос; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстЗапроса) Тогда + + НачалоЗапроса = Лев(ТекстЗапроса, 7); + Если НачалоЗапроса = "ВЫБРАТЬ" Тогда + + АлиасИндикатор = "ИндикаторОшибки_" + ОбщегоНазначения.КонтрольнаяСуммаСтрокой(УправляемаяФорма.ИмяФормы + ПолучитьРазделительПути() + ИмяСписка); + РазделенноеИмя = СтрРазделить(ОсновнаяТаблица, "."); + + ДополнительныеСвойстваКомпоновщика = ТекущийСписок.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + ДополнительныеСвойстваКомпоновщика.Вставить("КолонкаИндикатора", АлиасИндикатор); + ДополнительныеСвойстваКомпоновщика.Вставить("ВидОбъектаМетаданных", РазделенноеИмя.Получить(0)); + ДополнительныеСвойстваКомпоновщика.Вставить("ИмяОбъектаМетаданных", РазделенноеИмя.Получить(1)); + ДополнительныеСвойстваКомпоновщика.Вставить("ИмяСписка", ИмяСписка); + + ТекущийСписок.ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ 0 КАК %1, %2", + АлиасИндикатор, Прав(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 7)); + + ПараметрыКолонкиИндикации = Новый Структура; + + КонтрольВеденияУчетаСлужебный.ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ОсновнаяТаблица); + КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ОсновнаяТаблица); + + КолонкаИндикаторОшибки = Элементы.Добавить(АлиасИндикатор, Тип("ПолеФормы"), ТаблицаФормы); + КолонкаИндикаторОшибки.Вид = ВидПоляФормы.ПолеКартинки; + КолонкаИндикаторОшибки.ПутьКДанным = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.%2", ИмяСписка, АлиасИндикатор); + КолонкаИндикаторОшибки.ПоложениеЗаголовка = ПараметрыКолонкиИндикации.ПоложениеЗаголовка; + КолонкаИндикаторОшибки.КартинкаШапки = ГлобальныеНастройки.КартинкаИндикатораПроблем; + КолонкаИндикаторОшибки.КартинкаЗначений = ГлобальныеНастройки.КартинкаИндикатораПроблем; + + КолонкиСписка = ТаблицаФормы.ПодчиненныеЭлементы; + Если КолонкиСписка.Количество() > 0 Тогда + Если ПараметрыКолонкиИндикации.ВыводитьПоследней Тогда + Элементы.Переместить(КолонкаИндикаторОшибки, ТаблицаФормы); + Иначе + Элементы.Переместить(КолонкаИндикаторОшибки, ТаблицаФормы, КолонкиСписка.Получить(0)); + КонецЕсли; + КонецЕсли; + + ТаблицаФормы.УстановитьДействие("Выбор", "Подключаемый_Выбор"); + + КонецЕсли; + + КонецЕсли + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Производит индикацию проблемных объектов в таблице формы списка, путем добавления в соответствующую +// колонку картинки, сигнализирующую о наличии проблем. Вызывается из события "ПриСозданииНаСервере" +// целевой формы списка. +// +// Параметры: +// Настройки - НастройкиКомпоновкиДанных - Содержит копию полных настроек динамического списка. +// Строки - СтрокиДинамическогоСписка - Коллекция содержит данные и оформление всех строк, +// получаемых в списке, кроме строк группировок. +// ИмяКлючевогоПоля - Строка - "Ссылка" или заданное наперед имя ключевого поля, которое +// носит колонка, содержащая проблемный объект. +// ДополнительныеСвойства - Структура, Неопределено - Содержит дополнительные свойства в случае +// необходимости их использования. +// +Процедура ПриПолученииДанныхНаСервере(Настройки, Строки, ИмяКлючевогоПоля = "Ссылка", ДополнительныеСвойства = Неопределено) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.ПриПолученииДанныхНаСервере"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Настройки", Настройки, Тип("НастройкиКомпоновкиДанных")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Строки", Строки, Тип("СтрокиДинамическогоСписка")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИмяКлючевогоПоля", ИмяКлючевогоПоля, Тип("Строка")); + Если ДополнительныеСвойства <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДополнительныеСвойства", ДополнительныеСвойства, Тип("Структура")); + КонецЕсли; + + Если Не ПодсистемаДоступна() Тогда + Возврат; + КонецЕсли; + + ДополнительныеСвойстваКомпоновщика = Настройки.ДополнительныеСвойства; + + Если ДополнительныеСвойстваКомпоновщика.Свойство("КолонкаИндикатора") Тогда + + КолонкаИндикатора = Настройки.ДополнительныеСвойства.КолонкаИндикатора; + Если ИмяКлючевогоПоля = "Ссылка" Тогда + КлючиСтрок = Строки.ПолучитьКлючи(); + Иначе + НачальныеКлючи = Строки.ПолучитьКлючи(); + КлючиСтрок = Новый Массив; + Для Каждого НачальныйКлюч Из НачальныеКлючи Цикл + КлючиСтрок.Добавить(НачальныйКлюч[ИмяКлючевогоПоля]); + КонецЦикла; + КонецЕсли; + + ПроблемныеОбъекты = КонтрольВеденияУчетаСлужебный.ПроблемныеОбъекты(КлючиСтрок); + + Для Каждого КлючСтроки Из КлючиСтрок Цикл + СтрокаСписка = Строки[КлючСтроки]; + СтрокаСписка.Данные[КолонкаИндикатора] = ПроблемныеОбъекты.Найти(КлючСтроки) = Неопределено; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +// Производит индикацию проблемного объекта в его форме, путем добавления в специальной группы с +// соответствующими картинкой и надписью, сигнализирующие о наличии проблем. Вызывается из события +// "ПриЧтенииНаСервере" целевой формы объекта. +// +// Параметры: +// УправляемаяФорма - УправляемаяФорма - Управляемая форма проблемного объекта. +// ТекущийОбъект - ДокументОбъект.ИмяДокумента, СправочникОбъект.ИмяСправочника, +// ПланОбменаОбъект.ИмяПланаОбмена, ПланВидовХарактеристикОбъект.ИмяПланаВидаХарактеристик, +// ПланСчетовОбъект.ИмяПланаСчетов, ПланВидовРасчетаОбъект.ИмяПланаВидовРасчета, +// ЗадачаОбъект.ИмяЗадачи - Объект, который будет прочитан. +// +Процедура ПриЧтенииНаСервере(УправляемаяФорма, ТекущийОбъект) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.ПриЧтенииНаСервере"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "УправляемаяФорма", УправляемаяФорма, Тип("УправляемаяФорма")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ТекущийОбъект", ТекущийОбъект, КонтрольВеденияУчетаПовтИсп.ОписаниеТипаВсеОбъекты()); + + Если Не ПодсистемаДоступна() Тогда + Возврат; + КонецЕсли; + + ГлобальныеНастройки = КонтрольВеденияУчетаСлужебный.ГлобальныеНастройки(); + СсылкаНаОбъект = ТекущийОбъект.Ссылка; + ЭлементыУправляемойФормы = УправляемаяФорма.Элементы; + КоличествоПроблемПоОбъекту = КоличествоПроблемПоОбъекту(СсылкаНаОбъект); + КлючУникальностиИмен = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(СсылкаНаОбъект.Метаданные().ПолноеИмя() + + ПолучитьРазделительПути() + УправляемаяФорма.ИмяФормы); + + ДекорацияГруппа = ЭлементыУправляемойФормы.Найти("ГруппаИндикатораОшибки_" + КлючУникальностиИмен); + + Если КоличествоПроблемПоОбъекту = 0 Тогда + + Если ДекорацияГруппа <> Неопределено Тогда + ЭлементыУправляемойФормы.Удалить(ДекорацияГруппа); + КонецЕсли; + + Иначе + + ПараметрыГруппыИндикации = Новый Структура; + + КонтрольВеденияУчетаСлужебный.ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипЗнч(СсылкаНаОбъект)); + КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипЗнч(СсылкаНаОбъект)); + + Если ДекорацияГруппа <> Неопределено Тогда + + ДекорацияНадпись = ЭлементыУправляемойФормы.Найти("ДекорацияНадпись_" + КлючУникальностиИмен); + + Если ДекорацияНадпись <> Неопределено Тогда + + ДекорацияНадпись.Заголовок = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(УправляемаяФорма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, + ГлобальныеНастройки.ПояснениеИндикатораПроблем, ГлобальныеНастройки.ГиперссылкаИндикатораПроблем); + + КонецЕсли; + + Иначе + + ГруппаИндикатораОшибки = КонтрольВеденияУчетаСлужебный.РазместитьГруппуИндикатораОшибки(УправляемаяФорма, КлючУникальностиИмен, + ПараметрыГруппыИндикации.ИмяРодителяГруппы, ПараметрыГруппыИндикации.ВыводитьСнизу); + + ОбщаяСтрокаИндикатор = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(УправляемаяФорма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, + ГлобальныеНастройки.ПояснениеИндикатораПроблем, ГлобальныеНастройки.ГиперссылкаИндикатораПроблем); + + КонтрольВеденияУчетаСлужебный.ЗаполнитьГруппуИндикатораОшибки(УправляемаяФорма, ГруппаИндикатораОшибки, КлючУникальностиИмен, + ОбщаяСтрокаИндикатор, ГлобальныеНастройки.КартинкаИндикатораПроблем); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции. + +// Проверяет доступность подсистемы по правам. Используется при формировании +// индикации проблемных объектов. +// +// Возвращаемое значение: +// Булево - Признак доступности подсистемы согласно настройкам прав. +// +Функция ПодсистемаДоступна() Экспорт + + Возврат ПравоДоступа("Просмотр", Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.КонтрольВеденияУчета); + +КонецФункции + +// Производит поиск вида проверки по переданным свойствам. +// +// Параметры: +// ВидПроверок - Строка, Массив - строковый идентификатор вида проверки (Свойство1) +// либо массив идентификаторов (Свойство1...СвойствоN), либо ссылка на вид проверки. +// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// по переданным свойствам на равенство, остальные свойства должны быть равны +// Неопределено (табличная часть дополнительных свойств должна быть пуста). +// Если Ложь, то значения остальных свойств могут быть произвольными, главное +// чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. +// +// Возвращаемое значение: +// Массив из СправочникСсылка.ВидыПроверок - Найденные элементы справочника, либо пустой массив +// в случае если поиск не дал результата. в случае поиска по точному соответствию массив +// содержит единственный элемент. +// +Функция ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.ПолучитьВидыПроверок"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); + + Возврат КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo b/SSL/src/CommonModules/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo new file mode 100644 index 000000000..fa23ebce6 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo @@ -0,0 +1,11 @@ + + + КонтрольВеденияУчета + + ru + Контроль ведения учета + + true + true + true + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl new file mode 100644 index 000000000..248b6e828 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl @@ -0,0 +1,131 @@ + +#Область ПрограммныйИнтерфейс + +// Открывает отчет по всем проблемам переданного вида проблем. +// +// Параметры: +// ВидПроверок - Строка, Массив, СправочникСсылка.ВидыПроверок - Переданные данные +// обрабатываются согласно функции КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверки +// после чего открывается отчет с отбором по найденному виду проблем. +// +// Пример: +// ОткрытьОтчетПоПроблемам("СистемныеПроверки"); +// +Процедура ОткрытьОтчетПоПроблемам(ВидПроверок) Экспорт + + // Проверка валидности переданного параметра ВидПроверок осуществляется + // в процедуре ПриСозданииНаСервере модуля отчета РезультатыПроверкиУчета. + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВидПроверки", ВидПроверок); + + ОткрытьФорму("Отчет.РезультатыПроверкиУчета.Форма", ПараметрыФормы); + +КонецПроцедуры + +// Открывает форму отчета при нажатии на гиперссылку, сигнализирующую о наличии проблем. +// +// Параметры: +// Форма - УправляемаяФорма - Управляемая форма проблемного объекта. +// ПроблемныйОбъект - СсылкаНаОбъект - Ссылка на проблемный объект. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// стандартной (системной) обработки события. +// +// Пример: +// КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамОбъекта(ЭтотОбъект, Объект.Ссылка, СтандартнаяОбработка); +// +Процедура ОткрытьОтчетПоПроблемамОбъекта(Форма, ПроблемныйОбъект, СтандартнаяОбработка) Экспорт + + // Проверка валидности переданных параметров Форма, ПроблемныйОбъект, СтандартнаяОбработка + // в процедуре ПриСозданииНаСервере модуля отчета РезультатыПроверкиУчета. + + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("СсылкаНаОбъект", ПроблемныйОбъект); + + ОткрытьФорму("Отчет.РезультатыПроверкиУчета.Форма", ПараметрыФормы); + +КонецПроцедуры + +// Открывает форму отчета при двойном нажатии на ячейку таблицы формы списка с картинкой, +// сигнализирующей о наличии проблем с выделенным объектом. +// +// Параметры: +// Форма - УправляемаяФорма - Управляемая форма проблемного объекта. +// ИмяСписка - Строка - Имя целевого динамического списка как реквизита формы. +// Поле - ПолеФормы - Колонка в которой располагается картинка, +// сигнализирующая о наличии проблем. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// стандартной (системной) обработки события. +// ДополнительныеПараметры - Структура, Неопределено - Содержит дополнительные свойства в случае +// необходимости их использования. +// +// Пример: +// КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзСписка(ЭтотОбъект, "Список", Поле, СтандартнаяОбработка); +// +Процедура ОткрытьОтчетПоПроблемамИзСписка(Форма, ИмяСписка, Поле, СтандартнаяОбработка, ДополнительныеПараметры = Неопределено) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзСписка"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Форма", Форма, Тип("УправляемаяФорма")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИмяСписка", ИмяСписка, Тип("Строка")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Поле", Поле, Тип("ПолеФормы")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "СтандартнаяОбработка", СтандартнаяОбработка, Тип("Булево")); + Если ДополнительныеПараметры <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДополнительныеПараметры", ДополнительныеПараметры, Тип("Структура")); + КонецЕсли; + + ДополнительныеСвойства = Форма[ИмяСписка].КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + + Если Не (ДополнительныеСвойства.Свойство("КолонкаИндикатора") + И ДополнительныеСвойства.Свойство("ВидОбъектаМетаданных") + И ДополнительныеСвойства.Свойство("ИмяОбъектаМетаданных") + И ДополнительныеСвойства.Свойство("ИмяСписка")) Тогда + СтандартнаяОбработка = Истина; + Иначе + + ТаблицаФормы = Форма.Элементы.Найти(ДополнительныеСвойства.ИмяСписка); + АлиасИндикатор = ДополнительныеСвойства.КолонкаИндикатора; + + Если Поле.Имя <> АлиасИндикатор Тогда + СтандартнаяОбработка = Истина; + Иначе + СтандартнаяОбработка = Ложь; + + ДанныеКонтекста = Новый Структура; + ДанныеКонтекста.Вставить("ВыделенныеСтроки", ТаблицаФормы.ВыделенныеСтроки); + ДанныеКонтекста.Вставить("ВидОбъектаМетаданных", ДополнительныеСвойства.ВидОбъектаМетаданных); + ДанныеКонтекста.Вставить("ИмяОбъектаМетаданных", ДополнительныеСвойства.ИмяОбъектаМетаданных); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ДанныеКонтекста", ДанныеКонтекста); + ОткрытьФорму("Отчет.РезультатыПроверкиУчета.Форма", ПараметрыФормы); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Открывает форму отчета с отбором по проблемам, препятствующим нормальному обновлению +// информационной базы. +// +// Параметры: +// Форма - УправляемаяФорма - Управляемая форма проблемного объекта. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// стандартной (системной) обработки события. +// +// Пример: +// МодульКонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзОбработкиОбновления(ЭтотОбъект, СтандартнаяОбработка); +// +Процедура ОткрытьОтчетПоПроблемамИзОбработкиОбновления(Форма, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + ОткрытьОтчетПоПроблемам("СистемныеПроверки"); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/КонтрольВеденияУчетаКлиент.mdo b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/КонтрольВеденияУчетаКлиент.mdo new file mode 100644 index 000000000..33968a391 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/КонтрольВеденияУчетаКлиент.mdo @@ -0,0 +1,10 @@ + + + КонтрольВеденияУчетаКлиент + + ru + Контроль ведения учета (клиент) + + true + true + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl new file mode 100644 index 000000000..a1bac7f2c --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl @@ -0,0 +1,211 @@ + +#Область ПрограммныйИнтерфейс + +// Позволяет задать общие настройки подсистемы. +// +// Параметры: +// Настройки - Структура - настройки подсистемы: +// * КартинкаИндикатораПроблем - Картинка, которая будет выводиться в качестве +// индикатора ошибки в колонке динамического списка +// форм списков и на специальной панели форм объектов. +// * ПояснениеИндикатораПроблем - Строка - Поясняющая строка к ошибке. +// * ГиперссылкаИндикатораПроблем - Строка - Текст гиперссылки, при нажатии на которую, +// будет сформирован и открыт отчет с ошибками. +// +// Пример: +// Настройки = Новый Структура; +// Настройки.Вставить("КартинкаИндикатораПроблем", БиблиотекаКартинок.Предупреждение); +// Настройки.Вставить("ПояснениеИндикатораПроблем", Неопределено); +// Настройки.Вставить("ГиперссылкаИндикатораПроблем", Неопределено); +// +Процедура ПриОпределенииНастроек(Настройки) Экспорт + +КонецПроцедуры + +// Предназначен для подключения собственных правил проверки ведения учета. +// +// Параметры: +// ГруппыПроверок - ТаблицаЗначений - Таблица, в которую добавляются группы проверок: +// * Наименование - Строка - Наименование группы проверок, например: "Системные проверки". +// * Идентификатор - Строка - Строковый идентификатор группы, например: "СистемныеПроверки". +// +// Проверки - ТаблицаЗначений - Таблица, в которую добавляются проверки: +// * Наименование - Строка - Наименование элемента проверки. Обязательно для заполнения. +// * Причины - Строка - Возможные причины, которые привели к возникновению проблемы. +// Выводятся в отчете о проблемах. Необязательно для заполнения. +// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. +// Выводятся в отчете о проблемах. Необязательно для заполнения. +// * Идентификатор - Строка - Строковый идентификатор проверки. Обязателен для заполнения. +// * ИдентификаторРодителя - Строка - Строковый идентификатор группы проверок, например: "СистемныеПроверки". +// Обязательно для заполнения. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых меньше +// указанной, не следует проверять. По умолчанию не заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Максимальное количество проверяемых объектов. +// По умолчанию 0 - следует проверить все объекты. +// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика проверки в серверном общем модуле. +// Предназначен для поиска и регистрации проблем ведения учета. +// Параметры обработчика проверки: +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - исполняемая проверка. +// * ПараметрыПроверки - Структура - Параметры проверки, которую необходимо выполнить. +// Подробнее см. в документации. +// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика исправления проблемы +// в клиентском общем модуле или полное имя формы, которая будет открыта для +// исправления проблемы. Параметры обработчика исправления проблемы или формы: +// * ИдентификаторПроверки - Строка - идентификатор проверки, +// которая выявила проблему. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - вид проверки +// с дополнительной информацией о проблеме. +// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация по проверке. +// +// Пример: +// Проверка = Проверки.Добавить(); +// Проверка.ИдентификаторРодителя = "СистемныеПроверки"; +// Проверка.Наименование = НСтр("ru='Демо: Проверка заполнения комментария в документах ""Демо: Поступление товаров""'"); +// Проверка.Причины = НСтр("ru='Не введен комментарий в документе.'"); +// Проверка.Рекомендация = НСтр("ru='Ввести комментарий в документе.'"); +// Проверка.Идентификатор = "ПроверитьКомментарийВПоступленииТоваров"; +// Проверка.ОбработчикПроверки = "_ДемоСтандартныеПодсистемы.ПроверитьКомментарийВПоступленииТоваров"; +// Проверка.ДатаНачалаПроверки = Дата('20140101000000'); +// Проверка.ЛимитПроблем = 3; +// +Процедура ПриОпределенииПрикладныхПроверок(ГруппыПроверок, Проверки) Экспорт + + + +КонецПроцедуры + +// Позволяет настроить положение индикатора о проблемах в формах объектов. +// +// Параметры: +// ПараметрыГруппыИндикации - Структура - выходные параметры индикатора: +// * ВыводитьСнизу - Булево - Если указать Истина, то группа индикатора будет выводиться самой последней +// в форме или в конце указанной группе элементов ИмяРодителяГруппы. +// По умолчанию Ложь - группа выводится в начале указанной группе ИмяРодителяГруппы или +// сразу под командной панелью формы объекта. +// * ИмяРодителяГруппы - Строка - Определяет имя группы элементов формы объекта, внутри которой должна +// располагаться группа индикации. +// +// ТипСсылки - Тип - Тип ссылки, для которой переопределяются параметры группы индикации. +// Например, Тип("ДокументСсылка.НачислениеЗарплаты"). +// +Процедура ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, Знач ТипСсылки) Экспорт + + + +КонецПроцедуры + +// Позволяет настроить внешний вид и положение колонки-индикатора о проблемах в формах списков +// (с динамическим списком). +// +// Параметры: +// ПараметрыКолонкиИндикации - Структура - выходные параметры индикатора: +// * ВыводитьПоследней - Булево - Если указать Истина, то колонка-индикатор будет выводиться в конце. +// По умолчанию Ложь - колонка выводится в начале. +// * ПоложениеЗаголовка - ПоложениеЗаголовкаЭлементаФормы - Задает положение заголовка колонки-индикатора. +// * Ширина - Число - Ширина колонки-индикатора. +// +// ПолноеИмя - Строка - Полное имя объекта основной таблицы динамического списка. +// Например, Метаданные.Документы.НачислениеЗарплаты.ПолноеИмя(). +// +Процедура ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ПолноеИмя) Экспорт + + + +КонецПроцедуры + +// Позволяет дозаполнить информацию о проблеме перед ее регистрацией. +// В частности, можно заполнить дополнительные значения для ограничения доступа на уровне записей +// к списку проблем ведения учета. +// +// Параметры: +// Проблема - Структура - Сформированная алгоритмом проверки информация о проблеме: +// * ПроблемныйОбъект - ЛюбаяСсылка - объект, по поводу которого записывается проблема. +// Либо ссылка на элемент справочника ИдентификаторыОбъектовМетаданных +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому +// относится выполненная проверка. +// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. +// * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// идентифицировать ответственного в проблемном объекте. +// * ИгнорироватьПроблему - Булево - Флаг игнорирования проблемы. Если имеет значение "Истина", +// запись о проблеме игнорируется подсистемой. +// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// сведениями, связанными с выявленной проблемой. +// * Выявлено - Дата - Серверное время идентификации проблемы. +// +// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на объект-источник значения для добавляемых +// дополнительных измерений. +// Реквизиты - КоллекцияОбъектовМетаданных - Коллекция, содержащая реквизиты объекта- +// источника проблем. +// +Процедура ПередЗаписьюПроблемы(Проблема, СсылкаНаОбъект, Реквизиты) Экспорт + + + +КонецПроцедуры + +// Позволяет переопределить логику поведения выполнения проверки до отработки логики подсистемы. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило проверки, +// которая будет выполняться. +// ПараметрыПроверки - Структура - Сформированная алгоритмом проверки структура проблемы. +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром +// ЛимитПроблем для определения предельного количества итераций. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Процедура ПриВыполненииПроверки(Проверка, ПараметрыПроверки) Экспорт + +КонецПроцедуры + +// Позволяет переопределить логику поведения выполнения проверки после отработки логики подсистемы. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило проверки, которая выполнялась. +// ПараметрыПроверки - Структура - Сформированная алгоритмом проверки структура проблемы. +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром +// ЛимитПроблем для определения предельного количества итераций. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Процедура ПослеВыполненияПроверки(Проверка, ПараметрыПроверки) Экспорт + +КонецПроцедуры + +#КонецОбласти + + + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/КонтрольВеденияУчетаПереопределяемый.mdo b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/КонтрольВеденияУчетаПереопределяемый.mdo new file mode 100644 index 000000000..87c99806b --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/КонтрольВеденияУчетаПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + КонтрольВеденияУчетаПереопределяемый + + ru + Контроль ведения учета переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/Module.bsl new file mode 100644 index 000000000..0f73c8f26 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/Module.bsl @@ -0,0 +1,238 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Формирует структуру таблиц проверок и групп проверок для дальнейшего использования. +// +// Возвращаемое значение: +// Структура со значениями: +// * ГруппыПроверок - ТаблицаЗначений - Таблица групп проверок. +// * Проверки - ТаблицаЗначений - Таблица проверок. +// +Функция ПроверкиВеденияУчета() Экспорт + + ГруппыПроверок = НоваяТаблицаГруппПроверок(); + Проверки = НоваяТаблицаПроверок(); + + СистемныеПроверкиВеденияУчета(ГруппыПроверок, Проверки); + КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПрикладныхПроверок(ГруппыПроверок, Проверки); + + Возврат Новый ФиксированнаяСтруктура("ГруппыПроверок, Проверки", ГруппыПроверок, Проверки); + +КонецФункции + +// Возвращает массив типов, включающий в себя все возможные объектные типы конфигурации. +// +// Возвращаемое значение: +// Массив - Массив объектных типов. +// +Функция ОписаниеТипаВсеОбъекты() Экспорт + + МассивТипов = Новый Массив; + + МассивВидовМетаданных = Новый Массив; + МассивВидовМетаданных.Добавить(Метаданные.Документы); + МассивВидовМетаданных.Добавить(Метаданные.Справочники); + МассивВидовМетаданных.Добавить(Метаданные.ПланыОбмена); + МассивВидовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + МассивВидовМетаданных.Добавить(Метаданные.ПланыСчетов); + МассивВидовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); + МассивВидовМетаданных.Добавить(Метаданные.Задачи); + + Для Каждого ВидМетаданных Из МассивВидовМетаданных Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + + РазделенноеИмя = СтрРазделить(ОбъектМетаданных.ПолноеИмя(), "."); + Если РазделенноеИмя.Количество() < 2 Тогда + Продолжить; + КонецЕсли; + + МассивТипов.Добавить(Тип(РазделенноеИмя.Получить(0) + "Объект." + РазделенноеИмя.Получить(1))); + + КонецЦикла; + КонецЦикла; + + Возврат Новый ФиксированныйМассив(МассивТипов); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПрикладныхПроверок +Процедура СистемныеПроверкиВеденияУчета(ГруппыПроверок, Проверки) + + ГруппаПроверок = ГруппыПроверок.Добавить(); + ГруппаПроверок.Наименование = НСтр("ru='Системные проверки'"); + ГруппаПроверок.Идентификатор = "СистемныеПроверки"; + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.Наименование = НСтр("ru='Проверка незаполненных обязательных реквизитов'"); + Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); + Проверка.Рекомендация = НСтр("ru='Правильно настроить синхронизацию данных и заполнить обязательные реквизиты. + |В случае обнаружения незаполненных обязательных полей у регистров, то в большинстве + |случаев, для устранения проблемы, требуется заполнение соответствующих полей в документе-регистраторе'"); + Проверка.Идентификатор = "ПроверкаНезаполненныхОбязательныхРеквизитов"; + Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьНезаполненныеОбязательныеРеквизиты"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.Наименование = НСтр("ru='Проверка ссылочной целостности'"); + Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); + Проверка.Рекомендация = НСтр("ru='• Завершить работу всех пользователей и установить блокировку входа в программу; + |• Сделать резервную копию информационной базы; + |• Запустить конфигуратор, меню Администрирование, Тестирования и исправление, включив два флажка для проверка логической и ссылочной целостности + | см подробнее на ИТС https://its.1c.ru/db/v839doc#bookmark:adm:TI000000142 + |• Снять блокировку входа в программу + |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + | Затем выполнить синхронизацию с подчиненными узлами. + |В случае обнаружения битых ссылок в регистрах, то в большинстве случаев, для устранения проблемы, + |требуется устранения соответствующих битых ссылок в документе-регистраторе'"); + Проверка.Идентификатор = "ПроверкаСсылочнойЦелостности"; + Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьСсылочнуюЦелостность"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.Наименование = НСтр("ru='Проверка циклических ссылок'"); + Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); + Проверка.Рекомендация = НСтр("ru='• Завершить работу всех пользователей и установить блокировку входа в программу; + |• Сделать резервную копию информационной базы; + |• Запустить конфигуратор, меню Администрирование, Тестирования и исправление, включив два флажка для проверка логической и ссылочной целостности + | см подробнее на ИТС: https://its.1c.ru/db/v839doc#bookmark:adm:TI000000142 + |• Снять блокировку входа в программу + |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + | Затем выполнить синхронизацию с подчиненными узлами 1.'"); + Проверка.Идентификатор = "ПроверкаЦиклическихСсылок"; + Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьЦиклическиеСсылки"; + Проверка.ОбработчикПереходаКИсправлению = "Отчет.РезультатыПроверкиУчета.Форма.ИсправлениеЦиклическихСсылок"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.Наименование = НСтр("ru='Проверка отсутствующих предопределенных элементов'"); + Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); + Проверка.Рекомендация = НСтр("ru='• Запустить исправление по ссылке ниже. + |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + | Затем выполнить синхронизацию с подчиненными узлами.'"); + Проверка.Идентификатор = "ПроверкаОтсутствующихПредопределенныхЭлементов"; + Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьОтсутствующиеПредопределенныеЭлементы"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.Наименование = НСтр("ru='Проверка дублирования предопределенных элементов'"); + Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); + Проверка.Рекомендация = НСтр("ru='• Запустить поиск и удаление дублей по ссылке ниже. + |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + | Затем выполнить синхронизацию с подчиненными узлами.'"); + Проверка.Идентификатор = "ПроверкаДублированияПредопределенныхЭлементов"; + Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьДублированиеПредопределенныхЭлементов"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.Наименование = НСтр("ru='Проверка отсутствия предопределенных узлов плана обмена'"); + Проверка.Причины = НСтр("ru='Некорректное поведение программы при работе на устаревших версиях платформы 1С:Предприятие.'"); + Проверка.Рекомендация = НСтр("ru='• Перейти на версию платформы 1С:Предприятие 8.3.9.2033 или выше; + |• Завершить работу всех пользователей и установить блокировку входа в программу; + |• Сделать резервную копию информационной базы; + |• Запустить конфигуратор, меню Администрирование, Тестирования и исправление, включив два флажка для проверка логической и ссылочной целостности + | см подробнее на ИТС: https://its.1c.ru/db/v839doc#bookmark:adm:TI000000142 + |• Снять блокировку входа в программу + |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + | Затем выполнить синхронизацию с подчиненными узлами.'"); + Проверка.Идентификатор = "ПроверкаОтсутствияПредопределенныхУзловПлановОбмена"; + Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьНаличиеПредопределенныхУзловПлановОбмена"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.Наименование = НСтр("ru='Поиск ссылок на несуществующие файлы в томах хранения'"); + Проверка.Причины = НСтр("ru='Файл был физически удален или перемещен на диске в следствие работы антивирусных программа, + | непреднамеренных действий администратора и.т.д.'"); + Проверка.Рекомендация = НСтр("ru='• Либо пометить файл в программе на удаление; + |• Либо восстановить файл на диске в томе из резервной копии.'"); + Проверка.Идентификатор = "ПроверкаСсылокНаНесуществующиеФайлыВТоме"; + Проверка.ОбработчикПроверки = "РаботаСФайламиСлужебный.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + + КонецЕсли; + +КонецПроцедуры + +// Создает таблицу групп проверок +// +// Возвращаемое значение: +// ТаблицаЗначений с колонками: +// * Наименование - Строка - Наименование группы проверок. +// * Идентификатор - Строка - Строковый идентификатор группы проверок. +// +Функция НоваяТаблицаГруппПроверок() + + ГруппыПроверок = Новый ТаблицаЗначений; + КолонкиГруппыПроверок = ГруппыПроверок.Колонки; + КолонкиГруппыПроверок.Добавить("Наименование", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиГруппыПроверок.Добавить("Идентификатор", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + + Возврат ГруппыПроверок; + +КонецФункции + +// Создает таблицу проверок +// +// Возвращаемое значение: +// ТаблицаЗначений с колонками: +// * ИдентификаторРодителя - Строка - Строковый идентификатор группы проверок, например: "СистемныеПроверки". +// Возможны также варианты "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. +// Обязателен для заполнения. +// * Наименование - Строка - Наименование элемента проверки. +// * Причины - Строка - Возможные причины которые привели к возникновению проблемы. +// * Рекомендация - Строка - Текстовая рекомендация по решению возникшей проблемы. +// * Идентификатор - Строка - Строковый идентификатор элемента. Обязателен для заполнения. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых меньше +// указанной, не следует проверять. По умолчанию не заполнено (т.е. +// проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ОбработчикПроверки - Строка - Имя процедуры-обработчика исправления проверки. Под процедурой-обработчиком +// понимать экспортную процедуру серверного общего модуля. +// * ОбработчикПереходаКИсправлению - Строка - Имя процедуры-обработчика исправления проблемы. Под процедурой-обработчиком +// понимать экспортную процедуру клиентского общего модуля. +// * БезОбработчикаПроверки - Булево - На случай служебной проверки, которая не имеет процедуры-обработчика. +// * ЗапрещеноИзменениеВажности - Булево - Для запрета изменения важности некоторых проверок +// интерактивно, в карточке проверки. +// * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - Содержит контекст проверки. +// * УточнениеКонтекстаПроверкиСостоянияСистемы - ОпределяемыйТип.УточнениеКонтекстаПроверкиСостоянияСистемы - Содержит +// уточнение контекста проверки. +// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация по проверке. +// +Функция НоваяТаблицаПроверок() + + Проверки = Новый ТаблицаЗначений; + КолонкиПроверок = Проверки.Колонки; + КолонкиПроверок.Добавить("ИдентификаторРодителя", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиПроверок.Добавить("Наименование", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиПроверок.Добавить("Причины", Новый ОписаниеТипов("Строка")); + КолонкиПроверок.Добавить("Рекомендация", Новый ОписаниеТипов("Строка")); + КолонкиПроверок.Добавить("Идентификатор", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиПроверок.Добавить("ДатаНачалаПроверки", Новый ОписаниеТипов("Дата", , , , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))); + КолонкиПроверок.Добавить("ЛимитПроблем", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(8, 0, ДопустимыйЗнак.Неотрицательный))); + КолонкиПроверок.Добавить("ОбработчикПроверки", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + КолонкиПроверок.Добавить("ОбработчикПереходаКИсправлению", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + КолонкиПроверок.Добавить("БезОбработчикаПроверки", Новый ОписаниеТипов("Булево")); + КолонкиПроверок.Добавить("ЗапрещеноИзменениеВажности", Новый ОписаниеТипов("Булево")); + КолонкиПроверок.Добавить("КонтекстПроверокВеденияУчета", Метаданные.ОпределяемыеТипы.КонтекстПроверокВеденияУчета.Тип); + КолонкиПроверок.Добавить("УточнениеКонтекстаПроверкиСостоянияСистемы", Метаданные.ОпределяемыеТипы.УточнениеКонтекстаПроверкиСостоянияСистемы.Тип); + КолонкиПроверок.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("ХранилищеЗначения")); + + Возврат Проверки; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/КонтрольВеденияУчетаПовтИсп.mdo b/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/КонтрольВеденияУчетаПовтИсп.mdo new file mode 100644 index 000000000..e4ce1382b --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/КонтрольВеденияУчетаПовтИсп.mdo @@ -0,0 +1,12 @@ + + + КонтрольВеденияУчетаПовтИсп + + ru + Контроль ведения учета повт исп + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl new file mode 100644 index 000000000..5bd1fac15 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl @@ -0,0 +1,3769 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +#Область СинхронизацияСправочникаВидовПроверок + +// см. КонтрольВеденияУчета.ПолучитьВидыПроверок. +Функция ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт + + ВидПроверкиМассив = Новый Массив; + ПараметрыСинхронизации = Новый Структура; + + Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда + + ВидПроверкиМассив.Добавить(ВидПроверок); + + ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Строка") Тогда + + ПараметрыСинхронизации.Вставить("Свойство1", ВидПроверок); + ВидПроверкиМассив = ОбычныйПоискВидаПроверки(ПараметрыСинхронизации, ПоискПоТочномуСоответствию); + + ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Массив") Тогда + + ПараметрыСинхронизации = Новый Структура; + КоличествоЭлементов = ВидПроверок.Количество(); + Для Индекс = 0 По КоличествоЭлементов - 1 Цикл + ПараметрыСинхронизации.Вставить("Свойство" + Формат(Индекс + 1, "ЧГ=0"), ВидПроверок.Получить(Индекс)); + КонецЦикла; + + Если ПараметрыСинхронизации.Количество() > КоличествоСвойств() Тогда + ВидПроверкиМассив = РасширенныйПоискВидаПроверки(ПараметрыСинхронизации, ВидПроверок.Количество()); + Иначе + ВидПроверкиМассив = ОбычныйПоискВидаПроверки(ПараметрыСинхронизации, ПоискПоТочномуСоответствию); + КонецЕсли; + + КонецЕсли; + + Возврат ВидПроверкиМассив; + +КонецФункции + +#КонецОбласти + +#Область СинхронизацияСправочникаПроверок + +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Если ЕстьИзмененияПараметровСистемныхПроверок() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Комментарий = НСтр("ru = 'Обновляются правила проверки учета в соответствие с изменениями в новой версии программы. + |До завершения обработки часть проверок ведения учета будет недоступна.'"); + Обработчик.Процедура = "КонтрольВеденияУчетаСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации"; + КонецЕсли; + +КонецПроцедуры + +// Обновляет вспомогательные данные, которые зависят от конфигурации частично. +// +// Обновляется при наличии изменений конфигурации, записанных в параметры +// ограничения доступа при обновлении базы данных на текущую версию конфигурации. +// +Процедура ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации(Параметры = Неопределено) Экспорт + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПравилаПроверкиУчета"); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + ОбновитьВспомогательныеДанныеСправочникаПоИзменениямКонфигурации(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Процедура Обновляет состав предопределенных профилей в +// параметрах ограничения доступа при изменении конфигурации. +// +// Параметры: +// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// устанавливается Истина, иначе не изменяется. +// +Процедура ОбновитьПараметрыСистемныхПроверок(ЕстьИзменения = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ХэшированиеСистемныхПроверок = ХэшированиеСистемныхПроверок(); + + НачатьТранзакцию(); + Попытка + ЕстьТекущиеИзменения = Ложь; + + СтандартныеПодсистемыСервер.ОбновитьПараметрРаботыПрограммы( + "СтандартныеПодсистемы.КонтрольВеденияУчета.СистемныеПроверки", + ХэшированиеСистемныхПроверок, ЕстьТекущиеИзменения); + + СтандартныеПодсистемыСервер.ДобавитьИзмененияПараметраРаботыПрограммы( + "СтандартныеПодсистемы.КонтрольВеденияУчета.СистемныеПроверки", + ?(ЕстьТекущиеИзменения, Новый ФиксированнаяСтруктура("ЕстьИзменения", Истина), Новый ФиксированнаяСтруктура())); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОписанияАлгоритмовПоставляемыхПроверок + +// Исполняет проверку ссылочной целостности. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Процедура ПроверитьСсылочнуюЦелостность(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + КонецЦикла; + + Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Исполняет проверку заполненности обязательных реквизитов. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Процедура ПроверитьНезаполненныеОбязательныеРеквизиты(Проверка, ПараметрыПроверки) Экспорт + + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл + + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + + КонецЦикла; + + Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + НайтиНезаполненныеОбязательныеРеквизитыВРегистрах(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Исполняет проверку наличия циклических ссылок. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Процедура ПроверитьЦиклическиеСсылки(Проверка, ПараметрыПроверки) Экспорт + + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; + Если Не ЕстьИерархия(ОбъектМетаданных.СтандартныеРеквизиты) Тогда + Продолжить; + КонецЕсли; + НайтиЦиклическиеСсылки(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Исполняет проверку наличия отсутствующих предопределенных элементов. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Процедура ПроверитьОтсутствующиеПредопределенныеЭлементы(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + МассивВидовОбъектов = Новый Массив; + МассивВидовОбъектов.Добавить("Справочник"); + МассивВидовОбъектов.Добавить("ПланВидовХарактеристик"); + МассивВидовОбъектов.Добавить("ПланСчетов"); + МассивВидовОбъектов.Добавить("ПланВидовРасчета"); + + МассивВидовОбъектовМетаданных = Новый Массив; + МассивВидовОбъектовМетаданных.Добавить(Метаданные.Справочники); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); + + Для Каждого ВидМетаданных Из МассивВидовОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда + Продолжить; + КонецЕсли; + НайтиОтсутствующиеПредопределенныеЭлементы(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Исполняет проверку наличия дублирующихся предопределенных элементов. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Процедура ПроверитьДублированиеПредопределенныхЭлементов(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + МассивВидовОбъектов = Новый Массив; + МассивВидовОбъектов.Добавить("Справочник"); + МассивВидовОбъектов.Добавить("ПланВидовХарактеристик"); + МассивВидовОбъектов.Добавить("ПланСчетов"); + МассивВидовОбъектов.Добавить("ПланВидовРасчета"); + + МассивВидовОбъектовМетаданных = Новый Массив; + МассивВидовОбъектовМетаданных.Добавить(Метаданные.Справочники); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); + + Для Каждого ВидМетаданных Из МассивВидовОбъектовМетаданных Цикл + НайтиДублиПредопределенныхЭлементов(ВидМетаданных, ПараметрыПроверки); + КонецЦикла; + +КонецПроцедуры + +// Исполняет проверку отсутствующих предопределенных узлов плана обмена. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Процедура ПроверитьНаличиеПредопределенныхУзловПлановОбмена(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + МассивВидовОбъектов = Новый Массив; + МассивВидовОбъектов.Добавить("ПланОбмена"); + + МетаданныеПланыОбмена = Метаданные.ПланыОбмена; + Для Каждого МетаданныеПланОбмена Из МетаданныеПланыОбмена Цикл + + Если ПланыОбмена[МетаданныеПланОбмена.Имя].ЭтотУзел() <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МетаданныеПланОбмена.ПолноеИмя()), ПараметрыПроверки); + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В плане обмена ""%1"" отсутствует предопределенный узел (ЭтотУзел() = Неопределено).'"), МетаданныеПланОбмена.Имя); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОписаниеАлгоритмовИсправленияПроблем + +Процедура ИсправитьПроблемуЦиклическихСсылокВФоновомЗадании(Знач ПараметрыПроверки, АдресХранилища = Неопределено) Экспорт + + Проверка = ПроверкаПоИдентификатору(ПараметрыПроверки.ИдентификаторПроверки); + Если Не ЗначениеЗаполнено(Проверка) Тогда + Возврат; + КонецЕсли; + + ИсправитьПроблемуЦиклическихСсылок(Проверка); + +КонецПроцедуры + +#КонецОбласти + +#Область НастройкаРегламентныхЗаданий + +// См. КонтрольВеденияУчетаПереопределяемый.ПриПолученииСпискаШаблонов. +Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт + + ШаблоныЗаданий.Добавить("ПроверкаВеденияУчета"); + +КонецПроцедуры + +// Возвращает параметры проверки по переданному идентификатору регламентного задания. +// +// Параметры +// ИдентификаторРегламентногоЗадания - Строка - Поле для связки с текущим фоновым заданием. +// +// Возвращаемое значение - Структура со свойствами:: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Наименование - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты.. +// * СпособВыполнения - ПеречислениеСсылка.СпособВыполненияПроверки - Способ выполнения проверки +// "ПоОбщемуРасписанию", "ПоОтдельномуРасписанию" и "Вручную". +// +Функция ПараметрыПроверкиПоИдентификаторуРегламентногоЗадания(ИдентификаторРегламентногоЗадания) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор, + | ПравилаПроверкиУчета.Наименование КАК Наименование, + | ПравилаПроверкиУчета.ИдентификаторРегламентногоЗадания КАК ИдентификаторРегламентногоЗадания, + | ПравилаПроверкиУчета.ДатаНачалаПроверки КАК ДатаНачалаПроверки, + | ПравилаПроверкиУчета.ЛимитПроблем КАК ЛимитПроблем, + | ПравилаПроверкиУчета.СпособВыполнения КАК СпособВыполнения + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.ИдентификаторРегламентногоЗадания = &ИдентификаторРегламентногоЗадания + | И ПравилаПроверкиУчета.Использование"); + + Запрос.УстановитьПараметр("ИдентификаторРегламентногоЗадания", Строка(ИдентификаторРегламентногоЗадания)); + Результат = Запрос.Выполнить().Выбрать(); + + Если Не Результат.Следующий() Тогда + Возврат Неопределено; + Иначе + + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("Идентификатор", Результат.Идентификатор); + СтруктураВозврата.Вставить("Наименование", Результат.Наименование); + СтруктураВозврата.Вставить("ИдентификаторРегламентногоЗадания", Результат.ИдентификаторРегламентногоЗадания); + СтруктураВозврата.Вставить("ДатаНачалаПроверки", Результат.ДатаНачалаПроверки); + СтруктураВозврата.Вставить("ЛимитПроблем", Результат.ЛимитПроблем); + СтруктураВозврата.Вставить("СпособВыполнения", Результат.СпособВыполнения); + СтруктураВозврата.Вставить("ПроверкаБылаОстановлена", Ложь); + СтруктураВозврата.Вставить("РучнойЗапуск", Ложь); + + Возврат СтруктураВозврата; + + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ПользовательскаяИндикацияОшибок + +// Размещает группу индикатора ошибок на управляемой форме. +// +// Параметры: +// УправляемаяФорма - УправляемаяФорма - Форма объекта на которой нужно разместить группу индикатора. +// КлючУникальностиИмен - Строка - Строковый ключ уникальности добавляемых элементов на форму. Нужен для +// минимизации рисков пересечения с уже существующими элементами. +// ИмяРодителяГруппы - Строка, Неопределено - Строковое имя группы формы в контексте которой +// требуется разместить группу индикатора. Если неопределено, то в качестве +// контекста выступает управляемая форма. Если на форме не находится такого +// элемента генерируется исключение. +// ВыводитьСнизу - Булево - Определяет местоположение добавляемой группы, +// сигнализирующей об ошибке Если принимает значение "Истина", +// то группа будет добавлена в конец коллекции подчиненных +// элементов группы родителя. В противном случае группа будет +// расположена сразу за основной командной панелью формы объекта. +// +Функция РазместитьГруппуИндикатораОшибки(УправляемаяФорма, КлючУникальностиИмен, ИмяРодителяГруппы = Неопределено, ВыводитьСнизу = Ложь) Экспорт + + ВсеЭлементыФормы = УправляемаяФорма.Элементы; + + Если ИмяРодителяГруппы = Неопределено Тогда + КонтекстРазмещения = УправляемаяФорма; + Иначе + РодительГруппы = ВсеЭлементыФормы.Найти(ИмяРодителяГруппы); + Если РодительГруппы = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдена группа формы: ""%1""'"), ИмяРодителяГруппы); + Иначе + КонтекстРазмещения = РодительГруппы; + КонецЕсли; + КонецЕсли; + + ГруппаИндикатораОшибки = ВсеЭлементыФормы.Добавить("ГруппаИндикатораОшибки_" + КлючУникальностиИмен, Тип("ГруппаФормы"), КонтекстРазмещения); + ГруппаИндикатораОшибки.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаИндикатораОшибки.ОтображатьЗаголовок = Ложь; + ГруппаИндикатораОшибки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаИндикатораОшибки.РастягиватьПоГоризонтали = Истина; + ГруппаИндикатораОшибки.ЦветФона = ЦветаСтиля.ФонУправляющегоПоля; + + ПодчиненныеЭлементыКонтекста = КонтекстРазмещения.ПодчиненныеЭлементы; + Если ВыводитьСнизу Тогда + ВсеЭлементыФормы.Переместить(ГруппаИндикатораОшибки, КонтекстРазмещения); + Иначе + Если ПодчиненныеЭлементыКонтекста.Количество() > 0 Тогда + ВсеЭлементыФормы.Переместить(ГруппаИндикатораОшибки, КонтекстРазмещения, ПодчиненныеЭлементыКонтекста.Получить(0)); + КонецЕсли; + КонецЕсли; + + Возврат ГруппаИндикатораОшибки; + +КонецФункции + +// Заполняет размещенную ранее группу индикатора ошибок элементами +// идентифицирующими наличие ошибок и позволяющими перейти к отчету по этим ошибкам. +// +// Параметры +// УправляемаяФорма - УправляемаяФорма - Форма объекта на которой расположена группа индикатора. +// ГруппаИндикатораОшибки - ГруппаФормы - Группа управляемой формы на которой будут располагаться +// элементы-декорации, которые будут идентифицировать наличие ошибок с возможностью +// перехода к отчету. +// КлючУникальностиИмен - Строка - Строковый ключ уникальности добавляемых элементов на форму. Нужен для +// минимизации рисков пересечения с уже существующими элементами. +// КартинкаИндикатораПроблем - Картинка, Неопределено - Картинка идентифицирующая наличие проблем у текущего объекта. +// Может быть переопределена конечным разработчиком - достаточно добавить параметр при вызове. +// ОбщаяСтрокаИндикатор - ФорматированнаяСтрока - Общая строка-индикатор наличия ошибок. Состоит из +// поясняющего текста и гиперссылки открывающей отчет по проблемам объекта.. +// +Процедура ЗаполнитьГруппуИндикатораОшибки(УправляемаяФорма, ГруппаИндикатораОшибки, КлючУникальностиИмен, + ОбщаяСтрокаИндикатор, КартинкаИндикатораПроблем = Неопределено) Экспорт + + ЭлементыУправляемойФормы = УправляемаяФорма.Элементы; + + КартинкаИндикаторОшибки = ЭлементыУправляемойФормы.Добавить("ДекорацияКартинка_" + КлючУникальностиИмен, Тип("ДекорацияФормы"), ГруппаИндикатораОшибки); + КартинкаИндикаторОшибки.Вид = ВидДекорацииФормы.Картинка; + КартинкаИндикаторОшибки.Картинка = ?(КартинкаИндикатораПроблем = Неопределено, БиблиотекаКартинок.Предупреждение, КартинкаИндикатораПроблем); + КартинкаИндикаторОшибки.РазмерКартинки = РазмерКартинки.РеальныйРазмер; + + ДекорацияНадпись = ЭлементыУправляемойФормы.Добавить("ДекорацияНадпись_" + КлючУникальностиИмен, Тип("ДекорацияФормы"), ГруппаИндикатораОшибки); + ДекорацияНадпись.Вид = ВидДекорацииФормы.Надпись; + ДекорацияНадпись.Заголовок = ОбщаяСтрокаИндикатор; + ДекорацияНадпись.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; + ДекорацияНадпись.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_ОткрытьОтчетПоПроблемам"); + +КонецПроцедуры + +// Формирует общую строку-индикатор наличия ошибок. Состоит из поясняющего текста и +// гиперссылки открывающей отчет по проблемам объекта. +// +// Параметры +// УправляемаяФорма - УправляемаяФорма - Форма объекта на которой расположена группа индикатора. +// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на объект по которому найдены ошибки. +// КоличествоПроблемПоОбъекту - Число - Найденное количество проблем по объекту. +// ПояснениеИндикатораПроблем - Строка, Неопределено - Строка идентифицирующая наличие проблем у текущего объекта. +// Может быть переопределена конечным разработчиком - достаточно добавить параметр при вызове. +// ГиперссылкаИндикатораПроблем - Строка, Неопределено - Строка представляющая гиперссылку, при нажатии +// на которую будет открыт и сформирован отчет по проблемам текущего объекта. +// +Функция СформироватьОбщуюСтрокуИндикатор(УправляемаяФорма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, + ПояснениеИндикатораПроблем = Неопределено, ГиперссылкаИндикатораПроблем = Неопределено) Экспорт + + ТекстоваяСсылка = "Основной"; + + Если ПояснениеИндикатораПроблем <> Неопределено Тогда + ПоясняющаяНадпись = ПояснениеИндикатораПроблем + Иначе + ПоясняющаяНадпись = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'С этим %1'"), ПредставлениеОбъектаПоТипу(СсылкаНаОбъект)); + КонецЕсли; + + Если ГиперссылкаИндикатораПроблем <> Неопределено Тогда + Гиперссылка = ГиперссылкаИндикатораПроблем; + Иначе + Гиперссылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='есть проблемы (%1)'"), Формат(КоличествоПроблемПоОбъекту, "ЧГ=0")); + КонецЕсли; + + Возврат Новый ФорматированнаяСтрока(ПоясняющаяНадпись + " ", Новый ФорматированнаяСтрока(Гиперссылка, , , , ТекстоваяСсылка)); + +КонецФункции + +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровГруппыИндикации. +Процедура ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипСсылки) Экспорт + + ПараметрыГруппыИндикации.Вставить("ИмяРодителяГруппы", Неопределено); + ПараметрыГруппыИндикации.Вставить("ВыводитьСнизу", Ложь); + +КонецПроцедуры + +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровКолонкиИндикации. +Процедура ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ПолноеИмя) Экспорт + + ПараметрыКолонкиИндикации.Вставить("ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Нет); + ПараметрыКолонкиИндикации.Вставить("Ширина", 2); + ПараметрыКолонкиИндикации.Вставить("ВыводитьПоследней", Ложь); + +КонецПроцедуры + +#КонецОбласти + +#Область ВыполнениеПроверок + +// Выполняет проверку системы согласно переданных параметров. +// +// Параметры: +// ПараметрыПроверки - Структура, СправочникСсылка.ПравилаПроверкиУчета - Параметры проверки, +// либо ссылка на проверку, которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// +Процедура ВыполнитьПроверку(Знач ПараметрыПроверки) Экспорт + + Если ТипЗнч(ПараметрыПроверки) = Тип("Структура") Тогда + Проверка = ПроверкаПоИдентификатору(ПараметрыПроверки.Идентификатор); + Иначе + Проверка = ПараметрыПроверки; + ПараметрыПроверки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Проверка, + "ДатаНачалаПроверки, + |Идентификатор, + |ИдентификаторРегламентногоЗадания, + |ЛимитПроблем, + |Наименование"); + + Если Не ПараметрыПроверки.Свойство("ПроверкаБылаОстановлена") Тогда + ПараметрыПроверки.Вставить("ПроверкаБылаОстановлена", Ложь); + КонецЕсли; + Если Не ПараметрыПроверки.Свойство("РучнойЗапуск") Тогда + ПараметрыПроверки.Вставить("РучнойЗапуск", Истина); + КонецЕсли; + + КонецЕсли; + + Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(Проверка).Обработан Тогда + Возврат; + КонецЕсли; + + Если ПроверкаОтложена(ПараметрыПроверки.ИдентификаторРегламентногоЗадания) Тогда + Возврат; + КонецЕсли; + + ПодготовитьДанныеПроверки(Проверка, ПараметрыПроверки); + + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(Проверка); + ПараметрыОбработчика.Добавить(ПараметрыПроверки); + + ПроверкиВеденияУчета = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета(); + Проверки = ПроверкиВеденияУчета.Проверки; + СтрокаПроверки = Проверки.Найти(ПараметрыПроверки.Идентификатор, "Идентификатор"); + + Если СтрокаПроверки <> Неопределено Тогда + + КонтрольВеденияУчетаПереопределяемый.ПриВыполненииПроверки(Проверка, ПараметрыПроверки); + + Если Не СтрокаПроверки.БезОбработчикаПроверки Тогда + ОбщегоНазначения.ВыполнитьМетодКонфигурации(СтрокаПроверки.ОбработчикПроверки, ПараметрыОбработчика); + КонецЕсли; + + КонтрольВеденияУчетаПереопределяемый.ПослеВыполненияПроверки(Проверка, ПараметрыПроверки); + + КонецЕсли; + +КонецПроцедуры + +// Обработчик регламентного задания "ПроверкаВеденияУчета". Предназначен для обработки +// фонового запуска проверок системы. +// Параметры: +// ИдентификаторРегламентногоЗадания - Строка, Неопределено - Строковый идентификатор регламентного задания. +// +Процедура ПроверитьВедениеУчета(ИдентификаторРегламентногоЗадания = Неопределено) Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПроверкаВеденияУчета); + + Если ИдентификаторРегламентногоЗадания <> Неопределено Тогда + + ПараметрыПроверки = ПараметрыПроверкиПоИдентификаторуРегламентногоЗадания(ИдентификаторРегламентногоЗадания); + Если ПараметрыПроверки <> Неопределено Тогда + ВыполнитьПроверку(ПараметрыПроверки); + КонецЕсли; + + Иначе + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор, + | ПравилаПроверкиУчета.Наименование КАК Наименование, + | ПравилаПроверкиУчета.ИдентификаторРегламентногоЗадания КАК ИдентификаторРегламентногоЗадания, + | ПравилаПроверкиУчета.ДатаНачалаПроверки КАК ДатаНачалаПроверки, + | ПравилаПроверкиУчета.ЛимитПроблем КАК ЛимитПроблем, + | ПравилаПроверкиУчета.СпособВыполнения КАК СпособВыполнения + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.СпособВыполнения = ЗНАЧЕНИЕ(Перечисление.СпособВыполненияПроверки.ПоОбщемуРасписанию) + | И ПравилаПроверкиУчета.Использование"); + + Результат = Запрос.Выполнить().Выбрать(); + Пока Результат.Следующий() Цикл + + ПараметрыПроверки = Новый Структура; + ПараметрыПроверки.Вставить("Идентификатор", Результат.Идентификатор); + ПараметрыПроверки.Вставить("Наименование", Результат.Наименование); + ПараметрыПроверки.Вставить("ИдентификаторРегламентногоЗадания", Результат.ИдентификаторРегламентногоЗадания); + ПараметрыПроверки.Вставить("ДатаНачалаПроверки", Результат.ДатаНачалаПроверки); + ПараметрыПроверки.Вставить("ЛимитПроблем", Результат.ЛимитПроблем); + ПараметрыПроверки.Вставить("СпособВыполнения", Результат.СпособВыполнения); + ПараметрыПроверки.Вставить("ПроверкаБылаОстановлена", Ложь); + ПараметрыПроверки.Вставить("РучнойЗапуск", Ложь); + + ВыполнитьПроверку(ПараметрыПроверки); + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +// Выполнение массива проверок по переданным параметрам. +// Параметры: +// ПараметрыПроверки - Массив - Массив, состоящий из структур вида: +// Элемент массива - Структура Параметры проверки которую необходимо выполнить, либо массив +// аналогичных структур (если нужно пакетное исполнение): +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// АдресХранилища - Строка - Адрес во временном хранилище для размещения результата. +// +Процедура ВыполнитьПроверкиВФоновомЗадании(Знач ПараметрыПроверки, АдресХранилища = Неопределено) Экспорт + + МассивПараметров = ПараметрыПроверки.МассивПараметров; + Для Каждого ПараметрыПроверки Из МассивПараметров Цикл + ВыполнитьПроверку(ПараметрыПроверки); + КонецЦикла; + +КонецПроцедуры + +// См. КонтрольВеденияУчетаПереопределяемый.ПроверкаПоИдентификатору. +Функция ПроверкаПоИдентификатору(Идентификатор) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПравилаПроверкиУчета.Ссылка КАК Проверка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.Идентификатор = &Идентификатор"); + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Результат = Запрос.Выполнить().Выбрать(); + + Если Не Результат.Следующий() Тогда + Возврат Справочники.ПравилаПроверкиУчета.ПустаяСсылка(); + Иначе + Возврат Результат.Проверка; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область РазмещениеВТекущихДелах + +Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + + Если Не КонтрольВеденияУчета.ПодсистемаДоступна() Тогда + Возврат; + КонецЕсли; + + Проблемы = КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверки("СистемныеПроверки"); + + Если Проблемы.Количество > 0 Тогда + + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "Администрирование"; + Дело.ЕстьДела = Истина; + Дело.Представление = НСтр("ru = 'Некорректные данные'"); + Дело.Важное = Проблемы.ЕстьОшибки; + Дело.Количество = Проблемы.Количество; + Дело.ПараметрыФормы = Проблемы; + Дело.Форма = "Отчет.РезультатыПроверкиУчета.Форма"; + Дело.Владелец = Метаданные.Подсистемы.Администрирование; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПроцедурыИФункцииОбщегоНазначения + +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииНастроек. +Функция ГлобальныеНастройки() Экспорт + + Настройки = Новый Структура; + + Настройки.Вставить("КартинкаИндикатораПроблем", БиблиотекаКартинок.Предупреждение); + Настройки.Вставить("ПояснениеИндикатораПроблем", Неопределено); + Настройки.Вставить("ГиперссылкаИндикатораПроблем", Неопределено); + + КонтрольВеденияУчетаПереопределяемый.ПриОпределенииНастроек(Настройки); + + Возврат Настройки; + +КонецФункции + +// Возвращает массив проблемных объектов. Максимально "облегчена" для прироста производительности. +// +// Параметры: +// КлючиСтрок - Массив - Массив, содержащий все ключи строк динамического списка. +// +// Возвращаемое значение - Массив из ЛюбаяСсылка - массив проблемных объектов. +// +Функция ПроблемныеОбъекты(КлючиСтрок) Экспорт + + ТекущийПользовательПолноправный = Пользователи.ЭтоПолноправныйПользователь(); + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект В(&СписокОбъектов) + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"); + Запрос.УстановитьПараметр("СписокОбъектов", КлючиСтрок); + + Если Не ТекущийПользовательПолноправный Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ПроблемныеОбъекты = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ПроблемныйОбъект"); + + Если Не ТекущийПользовательПолноправный Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Запрос = Неопределено; + + Возврат ПроблемныеОбъекты; + +КонецФункции + +// См. КонтрольВеденияУчета.ОписаниеПроблемы. +Функция ОписаниеПроблемы(ПроблемныйОбъект, ПараметрыПроверки) Экспорт + + СтруктураЗаписи = Новый Структура; + + СтруктураЗаписи.Вставить("ПроблемныйОбъект", ПроблемныйОбъект); + СтруктураЗаписи.Вставить("ПравилоПроверки", ПараметрыПроверки.Проверка); + СтруктураЗаписи.Вставить("ВидПроверки", ПараметрыПроверки.ВидПроверки); + СтруктураЗаписи.Вставить("ВажностьПроблемы", ПараметрыПроверки.ВажностьПроблемы); + СтруктураЗаписи.Вставить("УточнениеПроблемы", ""); + СтруктураЗаписи.Вставить("КлючУникальности", Новый УникальныйИдентификатор); + СтруктураЗаписи.Вставить("Выявлено", ТекущаяДатаСеанса()); + СтруктураЗаписи.Вставить("ДополнительнаяИнформация", Новый ХранилищеЗначения(Неопределено)); + СтруктураЗаписи.Вставить("Ответственный", Неопределено); + + Возврат СтруктураЗаписи; + +КонецФункции + +// См. КонтрольВеденияУчета.ЗаписатьПроблему. +Процедура ЗаписатьПроблему(ОшибкаПроверки, ПараметрыПроверки = Неопределено) Экспорт + + Если ПараметрыПроверки <> Неопределено И ЭтоПоследняяИтерацияПроверки(ПараметрыПроверки) Тогда + Возврат; + КонецЕсли; + + ПроблемныйОбъект = ОшибкаПроверки.ПроблемныйОбъект; + КоллекцияРеквизитов = ОшибкаПроверки.ПроблемныйОбъект.Метаданные().Реквизиты; + + КонтрольВеденияУчетаПереопределяемый.ПередЗаписьюПроблемы(ОшибкаПроверки, ПроблемныйОбъект, КоллекцияРеквизитов); + + НаборЗаписей = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); + + Отбор = НаборЗаписей.Отбор; + Отбор.ВидПроверки.Установить(ОшибкаПроверки.ВидПроверки); + Отбор.ПравилоПроверки.Установить(ОшибкаПроверки.ПравилоПроверки); + Отбор.ПроблемныйОбъект.Установить(ПроблемныйОбъект); + Отбор.КлючУникальности.Установить(ОшибкаПроверки.КлючУникальности); + + НоваяЗапись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, ОшибкаПроверки); + + НаборЗаписей.Записать(); + +КонецПроцедуры + +// Выполняет проверку является ли текущий объект метаданных разделенным. +// Проверка проводится лишь в случае если разделение возможно и включено. +// +// Параметры: +// ПолноеИмя - Строка - Полное имя объекта метаданных, который будет проверяться на +// возможную разделяемость. +// Возвращаемое значение: +// Булево - Является ли переданный объект метаданных разделяемым. +// +Функция ЭтоНеразделенныйОбъектМетаданных(ПолноеИмя) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + Возврат Не МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя); + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область СинхронизацияСправочникаВидовПроверокСлужебная + +// Находит существующий, либо создает новый элемент справочника видов проверки. +// В процессе ставит управляемую блокировку (во избежание конфликтов при выполнении +// разными регламентными заданиями). +// +// Параметры: +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Наименование - Строка - Наименование проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ПараметрыСинхронизации - Структура, с элементами Любого типа. По свойствам этой +// структуры будет производиться поиск. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром +// ЛимитПроблем для определения предельного количества итераций. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// КоличествоСвойств - Число - Количество свойств по которым нужно вести поиск. +// +// Возвращаемое значение - СправочникСсылка.ВидыПроверок - Найденный, либо созданный элемент справочника. +// +Функция СинхронизацияВидаПроверки(ПараметрыПроверки) + + БлокировкаВидаПроверок = БлокировкаВидовПроверок(ПараметрыПроверки); + + НачатьТранзакцию(); + Попытка + БлокировкаВидаПроверок.Заблокировать(); + + ПараметрыСинхронизации = ПараметрыПроверки.ПараметрыСинхронизации; + Если ПараметрыСинхронизации.Количество() > КоличествоСвойств() Тогда + ВидПроверкиМассив = РасширенныйПоискВидаПроверки(ПараметрыСинхронизации, КоличествоСвойств()); + Иначе + ВидПроверкиМассив = ОбычныйПоискВидаПроверки(ПараметрыСинхронизации); + КонецЕсли; + + Если ВидПроверкиМассив.Количество() = 0 Тогда + ВидПроверки = НовыйВидПроверки(ПараметрыПроверки); + Иначе + ВидПроверки = ВидПроверкиМассив.Получить(0); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось записать вид проверки %1 по причине %2'"), + ПараметрыПроверки.Идентификатор, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.ВидыПроверок, ПараметрыПроверки.Идентификатор, ТекстСообщения); + КонецПопытки; + + Возврат ВидПроверки; + +КонецФункции + +// Инициализирует и упорядочивает параметры синхронизации для поиска соответствующего +// элемента справочника "ВидыПроверок". +// +// Параметры: +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Наименование - Строка - Наименование проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ПараметрыСинхронизации - Структура, с элементами Любого типа. По свойствам этой +// структуры будет производиться поиск. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// КоличествоСвойств - Число - Количество свойств по которым нужно вести поиск. +// +// Возвращаемое значение - Структура, Неопределено - Дополненная структура параметров проверки, либо неопределено +// в случае отсутствия элементов "ПараметрыСинхронизации" и "Идентификатор" в параметрах +// проверки. +// +Функция ПараметрыСинхронизацииВидаПроверок(ПараметрыПроверки) + + Если Не ПараметрыПроверки.Свойство("ПараметрыСинхронизации") Или Не ПараметрыПроверки.Свойство("Идентификатор") Тогда + Возврат Неопределено; + Иначе + + ПараметрыСинхронизации = ПараметрыПроверки.ПараметрыСинхронизации; + + ТаблицаУпорядочивания = Новый ТаблицаЗначений; + ТаблицаУпорядочивания.Колонки.Добавить("Свойство"); + + Для Каждого ПараметрПоиска Из ПараметрыСинхронизации Цикл + ЗаполнитьЗначенияСвойств(ТаблицаУпорядочивания.Добавить(), Новый Структура("Свойство", ПараметрПоиска.Значение)); + КонецЦикла; + + ТаблицаУпорядочивания.Сортировать("Свойство"); + СтрокаИдентификатора = ТаблицаУпорядочивания.Вставить(0); + СтрокаИдентификатора.Свойство = ПараметрыПроверки.Идентификатор; + + ПараметрыСинхронизации.Очистить(); + + Для Каждого ТекущаяСтрока Из ТаблицаУпорядочивания Цикл + ПараметрыСинхронизации.Вставить("Свойство" + Формат(ТаблицаУпорядочивания.Индекс(ТекущаяСтрока) + 1, "ЧГ=0"), ТекущаяСтрока.Свойство); + КонецЦикла; + + Возврат ПараметрыПроверки; + + КонецЕсли; + +КонецФункции + +// Производит поиск вида проверки по переданным параметрам. Под "расширенным" понимать простой +// поиск плюс поиск по строкам табличной части "СвойстваОбъекта" справочника "ВидыПроверок". +// Данный поиск осуществляется если параметр "КоличествоСвойств" принимает значения от 5 до N, +// где N-любое натуральное. +// +// Параметры: +// ПараметрыСинхронизации - Структура - Параметры по которым будет производиться поиск вида проверок: +// * Свойство1 - ЛюбаяСсылка - Первое свойство синхронизации. +// * Свойство2 - ЛюбаяСсылка - Второе свойство синхронизации. +// * Свойство3 - ЛюбаяСсылка - Третье свойство синхронизации. +// ... +// * СвойствоN - ЛюбаяСсылка - N-ое свойство синхронизации. +// +// КоличествоСвойств - Число - Количество свойств по которым нужно вести поиск. +// +// Возвращаемое значение: СправочникСсылка.ВидыПроверок - Найденный элемент справочника, либо пустая ссылка +// в случае если поиск не дал результата. +// +Функция РасширенныйПоискВидаПроверки(ПараметрыСинхронизации, КоличествоСвойств) + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ВидыПроверок.Ссылка КАК ВидПроверки + |ПОМЕСТИТЬ ВТ_ВидыПроверок + |ИЗ + | Справочник.ВидыПроверок КАК ВидыПроверок + |ГДЕ + | &Условие + | + |СГРУППИРОВАТЬ ПО + | ВидыПроверок.Ссылка + | + |ИМЕЮЩИЕ + | КОЛИЧЕСТВО(ВидыПроверок.СвойстваОбъекта.Ссылка) = &ПороговоеКоличество + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВидыПроверокСвойстваОбъекта.Ссылка КАК ВидПроверки, + | ВидыПроверокСвойстваОбъекта.ЗначениеСвойства КАК ЗначениеСвойства, + | ВидыПроверокСвойстваОбъекта.ИмяСвойства КАК ИмяСвойства + |ИЗ + | ВТ_ВидыПроверок КАК ВТ_ВидыПроверок + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыПроверок.СвойстваОбъекта КАК ВидыПроверокСвойстваОбъекта + | ПО ВТ_ВидыПроверок.ВидПроверки = ВидыПроверокСвойстваОбъекта.Ссылка + | + |УПОРЯДОЧИТЬ ПО + | ВидПроверки"); + + ТекстУсловий = " Истина "; + КоличествоПараметров = ПараметрыСинхронизации.Количество(); + Запрос.УстановитьПараметр("ПороговоеКоличество", КоличествоПараметров - КоличествоСвойств); + + Для Индекс = 1 По КоличествоСвойств Цикл + + Свойство = "Свойство" + Формат(Индекс, "ЧГ=0"); + Значение = ПараметрыСинхронизации[Свойство]; + + ТекстУсловий = ТекстУсловий + " И " + Свойство + " = &" + Свойство; + Запрос.УстановитьПараметр(Свойство, Значение); + + КонецЦикла; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Условие", ТекстУсловий); + Результат = Запрос.Выполнить().Выгрузить(); + + ТранспонированнаяТаблица = Новый ТаблицаЗначений; + КолонкиТаблицы = ТранспонированнаяТаблица.Колонки; + КолонкиТаблицы.Добавить("ВидПроверки", Новый ОписаниеТипов("СправочникСсылка.ВидыПроверок")); + + СтруктураПоиска = Новый Структура; + ИндексПоиска = ""; + + Для ПороговыйИндекс = КоличествоСвойств + 1 По КоличествоПараметров Цикл + + ИмяКолонки = "Свойство" + Формат(ПороговыйИндекс, "ЧГ=0"); + ИндексПоиска = ИндексПоиска + ?(ЗначениеЗаполнено(ИндексПоиска), ", ", "") + ИмяКолонки; + КолонкиТаблицы.Добавить(ИмяКолонки); + + СтруктураПоиска.Вставить(ИмяКолонки, ПараметрыСинхронизации[ИмяКолонки]); + + КонецЦикла; + + ТекущийВидПроверки = Неопределено; + Для Каждого СтрокаРезультата Из Результат Цикл + + Если ТекущийВидПроверки <> СтрокаРезультата.ВидПроверки Тогда + + ТекущийВидПроверки = СтрокаРезультата.ВидПроверки; + НоваяСтрока = ТранспонированнаяТаблица.Добавить(); + НоваяСтрока.ВидПроверки = ТекущийВидПроверки; + + КонецЕсли; + + НоваяСтрока[СтрокаРезультата.ИмяСвойства] = СтрокаРезультата.ЗначениеСвойства; + + КонецЦикла; + + Если ТранспонированнаяТаблица.Количество() > 1000 Тогда + ТранспонированнаяТаблица.Индексы.Добавить(ИндексПоиска); + КонецЕсли; + + НайденныеСтроки = ТранспонированнаяТаблица.НайтиСтроки(СтруктураПоиска); + МассивВидовПроверок = Новый Массив; + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + МассивВидовПроверок.Добавить(НайденнаяСтрока.ВидПроверки); + КонецЦикла; + + Возврат МассивВидовПроверок; + +КонецФункции + +Функция БлокировкаВидовПроверок(ПараметрыПроверки) + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.ВидыПроверок"); + + ПараметрыСинхронизации = ПараметрыПроверки.ПараметрыСинхронизации; + + Если Не (ОбщегоНазначения.ИнформационнаяБазаФайловая() + Или ПараметрыСинхронизации.Количество() > КоличествоСвойств()) Тогда + Индекс = 1; + Для Каждого ПараметрПоиска Из ПараметрыСинхронизации Цикл + ЭлементБлокировкиДанных.УстановитьЗначение("Свойство" + Формат(Индекс, "ЧГ=0"), ПараметрПоиска.Значение); + Индекс = Индекс + 1; + КонецЦикла; + КонецЕсли; + + Возврат БлокировкаДанных; + +КонецФункции + +// Производит поиск вида проверки по переданным параметрам. Под "обычным" поиском понимать +// поиск в справочнике "ВидыПроверок" только по реквизитам шапки с именами СвойствоN, где N от 1 +// до возврата функции "КоличествоСвойств" текущего модуля. Данный поиск осуществляется если +// указанный параметр принимает значения от 1 до "КоличествоСвойств". +// +// Параметры: +// ПараметрыСинхронизации - Структура - Параметры по которым будет производиться поиск вида проверок: +// * Свойство1 - ЛюбаяСсылка - Первое свойство синхронизации. +// * Свойство2 - ЛюбаяСсылка - Второе свойство синхронизации. +// * Свойство3 - ЛюбаяСсылка - Третье свойство синхронизации. +// ... +// * СвойствоN - ЛюбаяСсылка - N-ое свойство синхронизации. +// КоличествоСвойств - Число - Количество свойств по которым нужно вести поиск. +// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// по переданным свойствам на равенство, остальные свойства должны быть равны +// Неопределено (табличная часть дополнительных свойств должна быть пуста). +// Если Ложь, то значения остальных свойств могут быть произвольными, главное +// чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. +// +// Возвращаемое значение: СправочникСсылка.ВидыПроверок - Найденный элемент справочника, либо пустая ссылка +// в случае если поиск не дал результата. +// +Функция ОбычныйПоискВидаПроверки(ПараметрыСинхронизации, ПоискПоТочномуСоответствию = Истина) + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ВидыПроверок.Ссылка КАК ВидПроверки + |ИЗ + | Справочник.ВидыПроверок КАК ВидыПроверок + |ГДЕ + | &Условие + | + |СГРУППИРОВАТЬ ПО + | ВидыПроверок.Ссылка + | + |ИМЕЮЩИЕ + | КОЛИЧЕСТВО(ВидыПроверок.СвойстваОбъекта.Ссылка) = 0"); + + ТекстУсловий = " Истина "; + КоличествоПараметров = ПараметрыСинхронизации.Количество(); + КоличествоСвойств = КоличествоСвойств(); + + Для Индекс = 1 По КоличествоСвойств Цикл + + Свойство = "Свойство" + Формат(Индекс, "ЧГ=0"); + Если Индекс > КоличествоПараметров Тогда + Если ПоискПоТочномуСоответствию Тогда + ТекстУсловий = ТекстУсловий + " И " + Свойство + " = Неопределено"; + КонецЕсли; + Иначе + Значение = ПараметрыСинхронизации[Свойство]; + + ТекстУсловий = ТекстУсловий + " И " + Свойство + " = &" + Свойство; + Запрос.УстановитьПараметр(Свойство, Значение); + КонецЕсли; + + КонецЦикла; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Условие", ТекстУсловий); + Результат = Запрос.Выполнить().Выгрузить(); + + Возврат Результат.ВыгрузитьКолонку("ВидПроверки"); + +КонецФункции + +Функция НовыйВидПроверки(ПараметрыПроверки) + + ПараметрыСинхронизации = ПараметрыПроверки.ПараметрыСинхронизации; + + НовыйВидПроверки = Справочники.ВидыПроверок.СоздатьЭлемент(); + Если ЗначениеЗаполнено(ПараметрыПроверки.Наименование) Тогда + НовыйВидПроверки.Наименование = ПараметрыПроверки.Наименование; + Иначе + НовыйВидПроверки.Наименование = ПараметрыСинхронизации.Свойство1; + КонецЕсли; + + ПредставлениеСсылки = НовыйВидПроверки.Наименование; + + КоличествоСвойств = КоличествоСвойств(); + КоличествоПараметров = ПараметрыСинхронизации.Количество(); + + Если КоличествоСвойств > КоличествоПараметров Тогда + Для Индекс = 1 По КоличествоПараметров Цикл + ИмяСвойства = "Свойство" + Формат(Индекс, "ЧГ=0"); + НовыйВидПроверки[ИмяСвойства] = ПараметрыСинхронизации[ИмяСвойства]; + Если Индекс > 1 Тогда + ПредставлениеСсылки = ПредставлениеСсылки + ", " + Строка(ПараметрыСинхронизации[ИмяСвойства]); + КонецЕсли; + КонецЦикла; + Иначе + Для Индекс = 1 По КоличествоПараметров Цикл + ИмяСвойства = "Свойство" + Формат(Индекс, "ЧГ=0"); + Если Индекс <= КоличествоСвойств Тогда + НовыйВидПроверки[ИмяСвойства] = ПараметрыСинхронизации[ИмяСвойства]; + Если Индекс > 1 Тогда + ПредставлениеСсылки = ПредставлениеСсылки + ", " + Строка(ПараметрыСинхронизации[ИмяСвойства]); + КонецЕсли; + Иначе + ЗаполнитьЗначенияСвойств(НовыйВидПроверки.СвойстваОбъекта.Добавить(), + Новый Структура("ИмяСвойства, ЗначениеСвойства", ИмяСвойства, ПараметрыСинхронизации[ИмяСвойства])); + Если Индекс > 1 Тогда + ПредставлениеСсылки = ПредставлениеСсылки + ", " + Строка(ПараметрыСинхронизации[ИмяСвойства]); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + НовыйВидПроверки.ПредставлениеСсылки = ПредставлениеСсылки; + НовыйВидПроверки.Записать(); + + Возврат НовыйВидПроверки.Ссылка; + +КонецФункции + +Функция КоличествоСвойств() + + Возврат 5; + +КонецФункции + +#КонецОбласти + +#Область СинхронизацияСправочникаПроверокСлужебная + +Процедура ОбновлениеСправочникаПроверок(ГруппыПроверок, Проверки) + + ДобавитьГруппыПроверок(ГруппыПроверок); + ДобавитьПроверки(Проверки); + +КонецПроцедуры + +Процедура ДобавитьГруппыПроверок(ГруппыПроверок) + + Для Каждого ГруппаПроверок Из ГруппыПроверок Цикл + + ГруппаПроверокПоИдентификатору = КонтрольВеденияУчета.ПроверкаПоИдентификатору(ГруппаПроверок.Идентификатор); + + Если Не ЗначениеЗаполнено(ГруппаПроверокПоИдентификатору) Тогда + ГруппаПроверокОбъект = Справочники.ПравилаПроверкиУчета.СоздатьГруппу(); + Иначе + + Если ГруппаПроверокПоИдентификатору.ПроверкаВеденияУчетаИзменена Тогда + Продолжить; + КонецЕсли; + + ГруппаПроверокОбъект = ГруппаПроверокПоИдентификатору.ПолучитьОбъект(); + Если ГруппаПроверокПоИдентификатору.ПометкаУдаления Тогда + ГруппаПроверокОбъект.УстановитьПометкуУдаления(Ложь); + КонецЕсли; + + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ГруппаПроверокОбъект, ГруппаПроверок); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ГруппаПроверокОбъект); + + КонецЦикла; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ГруппыПроверок.Идентификатор КАК Идентификатор, + | ГруппыПроверок.Наименование КАК Наименование + |ПОМЕСТИТЬ ВТ_ГруппыПроверок + |ИЗ + | &ГруппыПроверок КАК ГруппыПроверок + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПравилаПроверкиУчета.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ГруппыПроверок КАК ВТ_ГруппыПроверок + | ПО ПравилаПроверкиУчета.Идентификатор = ВТ_ГруппыПроверок.Идентификатор + |ГДЕ + | ВТ_ГруппыПроверок.Наименование ЕСТЬ NULL + | И ПравилаПроверкиУчета.ЭтоГруппа + | И НЕ ПравилаПроверкиУчета.Предопределенный + | И НЕ ПравилаПроверкиУчета.ПроверкаВеденияУчетаИзменена"); + + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ГруппыПроверок", ГруппыПроверок); + + Результат = Запрос.Выполнить().Выбрать(); + Пока Результат.Следующий() Цикл + ГруппаПроверокОбъект = Результат.Ссылка.ПолучитьОбъект(); + ГруппаПроверокОбъект.УстановитьПометкуУдаления(Истина); + КонецЦикла; + + Запрос.МенеджерВременныхТаблиц.Закрыть(); + Запрос = Неопределено; + +КонецПроцедуры + +Процедура ДобавитьПроверки(Проверки) + + Для Каждого Проверка Из Проверки Цикл + + ПроверкаПоИдентификатору = КонтрольВеденияУчета.ПроверкаПоИдентификатору(Проверка.Идентификатор); + Если Не ЗначениеЗаполнено(ПроверкаПоИдентификатору) Тогда + + ПроверкаОбъект = Справочники.ПравилаПроверкиУчета.СоздатьЭлемент(); + ПроверкаОбъект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию; + ПроверкаОбъект.ВажностьПроблемы = Перечисления.ВажностьПроблемыУчета.Ошибка; + + Иначе + + Если ПроверкаПоИдентификатору.ПроверкаВеденияУчетаИзменена Тогда + Продолжить; + КонецЕсли; + + ПроверкаОбъект = ПроверкаПоИдентификатору.ПолучитьОбъект(); + Если ПроверкаПоИдентификатору.ПометкаУдаления Тогда + ПроверкаОбъект.УстановитьПометкуУдаления(Ложь); + КонецЕсли; + + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ПроверкаОбъект, Проверка); + + ПроверкаОбъект.Родитель = КонтрольВеденияУчета.ПроверкаПоИдентификатору(Проверка.ИдентификаторРодителя); + ПроверкаОбъект.Использование = Истина; + + Если ЗначениеЗаполнено(Проверка.ЛимитПроблем) Тогда + ПроверкаОбъект.ЛимитПроблем = Проверка.ЛимитПроблем; + Иначе + ПроверкаОбъект.ЛимитПроблем = 1000; + КонецЕсли; + + Если ЗначениеЗаполнено(Проверка.ДатаНачалаПроверки) Тогда + ПроверкаОбъект.ДатаНачалаПроверки = Проверка.ДатаНачалаПроверки; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПроверкаОбъект); + КонецЦикла; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | Проверки.Идентификатор КАК Идентификатор, + | Проверки.Наименование КАК Наименование + |ПОМЕСТИТЬ ВТ_Проверки + |ИЗ + | &Проверки КАК Проверки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПравилаПроверкиУчета.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Проверки КАК ВТ_Проверки + | ПО ПравилаПроверкиУчета.Идентификатор = ВТ_Проверки.Идентификатор + |ГДЕ + | ВТ_Проверки.Наименование ЕСТЬ NULL + | И НЕ ПравилаПроверкиУчета.ЭтоГруппа + | И НЕ ПравилаПроверкиУчета.Предопределенный + | И НЕ ПравилаПроверкиУчета.ПроверкаВеденияУчетаИзменена"); + + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("Проверки", Проверки); + + Результат = Запрос.Выполнить().Выбрать(); + Пока Результат.Следующий() Цикл + ПроверкаОбъект = Результат.Ссылка.ПолучитьОбъект(); + ПроверкаОбъект.УстановитьПометкуУдаления(Истина); + КонецЦикла; + + Запрос.МенеджерВременныхТаблиц.Закрыть(); + Запрос = Неопределено; + +КонецПроцедуры + +Процедура ОбновитьВспомогательныеДанныеСправочникаПоИзменениямКонфигурации() + + УстановитьПривилегированныйРежим(Истина); + + ПроверкиВеденияУчета = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета(); + ОбновлениеСправочникаПроверок(ПроверкиВеденияУчета.ГруппыПроверок, ПроверкиВеденияУчета.Проверки); + +КонецПроцедуры + +// Функция формирует хэш таблицы проверок, для сравнения с предыдущим хешем, +// хранящимся в информационной базе (РегистрСведений.ПараметрыРаботыПрограммы). +// Хэш формируется следующим образом: Формируются таблицы проверок (будущие элементы справочника +// ПравилаПроверкиУчета) и групп проверок (будущие группы указанного справочника) на текущий +// момент (момент обновления информационной базы). Далее формируется массив структур, на основании +// которого рассчитывается фиксированное соответствие, от которого, в свою очередь, рассчитывается хэш-сумма. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - Фиксированное соответствие, содержащее указанную хэш-сумму. +// +Функция ХэшированиеСистемныхПроверок() + + ДанныеСистемныхПроверок = Новый Соответствие; + + ПроверкиВеденияУчета = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета(); + МассивХэша = Новый Массив; + + Для Каждого ЭлементПроверокУчета Из ПроверкиВеденияУчета Цикл + + ЗначениеЭлементаПроверок = ЭлементПроверокУчета.Значение; + КолонкиЭлементаПроверок = ЗначениеЭлементаПроверок.Колонки; + + Для Каждого СтрокаЭлементаПроверок Из ЗначениеЭлементаПроверок Цикл + + СтруктураСтроки = Новый Структура; + + Для Каждого КолонкаЭлементаПроверок Из КолонкиЭлементаПроверок Цикл + СтруктураСтроки.Вставить(КолонкаЭлементаПроверок.Имя, СтрокаЭлементаПроверок[КолонкаЭлементаПроверок.Имя]); + КонецЦикла; + + Если СтруктураСтроки.Количество() > 0 Тогда + МассивХэша.Добавить(СтруктураСтроки); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + ДанныеСистемныхПроверок.Вставить(ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Новый ФиксированныйМассив(МассивХэша))); + + Возврат Новый ФиксированноеСоответствие(ДанныеСистемныхПроверок); + +КонецФункции + +Функция ЕстьИзмененияПараметровСистемныхПроверок() + + УстановитьПривилегированныйРежим(Истина); + + ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы("СтандартныеПодсистемы.КонтрольВеденияУчета.СистемныеПроверки"); + Возврат ПоследниеИзменения = Неопределено Или ПоследниеИзменения.Количество() > 0; + +КонецФункции + +#КонецОбласти + +#Область КонтрольСсылочнойЦелостности + +Процедура НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Реквизиты = ОбъектМетаданных.Реквизиты; + ТабличныеЧасти = ОбъектМетаданных.ТабличныеЧасти; + + ТекстЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК Ссылка + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Ссылка > &Ссылка + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Ссылка"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", ""); + + Результат = Запрос.Выполнить().Выгрузить(); + + ОграничениеПоДате = ПараметрыПроверки.ДатаНачалаПроверки; + КэшБитыхСсылок = Новый Массив; + + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + СсылкаНаОбъект = СтрокаРезультата.Ссылка; + УточнениеПроблемы = ""; + + Если ЗначениеЗаполнено(ОграничениеПоДате) + И ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных) + И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Дата") < ОграничениеПоДате Тогда + Продолжить; + КонецЕсли; + + Для Каждого Реквизит Из Реквизиты Цикл + + ТекущаяСсылка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, Реквизит.Имя); + + Если Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указан несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, Реквизит.Имя, ТекущаяСсылка); + + Иначе + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указан несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, Реквизит.Имя, ТекущаяСсылка); + КэшБитыхСсылок.Добавить(ТекущаяСсылка); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Если ОбщегоНазначения.ЭтоЗадача(ОбъектМетаданных) Тогда + + РеквизитыАдресации = ОбъектМетаданных.РеквизитыАдресации; + Для Каждого РеквизитАдресации Из РеквизитыАдресации Цикл + + ТекущаяСсылка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, РеквизитАдресации.Имя); + + Если Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите адресации ""%2"" указан несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, РеквизитАдресации.Имя, ТекущаяСсылка); + + Иначе + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите адресации ""%2"" указан несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, РеквизитАдресации.Имя, ТекущаяСсылка); + КэшБитыхСсылок.Добавить(ТекущаяСсылка); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + + РеквизитыТабличнойЧасти = ТабличнаяЧасть.Реквизиты; + ТекущийНомерСтроки = 1; + + Для Каждого РеквизитТабличнойЧасти Из РеквизитыТабличнойЧасти Цикл + + ЗапросКТабличнойЧасти = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, ТабличнаяЧасть.Имя + "." + РеквизитТабличнойЧасти.Имя); + ВыборкаИзТабличнойЧасти = ЗапросКТабличнойЧасти.Выбрать(); + + Пока ВыборкаИзТабличнойЧасти.Следующий() Цикл + + ТекущаяСсылка = ВыборкаИзТабличнойЧасти[РеквизитТабличнойЧасти.Имя]; + + Если Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка №%4) указан несуществующий элемент: ""%5"".'"), + СсылкаНаОбъект, РеквизитТабличнойЧасти.Имя, ТабличнаяЧасть.Имя, ТекущийНомерСтроки, ТекущаяСсылка); + + Иначе + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка №%4) указан несуществующий элемент: ""%5"".'"), + СсылкаНаОбъект, РеквизитТабличнойЧасти.Имя, ТабличнаяЧасть.Имя, ТекущийНомерСтроки, ТекущаяСсылка); + КэшБитыхСсылок.Добавить(ТекущаяСсылка); + + КонецЕсли; + + КонецЕсли; + + ТекущийНомерСтроки = ТекущийНомерСтроки + 1; + + КонецЦикла; + + ЗапросКТабличнойЧасти = Неопределено; + + КонецЦикла; + + КонецЦикла; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + Проблема = ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; + Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда + Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); + КонецЕсли; + + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка); + Результат = Запрос.Выполнить().Выгрузить(); + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +#Область КонтрольСсылочнойЦелостностиВРегистрах + +Процедура НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки) + + Если ОбъектМетаданных.Измерения.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоРегистрНакопления(ОбъектМетаданных) Тогда + НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки); + ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) Тогда + НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки); + ИначеЕсли ОбщегоНазначения.ЭтоРегистрБухгалтерии(ОбъектМетаданных) Тогда + НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки); + ИначеЕсли ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) Тогда + НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки); + КонецЕсли; + +КонецПроцедуры + +#Область КонтрольСсылочнойЦелостностиВРегистрахНакопления + +Процедура НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Измерения = ОбъектМетаданных.Измерения; + Реквизиты = ОбъектМетаданных.Реквизиты; + + ИнформацияОМетаданных = Новый ТаблицаЗначений; + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); + ИнформацияОМетаданных.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + + ПоляВыборки = "НомерСтроки Как НомерСтроки, Регистратор Как РегистраторРеквизитСсылка, ПредставлениеСсылки(Регистратор) Как РегистраторРеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); + Для Каждого Измерение Из Измерения Цикл + ИмяИзмерения = Измерение.Имя; + ПоляВыборки = ПоляВыборки + "," + ИмяИзмерения + " Как " + ИмяИзмерения + + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); + КонецЦикла; + Для Каждого Реквизит Из Реквизиты Цикл + ИмяРеквизита = Реквизит.Имя; + ПоляВыборки = ПоляВыборки + "," + ИмяРеквизита + " Как " + ИмяРеквизита + + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | &ПоляВыборки КАК ПоляВыборки + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ВЫБОР + | КОГДА ОбъектМетаданных.Регистратор = &Регистратор + | ТОГДА ОбъектМетаданных.НомерСтроки > &НомерСтроки + | ИНАЧЕ ОбъектМетаданных.Регистратор > &Регистратор + | КОНЕЦ + | И ОбъектМетаданных.Период > &ДатаНачалаПроверки + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Регистратор, + | ОбъектМетаданных.НомерСтроки"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("НомерСтроки", 0); + Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + Запрос.УстановитьПараметр("Регистратор", ""); + Результат = Запрос.Выполнить().Выгрузить(); + + КэшБитыхСсылок = Новый Массив; + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл + + ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; + УточнениеПроблемы = ""; + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра накопления ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], + СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + + Иначе + + Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра накопления ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], + СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + КэшБитыхСсылок.Добавить(ТекущаяСсылка); + + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + СтруктураНабораЗаписей = Новый Структура; + СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + КонецЦикла; + + Запрос.УстановитьПараметр("НомерСтроки", СтрокаРезультата["НомерСтроки"]); + Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#Область КонтрольСсылочнойЦелостностиВРегистрахСведений + +Процедура НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки) + + Измерения = ОбъектМетаданных.Измерения; + Ресурсы = ОбъектМетаданных.Ресурсы; + Реквизиты = ОбъектМетаданных.Реквизиты; + + ИнформацияОМетаданных = Новый ТаблицаЗначений; + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); + ИнформацияОМетаданных.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + + ПоляВыборки = ""; + Для Каждого Измерение Из Измерения Цикл + ИмяИзмерения = Измерение.Имя; + ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяИзмерения + " Как " + ИмяИзмерения + + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); + КонецЦикла; + + Для Каждого Ресурс Из Ресурсы Цикл + ИмяРесурса = Ресурс.Имя; + ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяРесурса + " Как " + ИмяРесурса + + "РесурсСсылка,ПредставлениеСсылки(" + ИмяРесурса + ") Как " + ИмяРесурса + "РесурсПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Ресурс", НСтр("ru = 'ресурсе'"), ИмяРесурса)); + КонецЦикла; + + Для Каждого Реквизит Из Реквизиты Цикл + ИмяРеквизита = Реквизит.Имя; + ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяРеквизита + " Как " + ИмяРеквизита + + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); + КонецЦикла; + + Если ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда + НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки); + Иначе + Если ОбъектМетаданных.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда + НайтиБитыеСсылкиВНеПодчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки); + Иначе + НайтиБитыеСсылкиВНеПодчиненныхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки) + + ПоляВыборки = ПоляВыборки + ", НомерСтроки Как НомерСтроки, Регистратор Как РегистраторРеквизитСсылка, ПредставлениеСсылки(Регистратор) Как РегистраторРеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); + + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | &ПоляВыборки КАК ПоляВыборки + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ВЫБОР + | КОГДА ОбъектМетаданных.Регистратор = &Регистратор + | ТОГДА ОбъектМетаданных.НомерСтроки > &НомерСтроки + | ИНАЧЕ ОбъектМетаданных.Регистратор > &Регистратор + | КОНЕЦ + | И &Периодичность + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Регистратор, + | ОбъектМетаданных.НомерСтроки"); + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "КАК ПоляВыборки", ""); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПоляВыборки", ПоляВыборки); + + Запрос.УстановитьПараметр("НомерСтроки", 0); + Запрос.УстановитьПараметр("Регистратор", ""); + + Если ОбъектМетаданных.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Периодичность", "Истина"); + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Периодичность", "ОбъектМетаданных.Период > &ДатаНачалаПроверки"); + Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + КонецЕсли; + + Результат = Запрос.Выполнить().Выгрузить(); + + КэшБитыхСсылок = Новый Массив; + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл + + ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; + УточнениеПроблемы = ""; + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], + СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + + Иначе + + Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], + СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + КэшБитыхСсылок.Добавить(ТекущаяСсылка); + + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + СтруктураНабораЗаписей = Новый Структура; + СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + КонецЦикла; + + Запрос.УстановитьПараметр("НомерСтроки", СтрокаРезультата["НомерСтроки"]); + Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +Процедура НайтиБитыеСсылкиВНеПодчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки) + + Условие = "Период >= &Период"; + ПоляУпорядочивания = "Период"; + Измерения = ОбъектМетаданных.Измерения; + + Для Каждого Измерение Из Измерения Цикл + Условие = Условие + ?(ЗначениеЗаполнено(Условие), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; + ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Период КАК Период, + | &ПоляВыборки КАК ПоляВыборки + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Период > &ДатаНачалаПроверки + | И &Условие"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "Истина И Истина И Истина Упорядочить По " + ПоляУпорядочивания); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + Результат = Запрос.Выполнить().Выгрузить(); + + УсловиеАбсолюта = "Истина И Истина И Истина"; + КэшБитыхСсылок = Новый Массив; + + Пока Истина Цикл + + ЭтоПервыйПроход = СтрНайти(Запрос.Текст, УсловиеАбсолюта) <> 0; + + Если Результат.Количество() = 0 Или (Не ЭтоПервыйПроход И Результат.Количество() = 1) Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + Если Не ЭтоПервыйПроход И Результат.Индекс(СтрокаРезультата) = 0 Тогда + Продолжить; + КонецЕсли; + + Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл + + ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; + УточнениеПроблемы = ""; + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + + Иначе + + Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + КэшБитыхСсылок.Добавить(ТекущаяСсылка); + + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + СтруктураНабораЗаписей = Новый Структура; + СтруктураНабораЗаписей.Вставить("Период", СтрокаРезультата["Период"]); + Для Каждого Измерение Из Измерения Цикл + ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; + Если КэшБитыхСсылок.Найти(ИзмерениеСсылка) <> Неопределено Тогда + Продолжить; + КонецЕсли; + СтруктураНабораЗаписей.Вставить(Измерение.Имя, ИзмерениеСсылка); + КонецЦикла; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + КонецЦикла; + + Если ЭтоПервыйПроход Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, УсловиеАбсолюта, Условие); + КонецЕсли; + + Запрос.УстановитьПараметр("Период", СтрокаРезультата["Период"]); + Для Каждого Измерение Из Измерения Цикл + Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]); + КонецЦикла; + + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +Процедура НайтиБитыеСсылкиВНеПодчиненныхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки) + + Условие = ""; + ПоляУпорядочивания = ""; + Измерения = ОбъектМетаданных.Измерения; + + Для Каждого Измерение Из Измерения Цикл + Условие = Условие + ?(ЗначениеЗаполнено(Условие), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; + ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | &ПоляВыборки КАК ПоляВыборки + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | &Условие"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "ИСТИНА УПОРЯДОЧИТЬ ПО " + ПоляУпорядочивания); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); + + Запрос = Новый Запрос(ТекстЗапроса); + Результат = Запрос.Выполнить().Выгрузить(); + + УсловиеАбсолюта = "ГДЕ" + Символы.ПС + Символы.Таб + "ИСТИНА"; + КэшБитыхСсылок = Новый Массив; + + Пока Истина Цикл + + ЭтоПервыйПроход = СтрНайти(Запрос.Текст, УсловиеАбсолюта) <> 0; + + Если Результат.Количество() = 0 Или (Не ЭтоПервыйПроход И Результат.Количество() = 1) Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + Если Не ЭтоПервыйПроход И Результат.Индекс(СтрокаРезультата) = 0 Тогда + Продолжить; + КонецЕсли; + + Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл + + ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; + УточнениеПроблемы = ""; + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + + Иначе + + Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + КэшБитыхСсылок.Добавить(ТекущаяСсылка); + + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + СтруктураНабораЗаписей = Новый Структура; + Для Каждого Измерение Из Измерения Цикл + ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; + Если КэшБитыхСсылок.Найти(ИзмерениеСсылка) <> Неопределено Тогда + Продолжить; + КонецЕсли; + СтруктураНабораЗаписей.Вставить(Измерение.Имя, ИзмерениеСсылка); + КонецЦикла; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + КонецЦикла; + + Если ЭтоПервыйПроход Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, УсловиеАбсолюта, "Где " + Условие); + КонецЕсли; + + Для Каждого Измерение Из Измерения Цикл + Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]); + КонецЦикла; + + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#Область КонтрольСсылочнойЦелостностиВРегистрахБухгалтерии + +Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Измерения = ОбъектМетаданных.Измерения; + Реквизиты = ОбъектМетаданных.Реквизиты; + СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты; + + МаксимальноеКоличествоСубконто = ОбъектМетаданных.ПланСчетов.МаксКоличествоСубконто; + КорреспонденцияОбъекта = ОбъектМетаданных.Корреспонденция; + + ИнформацияОМетаданных = Новый ТаблицаЗначений; + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(64))); + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(64))); + ИнформацияОМетаданных.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + + ПоляВыборки = "НомерСтроки Как НомерСтроки, Регистратор Как РегистраторРеквизитСсылка, ПредставлениеСсылки(Регистратор) Как РегистраторРеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); + + + Для ИндексСубконто = 1 По МаксимальноеКоличествоСубконто Цикл + + Если КорреспонденцияОбъекта Тогда + + ИндексСтрокой = Формат(ИндексСубконто, "ЧГ=0"); + + ИмяСубконтоДт = "СубконтоДт" + ИндексСтрокой; + ПоляВыборки = ПоляВыборки + "," + ИмяСубконтоДт + " Как " + ИмяСубконтоДт + + "СубконтоДтСсылка,ПредставлениеСсылки(" + ИмяСубконтоДт + ") Как " + ИмяСубконтоДт + "СубконтоДтПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СубконтоДт", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'субконто дт %1'"), ИндексСтрокой), ИмяСубконтоДт)); + + ИмяСубконтоКт = "СубконтоКт" + ИндексСтрокой; + ПоляВыборки = ПоляВыборки + "," + ИмяСубконтоКт + " Как " + ИмяСубконтоКт + + "СубконтоКтСсылка,ПредставлениеСсылки(" + ИмяСубконтоКт + ") Как " + ИмяСубконтоКт + "СубконтоКтПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СубконтоКт", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'субконто кт %1'"), ИндексСтрокой), ИмяСубконтоКт)); + + ИмяВидаСубконтоДт = "ВидСубконтоДт" + ИндексСтрокой; + ПоляВыборки = ПоляВыборки + "," + ИмяВидаСубконтоДт + " Как " + ИмяВидаСубконтоДт + + "ВидСубконтоДтСсылка,ПредставлениеСсылки(" + ИмяВидаСубконтоДт + ") Как " + ИмяВидаСубконтоДт + "ВидСубконтоДтПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ВидСубконтоДт", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'виде субконто дт %1'"), ИндексСтрокой), ИмяВидаСубконтоДт)); + + ИмяВидаСубконтоКт = "ВидСубконтоКт" + ИндексСтрокой; + ПоляВыборки = ПоляВыборки + "," + ИмяВидаСубконтоКт + " Как " + ИмяВидаСубконтоКт + + "ВидСубконтоКтСсылка,ПредставлениеСсылки(" + ИмяВидаСубконтоКт + ") Как " + ИмяВидаСубконтоКт + "ВидСубконтоКтПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ВидСубконтоКт", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'виде субконто кт %1'"), ИндексСтрокой), ИмяВидаСубконтоКт)); + + Иначе + + ИмяСубконто = "Субконто" + ИндексСтрокой; + ПоляВыборки = ПоляВыборки + "," + ИмяСубконто + " Как " + ИмяСубконто + + "СубконтоСсылка,ПредставлениеСсылки(" + ИмяСубконто + ") Как " + ИмяСубконто + "СубконтоПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Субконто", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'субконто %1'"), ИндексСтрокой), ИмяСубконто)); + + ИмяВидаСубконто = "ВидСубконто" + ИндексСтрокой; + ПоляВыборки = ПоляВыборки + "," + ИмяВидаСубконто + " Как " + ИмяВидаСубконто + + "ВидСубконтоСсылка,ПредставлениеСсылки(" + ИмяВидаСубконто + ") Как " + ИмяВидаСубконто + "ВидСубконтоПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ВидСубконто", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'виде субконто %1'"), ИндексСтрокой), ИмяВидаСубконто)); + + КонецЕсли; + + КонецЦикла; + + Если КорреспонденцияОбъекта Тогда + + ИмяСчетаДт = "СчетДт"; + ПоляВыборки = ПоляВыборки + "," + ИмяСчетаДт + " Как " + ИмяСчетаДт + + "СчетДтСсылка,ПредставлениеСсылки(" + ИмяСчетаДт + ") Как " + ИмяСчетаДт + "СчетДтПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СчетДт", + НСтр("ru = 'счете дт'"), ИмяСчетаДт)); + + ИмяСчетаКт = "СчетКт"; + ПоляВыборки = ПоляВыборки + "," + ИмяСчетаКт + " Как " + ИмяСчетаКт + + "СчетКтСсылка,ПредставлениеСсылки(" + ИмяСчетаКт + ") Как " + ИмяСчетаКт + "СчетКтПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СчетКт", + НСтр("ru = 'счете кт'"), ИмяСчетаКт)); + + Иначе + + ИмяСчета = "Счет"; + ПоляВыборки = ПоляВыборки + "," + ИмяСчета + " Как " + ИмяСчета + + "ИмяСчетаСсылка,ПредставлениеСсылки(" + ИмяСчета + ") Как " + ИмяСчета + "ИмяСчетаПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Счет", + НСтр("ru = 'счете'"), ИмяСчета)); + + КонецЕсли; + + Для Каждого Измерение Из Измерения Цикл + + Если Не (Измерение.Балансовый Или Не КорреспонденцияОбъекта) Тогда + + ИмяИзмеренияДт = Измерение.Имя + "Дт"; + ПоляВыборки = ПоляВыборки + "," + ИмяИзмеренияДт + " Как " + ИмяИзмеренияДт + + "ИзмерениеДтСсылка,ПредставлениеСсылки(" + ИмяИзмеренияДт + ") Как " + ИмяИзмеренияДт + "ИзмерениеДтПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ИзмерениеДт", НСтр("ru = 'измерении дт'"), ИмяИзмеренияДт)); + + ИмяИзмеренияКт = Измерение.Имя + "Кт"; + ПоляВыборки = ПоляВыборки + "," + ИмяИзмеренияКт + " Как " + ИмяИзмеренияКт + + "ИзмерениеКтСсылка,ПредставлениеСсылки(" + ИмяИзмеренияКт + ") Как " + ИмяИзмеренияКт + "ИзмерениеКтПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "ИзмерениеКт", НСтр("ru = 'измерении кт'"), ИмяИзмеренияКт)); + + Иначе + + ИмяИзмерения = Измерение.Имя; + ПоляВыборки = ПоляВыборки + "," + ИмяИзмерения + " Как " + ИмяИзмерения + + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); + + КонецЕсли; + + КонецЦикла; + + Для Каждого Реквизит Из Реквизиты Цикл + ИмяРеквизита = Реквизит.Имя; + ПоляВыборки = ПоляВыборки + "," + ИмяРеквизита + " Как " + ИмяРеквизита + + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); + КонецЦикла; + + Для Каждого СтандартныйРеквизит Из СтандартныеРеквизиты Цикл + + ИмяСтандартногоРеквизита = СтандартныйРеквизит.Имя; + Если ИмяСтандартногоРеквизита = "Регистратор" Или ИмяСтандартногоРеквизита = "НомерСтроки" Или СтрНайти(ИмяСтандартногоРеквизита, "Субконто") <> 0 Тогда + Продолжить; + КонецЕсли; + + ПоляВыборки = ПоляВыборки + "," + ИмяСтандартногоРеквизита + " Как " + ИмяСтандартногоРеквизита + + "СтандартныйРеквизитСсылка,ПредставлениеСсылки(" + ИмяСтандартногоРеквизита + ") Как " + ИмяСтандартногоРеквизита + "СтандартныйРеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СтандартныйРеквизит", НСтр("ru = 'стандартном реквизите'"), ИмяСтандартногоРеквизита)); + + КонецЦикла; + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | &ПоляВыборки КАК ПоляВыборки + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Регистратор, + | ОбъектМетаданных.НомерСтроки"); + + Условие = + "Период > &ДатаНачалаПроверки + |И ВЫБОР + | КОГДА Регистратор = &Регистратор + | ТОГДА НомерСтроки > &НомерСтроки + | ИНАЧЕ Регистратор > &Регистратор + | КОНЕЦ"; + + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "КАК ПоляВыборки", ""); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя() + ".ДвиженияССубконто(, , " + Условие + ", , )"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПоляВыборки", ПоляВыборки); + + Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + Запрос.УстановитьПараметр("НомерСтроки", 0); + Запрос.УстановитьПараметр("Регистратор", ""); + + Результат = Запрос.Выполнить().Выгрузить(); + + КэшБитыхСсылок = Новый Массив; + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл + + ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; + УточнениеПроблемы = ""; + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра бухгалтерии ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], + СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + + Иначе + + Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра бухгалтерии ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], + СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + КэшБитыхСсылок.Добавить(ТекущаяСсылка); + + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + СтруктураНабораЗаписей = Новый Структура; + СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + КонецЦикла; + + Запрос.УстановитьПараметр("НомерСтроки", СтрокаРезультата["НомерСтроки"]); + Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#Область КонтрольСсылочнойЦелостностиВРегистрахРасчета + +Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Измерения = ОбъектМетаданных.Измерения; + Реквизиты = ОбъектМетаданных.Реквизиты; + СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты; + + ИнформацияОМетаданных = Новый ТаблицаЗначений; + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(64))); + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(64))); + ИнформацияОМетаданных.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + + ПоляВыборки = "НомерСтроки Как НомерСтроки, Регистратор Как РегистраторРеквизитСсылка, ПредставлениеСсылки(Регистратор) Как РегистраторРеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); + Для Каждого Измерение Из Измерения Цикл + ИмяИзмерения = Измерение.Имя; + ПоляВыборки = ПоляВыборки + "," + ИмяИзмерения + " Как " + ИмяИзмерения + + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); + КонецЦикла; + + Для Каждого Реквизит Из Реквизиты Цикл + ИмяРеквизита = Реквизит.Имя; + ПоляВыборки = ПоляВыборки + "," + ИмяРеквизита + " Как " + ИмяРеквизита + + "РеквизитСсылка,ПредставлениеСсылки(" + ИмяРеквизита + ") Как " + ИмяРеквизита + "РеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), ИмяРеквизита)); + КонецЦикла; + + Для Каждого СтандартныйРеквизит Из СтандартныеРеквизиты Цикл + + ИмяСтандартногоРеквизита = СтандартныйРеквизит.Имя; + + Если ИмяСтандартногоРеквизита = "Регистратор" Или ИмяСтандартногоРеквизита = "НомерСтроки" Тогда + Продолжить; + КонецЕсли; + + ПоляВыборки = ПоляВыборки + "," + ИмяСтандартногоРеквизита + " Как " + ИмяСтандартногоРеквизита + + "СтандартныйРеквизитСсылка,ПредставлениеСсылки(" + ИмяСтандартногоРеквизита + ") Как " + ИмяСтандартногоРеквизита + "СтандартныйРеквизитПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "СтандартныйРеквизит", НСтр("ru = 'стандартном реквизите'"), ИмяСтандартногоРеквизита)); + + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | &ПоляВыборки КАК ПоляВыборки + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ВЫБОР + | КОГДА ОбъектМетаданных.Регистратор = &Регистратор + | ТОГДА ОбъектМетаданных.НомерСтроки > &НомерСтроки + | ИНАЧЕ ОбъектМетаданных.Регистратор > &Регистратор + | КОНЕЦ + | И ОбъектМетаданных.ПериодРегистрации > &ДатаНачалаПроверки + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Регистратор, + | ОбъектМетаданных.НомерСтроки"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("НомерСтроки", 0); + Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + Запрос.УстановитьПараметр("Регистратор", ""); + Результат = Запрос.Выполнить().Выгрузить(); + + КэшБитыхСсылок = Новый Массив; + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных Цикл + + ТекущаяСсылка = СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Ссылка"]; + УточнениеПроблемы = ""; + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда + Продолжить; + КонецЕсли; + + Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра расчета ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], + СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + + Иначе + + Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра расчета ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, + Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], + СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); + КэшБитыхСсылок.Добавить(ТекущаяСсылка); + + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + СтруктураНабораЗаписей = Новый Структура; + СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + КонецЦикла; + + Запрос.УстановитьПараметр("НомерСтроки", СтрокаРезультата["НомерСтроки"]); + Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти + +#Область ПроверкаЗаполненностиОбязательныхРеквизитов + +Процедура НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Реквизиты = ОбъектМетаданных.Реквизиты; + ТабличныеЧасти = ОбъектМетаданных.ТабличныеЧасти; + + ТекстЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК Ссылка + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Ссылка > &Ссылка + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Ссылка"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", ""); + + Результат = Запрос.Выполнить().Выгрузить(); + + ОграничениеПоДате = ПараметрыПроверки.ДатаНачалаПроверки; + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + СсылкаНаОбъект = СтрокаРезультата.Ссылка; + + Если ЗначениеЗаполнено(ОграничениеПоДате) + И ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных) + И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Дата") < ОграничениеПоДате Тогда + Продолжить; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных) И Не ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Проведен") Тогда + Продолжить; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоПланОбмена(ОбъектМетаданных) И СсылкаНаОбъект.ЭтотУзел Тогда + Продолжить; + КонецЕсли; + + УточнениеПроблемы = ""; + ПроверяемыйОбъект = СсылкаНаОбъект.ПолучитьОбъект(); + Если Не ПроверяемыйОбъект.ПроверитьЗаполнение() Тогда + УточнениеПроблемы = УточнениеПроблемы(ПолучитьСообщенияПользователю(Истина)); + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + Проблема = ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); + + Проблема.УточнениеПроблемы = НСтр("ru = 'Не заполнены реквизиты, обязательные к заполнению:'") + Символы.ПС + УточнениеПроблемы; + Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда + Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); + КонецЕсли; + + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка); + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +#Область ПроверкаЗаполненностиОбязательныхРеквизитовВРегистрах + +Процедура НайтиНезаполненныеОбязательныеРеквизитыВРегистрах(ОбъектМетаданных, ПараметрыПроверки) + + Если ОбъектМетаданных.Измерения.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоРегистрНакопления(ОбъектМетаданных) + Или ОбщегоНазначения.ЭтоРегистрБухгалтерии(ОбъектМетаданных) + Или ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) + Или (ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) + И ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору) Тогда + НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхРегистрах(ОбъектМетаданных, ПараметрыПроверки); + Иначе + НайтиНезаполненныеОбязательныеРеквизитыВНеПодчиненныхРегистрах(ОбъектМетаданных, ПараметрыПроверки); + КонецЕсли; + +КонецПроцедуры + +Процедура НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхРегистрах(ОбъектМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.НомерСтроки КАК НомерСтроки, + | ОбъектМетаданных.Регистратор КАК РегистраторРеквизитСсылка, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Регистратор) КАК РегистраторПредставление + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ВЫБОР + | КОГДА ОбъектМетаданных.Регистратор = &Регистратор + | ТОГДА ОбъектМетаданных.НомерСтроки > &НомерСтроки + | ИНАЧЕ ОбъектМетаданных.Регистратор > &Регистратор + | КОНЕЦ + | И &УсловиеОграниченияПоДате + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Регистратор, + | ОбъектМетаданных.НомерСтроки"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("НомерСтроки", 0); + Если Не (ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) + И ОбъектМетаданных.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический) Тогда + Если ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОграниченияПоДате", "ОбъектМетаданных.ПериодРегистрации > &ДатаНачалаПроверки"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОграниченияПоДате", "ОбъектМетаданных.Период > &ДатаНачалаПроверки"); + КонецЕсли; + Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОграниченияПоДате", "Истина"); + КонецЕсли; + Запрос.УстановитьПараметр("Регистратор", ""); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); + Запрос.Текст = ТекстЗапроса; + Результат = Запрос.Выполнить().Выгрузить(); + + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ТекущийНаборЗаписей.Отбор.Регистратор.Установить(СтрокаРезультата.РегистраторРеквизитСсылка); + ТекущийНаборЗаписей.Прочитать(); + + УточнениеПроблемы = ""; + Если Не ТекущийНаборЗаписей.ПроверитьЗаполнение() Тогда + УточнениеПроблемы = УточнениеПроблемы(ПолучитьСообщенияПользователю(Истина)); + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + СтруктураНабораЗаписей = Новый Структура; + СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: + |%1, + |обнаружены не заполненные данные обязательные к заполнению: %2'"), + " • " + НСтр("ru = 'Регистратор:'") + " = """ + СтрокаРезультата.РегистраторПредставление, Символы.ПС + УточнениеПроблемы); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + Запрос.УстановитьПараметр("НомерСтроки", СтрокаРезультата.НомерСтроки); + Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +Процедура НайтиНезаполненныеОбязательныеРеквизитыВНеПодчиненныхРегистрах(ОбъектМетаданных, ПараметрыПроверки) + + Измерения = ОбъектМетаданных.Измерения; + + ИнформацияОМетаданных = Новый ТаблицаЗначений; + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВИменительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); + ИнформацияОМетаданных.Колонки.Добавить("ТипМетаданныхВТворительномПадеже", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(16))); + ИнформацияОМетаданных.Колонки.Добавить("ИмяМетаданных", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + + ПоляВыборки = ""; + Для Каждого Измерение Из Измерения Цикл + ИмяИзмерения = Измерение.Имя; + ПоляВыборки = ПоляВыборки + ?(ЗначениеЗаполнено(ПоляВыборки), ",", "") + ИмяИзмерения + " Как " + ИмяИзмерения + + "ИзмерениеСсылка,ПредставлениеСсылки(" + ИмяИзмерения + ") Как " + ИмяИзмерения + "ИзмерениеПредставление"; + ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), + Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Измерение", НСтр("ru = 'измерении'"), ИмяИзмерения)); + КонецЦикла; + + Если ОбъектМетаданных.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда + НайтиНезаполненныеОбязательныеРеквизитыВНеПодчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки); + Иначе + НайтиНезаполненныеОбязательныеРеквизитыВНеПодчиненныхНепериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки); + КонецЕсли; + +КонецПроцедуры + +Процедура НайтиНезаполненныеОбязательныеРеквизитыВНеПодчиненныхНепериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Условие = ""; + ПоляУпорядочивания = ""; + Измерения = ОбъектМетаданных.Измерения; + + Для Каждого Измерение Из Измерения Цикл + Условие = Условие + ?(ЗначениеЗаполнено(Условие), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; + ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | &ПоляВыборки КАК ПоляВыборки + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | &Условие"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "ИСТИНА УПОРЯДОЧИТЬ ПО " + ПоляУпорядочивания); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); + + Запрос = Новый Запрос(ТекстЗапроса); + Результат = Запрос.Выполнить().Выгрузить(); + + УсловиеАбсолюта = "ГДЕ" + Символы.ПС + Символы.Таб + "ИСТИНА"; + Пока Истина Цикл + + ЭтоПервыйПроход = СтрНайти(Запрос.Текст, УсловиеАбсолюта) <> 0; + + Если Результат.Количество() = 0 Или (Не ЭтоПервыйПроход И Результат.Количество() = 1) Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + Если Не ЭтоПервыйПроход И Результат.Индекс(СтрокаРезультата) = 0 Тогда + Продолжить; + КонецЕсли; + + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ОтборТекущегоНабора = ТекущийНаборЗаписей.Отбор; + + ПредставлениеОтбораНабораЗаписей = ""; + Для Каждого Измерение Из Измерения Цикл + + ИмяИзмерения = Измерение.Имя; + ЗначениеИзмерения = СтрокаРезультата[ИмяИзмерения + "ИзмерениеСсылка"]; + Если Не ЗначениеЗаполнено(ЗначениеИзмерения) Тогда + Продолжить; + КонецЕсли; + + ОтборТекущегоНабора[ИмяИзмерения].Установить(ЗначениеИзмерения); + + ПредставлениеОтбораНабораЗаписей = ПредставлениеОтбораНабораЗаписей + ?(ЗначениеЗаполнено(ПредставлениеОтбораНабораЗаписей), Символы.ПС, "") + + " • " + ИмяИзмерения + " = """ + СтрокаРезультата[ИмяИзмерения + "ИзмерениеПредставление"] + """"; + + КонецЦикла; + ТекущийНаборЗаписей.Прочитать(); + + УточнениеПроблемы = ""; + Если Не ТекущийНаборЗаписей.ПроверитьЗаполнение() Тогда + УточнениеПроблемы = УточнениеПроблемы(ПолучитьСообщенияПользователю(Истина)); + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + СтруктураНабораЗаписей = Новый Структура; + Для Каждого Измерение Из Измерения Цикл + ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; + СтруктураНабораЗаписей.Вставить(Измерение.Имя, ИзмерениеСсылка); + КонецЦикла; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: + |%1, + |обнаружены не заполненные данные обязательные к заполнению: %2'"), ПредставлениеОтбораНабораЗаписей, Символы.ПС + УточнениеПроблемы); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + Если ЭтоПервыйПроход Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, УсловиеАбсолюта, "Где " + Условие); + КонецЕсли; + + Для Каждого Измерение Из Измерения Цикл + Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]); + КонецЦикла; + + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +Процедура НайтиНезаполненныеОбязательныеРеквизитыВНеподчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Условие = "Период >= &Период"; + ПоляУпорядочивания = "Период"; + Измерения = ОбъектМетаданных.Измерения; + + Для Каждого Измерение Из Измерения Цикл + Условие = Условие + ?(ЗначениеЗаполнено(Условие), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; + ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Период КАК Период, + | &ПоляВыборки КАК ПоляВыборки + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Период > &ДатаНачалаПроверки + | И &Условие"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "Истина И Истина И Истина Упорядочить По " + ПоляУпорядочивания); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + Результат = Запрос.Выполнить().Выгрузить(); + + УсловиеАбсолюта = "Истина И Истина И Истина"; + Пока Истина Цикл + + ЭтоПервыйПроход = СтрНайти(Запрос.Текст, УсловиеАбсолюта) <> 0; + + Если Результат.Количество() = 0 Или (Не ЭтоПервыйПроход И Результат.Количество() = 1) Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ОтборТекущегоНабора = ТекущийНаборЗаписей.Отбор; + + ПредставлениеОтбораНабораЗаписей = " • Период = """ + СтрокаРезультата.Период + """"; + Для Каждого Измерение Из Измерения Цикл + + ИмяИзмерения = Измерение.Имя; + ЗначениеИзмерения = СтрокаРезультата[ИмяИзмерения + "ИзмерениеСсылка"]; + Если Не ЗначениеЗаполнено(ЗначениеИзмерения) Тогда + Продолжить; + КонецЕсли; + + ОтборТекущегоНабора[ИмяИзмерения].Установить(ЗначениеИзмерения); + + ПредставлениеОтбораНабораЗаписей = ПредставлениеОтбораНабораЗаписей + Символы.ПС + + " • " + ИмяИзмерения + " = """ + СтрокаРезультата[ИмяИзмерения + "ИзмерениеПредставление"] + """"; + + КонецЦикла; + ТекущийНаборЗаписей.Прочитать(); + + УточнениеПроблемы = ""; + Если Не ТекущийНаборЗаписей.ПроверитьЗаполнение() Тогда + УточнениеПроблемы = УточнениеПроблемы(ПолучитьСообщенияПользователю(Истина)); + КонецЕсли; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + СтруктураНабораЗаписей = Новый Структура; + СтруктураНабораЗаписей.Вставить("Период", СтрокаРезультата["Период"]); + Для Каждого Измерение Из Измерения Цикл + ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; + СтруктураНабораЗаписей.Вставить(Измерение.Имя, ИзмерениеСсылка); + КонецЦикла; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: + |%1, + |обнаружены не заполненные данные обязательные к заполнению: %2'"), ПредставлениеОтбораНабораЗаписей, Символы.ПС + УточнениеПроблемы); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + Если ЭтоПервыйПроход Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, УсловиеАбсолюта, Условие); + КонецЕсли; + + Запрос.УстановитьПараметр("Период", СтрокаРезультата["Период"]); + Для Каждого Измерение Из Измерения Цикл + Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]); + КонецЦикла; + + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область ПроверкаЦиклическихСсылок + +Процедура НайтиЦиклическиеСсылки(ОбъектМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Реквизиты = ОбъектМетаданных.Реквизиты; + ТабличныеЧасти = ОбъектМетаданных.ТабличныеЧасти; + + ТекстЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК Ссылка, + | ОбъектМетаданных.Наименование КАК Наименование + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Ссылка > &Ссылка + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Ссылка"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", ""); + + Результат = Запрос.Выполнить().Выгрузить(); + + МассивИсключений = Новый Массив; + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + СсылкаНаОбъект = СтрокаРезультата.Ссылка; + Если МассивИсключений.Найти(СсылкаНаОбъект) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + СсылкаНаОбъектНаименование = СтрокаРезультата.Наименование; + МассивЦиклов = Новый Массив; + + НайденЦикл = Ложь; + ЦиклВМассиве = Новый Массив; + ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, СсылкаНаОбъект.Родитель, НайденЦикл, ЦиклВМассиве); + Если НайденЦикл Тогда + + Путь = ""; + + Для Каждого ЭлементЦикла Из ЦиклВМассиве Цикл + Путь = Путь + ?(ЗначениеЗаполнено(Путь), " -> ", "") + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементЦикла, "Наименование"); + МассивИсключений.Добавить(ЭлементЦикла); + КонецЦикла; + + Если ЗначениеЗаполнено(Путь) Тогда + УточнениеПроблемы = СсылкаНаОбъектНаименование + " -> " + Путь + " -> " + СсылкаНаОбъектНаименование; + Иначе + УточнениеПроблемы = СсылкаНаОбъектНаименование + " -> " + СсылкаНаОбъектНаименование; + КонецЕсли; + + Проблема = ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); + + Проблема.УточнениеПроблемы = УточнениеПроблемы; + Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда + Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); + КонецЕсли; + + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЕсли; + + КонецЦикла; + + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка); + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +Процедура ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, ТекущийРодитель, НайденЦикл, ЦиклВМассиве) + + Если СсылкаНаОбъект = ТекущийРодитель Тогда + НайденЦикл = Истина; + ИначеЕсли ЗначениеЗаполнено(ТекущийРодитель) И ЦиклВМассиве.Найти(ТекущийРодитель) = Неопределено Тогда + ЦиклВМассиве.Добавить(ТекущийРодитель); + ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, ТекущийРодитель.Родитель, НайденЦикл, ЦиклВМассиве) + КонецЕсли; + +КонецПроцедуры + +Функция ЕстьИерархия(СтандартныеРеквизиты) + + ЕстьИерархия = Ложь; + Для Каждого СтандартныйРеквизит Из СтандартныеРеквизиты Цикл + Если СтандартныйРеквизит.Имя = "Родитель" Тогда + ЕстьИерархия = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ЕстьИерархия; + +КонецФункции + +#КонецОбласти + +#Область ПроверкаОтсутствующихПредопределенныхЭлементов + +Процедура НайтиОтсутствующиеПредопределенныеЭлементы(ОбъектМетаданных, ПараметрыПроверки) + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ПредопределенныеЭлементы = ОбъектМетаданных.ПолучитьИменаПредопределенных(); + Для Каждого ПредопределенныйЭлемент Из ПредопределенныеЭлементы Цикл + + Если СтрНачинаетсяС(ВРег(ПредопределенныйЭлемент), "УДАЛИТЬ") Тогда + Продолжить; + КонецЕсли; + + НайденныйЭлемент = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(ПолноеИмя + "." + ПредопределенныйЭлемент); + Если НайденныйЭлемент = Неопределено Тогда + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Предопределенный элемент ""%1"" отсутствует в информационной базе.'"), ПредопределенныйЭлемент); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПроверкаДублированияПредопределенныхЭлементов + +Процедура НайтиДублиПредопределенныхЭлементов(ВидМетаданных, ПараметрыПроверки) + + Пакеты = ""; + ШаблонПакетов = + "ВЫБРАТЬ + | ""&Таблица"" КАК ПолноеИмя, + | &ПрочиеПоля + |ИЗ + | &Таблица КАК Таблица + |ГДЕ Таблица.Предопределенный + | + |СГРУППИРОВАТЬ ПО + | Таблица.ИмяПредопределенныхДанных + | + |ИМЕЮЩИЕ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таблица.Ссылка) > 1"; + + Выборки = ""; + ШаблонВыборки = + "ВЫБРАТЬ + | &ПоляВременнойТаблицы, + | ПредставлениеСсылки(Таблица.Ссылка) КАК СсылкаНаДублирующийсяЭлемент + |ИЗ + | &Таблица КАК Таблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (Выбрать ""&ВременнаяТаблица"") КАК ВременнаяТаблица + | ПО &УсловияСоединения"; + + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + + Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда + Продолжить; + КонецЕсли; + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ИмяВременнойТаблицы = "ВТ_" + СтрЗаменить(ПолноеИмя, ".", ""); + + ЭлементШаблонаПакетов = СтрЗаменить(ШаблонПакетов, "&ПрочиеПоля", + "Таблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных Поместить " + ИмяВременнойТаблицы); + ЭлементШаблонаПакетов = СтрЗаменить(ЭлементШаблонаПакетов, "&Таблица", ПолноеИмя); + + Пакеты = Пакеты + ?(ЗначениеЗаполнено(Пакеты), ";", "") + ЭлементШаблонаПакетов; + + ЭлементШаблонаВыборки = СтрЗаменить(ШаблонВыборки, "&ПоляВременнойТаблицы", + " ВременнаяТаблица.ПолноеИмя КАК ПолноеИмя, ВременнаяТаблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных"); + ЭлементШаблонаВыборки = СтрЗаменить(ЭлементШаблонаВыборки, "&Таблица", ПолноеИмя); + ЭлементШаблонаВыборки = СтрЗаменить(ЭлементШаблонаВыборки, "(Выбрать ""&ВременнаяТаблица"")", ИмяВременнойТаблицы); + ЭлементШаблонаВыборки = СтрЗаменить(ЭлементШаблонаВыборки, "&УсловияСоединения", + "Таблица.ИмяПредопределенныхДанных = ВременнаяТаблица.ИмяПредопределенныхДанных"); + + Выборки = Выборки + ?(ЗначениеЗаполнено(Выборки), " ОБЪЕДИНИТЬ ВСЕ ", "") + ЭлементШаблонаВыборки; + + КонецЦикла; + + Запрос = Новый Запрос(Пакеты + ";" + Выборки + " ИТОГИ ПО ПолноеИмя, ИмяПредопределенныхДанных"); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + ОбщийРезультат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Пока ОбщийРезультат.Следующий() Цикл + + УточнениеПроблемы = ""; + ПолноеИмя = ОбщийРезультат.ПолноеИмя; + РезультатПоИмени = ОбщийРезультат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Пока РезультатПоИмени.Следующий() Цикл + + Если СтрНачинаетсяС(ВРег(РезультатПоИмени.ИмяПредопределенныхДанных), "УДАЛИТЬ") Тогда + Продолжить; + КонецЕсли; + + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + НСтр("ru = 'Имя предопределенного элемента:'") + " """ + РезультатПоИмени.ИмяПредопределенныхДанных + """" + + Символы.ПС + НСтр("ru = 'Ссылки на предопределенный элемент:'"); + + ДетальныеЗаписи = РезультатПоИмени.Выбрать(); + Пока ДетальныеЗаписи.Следующий() Цикл + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + + " • """ + ДетальныеЗаписи.СсылкаНаДублирующийсяЭлемент + """"; + КонецЦикла; + + КонецЦикла; + + Если Не ЗначениеЗаполнено(УточнениеПроблемы) Тогда + Продолжить; + КонецЕсли; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмя), ПараметрыПроверки); + Проблема.УточнениеПроблемы = УточнениеПроблемы; + ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + Запрос.МенеджерВременныхТаблиц.Закрыть(); + Запрос = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#Область ИсправлениеПроблемЦиклическиеСсылки + +// Исправляет проблему циклических ссылок по принципу у кого больше терминальных элементов +// в подчинении, тот и остается родителем. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Проверка, найденные проблемы которой +// исправляются данным методом. +// +Процедура ИсправитьПроблемуЦиклическихСсылок(Проверка) + + ТаблицаПотомства = Новый ТаблицаЗначений; + ТаблицаПотомства.Колонки.Добавить("ЭлементЦикла"); + ТаблицаПотомства.Колонки.Добавить("КоличествоДетей", Новый ОписаниеТипов("Число")); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки"); + + Запрос.УстановитьПараметр("ПравилоПроверки", Проверка); + Результат = Запрос.Выполнить().Выбрать(); + + Пока Результат.Следующий() Цикл + + ПроблемныйОбъект = Результат.ПроблемныйОбъект; + Родитель = ПроблемныйОбъект.Родитель; + + НайденЦикл = Ложь; + ЦиклВМассиве = Новый Массив; + ПроверитьЗацикливаниеУровней(ПроблемныйОбъект, Родитель, НайденЦикл, ЦиклВМассиве); + Если НайденЦикл Тогда + + КоличествоДетейПервого = 0; + КоличествоДетейВторого = 0; + + ПоследнийОбъектЦикла = ЦиклВМассиве.Получить(ЦиклВМассиве.Количество() - 1); + + ПолучитьКоличествоДетей(ПроблемныйОбъект, Родитель, КоличествоДетейПервого); + ПолучитьКоличествоДетей(ПоследнийОбъектЦикла, Родитель, КоличествоДетейВторого); + + Если КоличествоДетейПервого > КоличествоДетейВторого Тогда + ОбъектСсылки = ПроблемныйОбъект.ПолучитьОбъект(); + ИначеЕсли КоличествоДетейПервого < КоличествоДетейВторого Тогда + ОбъектСсылки = ПоследнийОбъектЦикла.ПолучитьОбъект(); + Иначе + + ГСЧ = Новый ГенераторСлучайныхЧисел; + + Массив = Новый Массив; + Массив.Добавить(ПроблемныйОбъект); + Массив.Добавить(ПоследнийОбъектЦикла); + + ОбъектСсылки = Массив.Получить(ГСЧ.СлучайноеЧисло(0, 1)).ПолучитьОбъект(); + + КонецЕсли; + + ОбъектСсылки.Родитель = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПроблемныйОбъект.Метаданные().ПолноеИмя()).ПустаяСсылка(); + ОбъектСсылки.ОбменДанными.Загрузка = Истина; + ОбъектСсылки.Записать(); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПолучитьКоличествоДетей(СсылкаНаОбъект, ИсключениеВыборки, КоличествоДетей) + + ТекстЗапроса = + "ВЫБРАТЬ + | ОбъектМетаданных.Ссылка КАК Ссылка + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Родитель = &Родитель + | И ОбъектМетаданных.Ссылка <> &ИсключениеВыборки"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", СсылкаНаОбъект.Метаданные().ПолноеИмя()); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Родитель", СсылкаНаОбъект); + Запрос.УстановитьПараметр("ИсключениеВыборки", ИсключениеВыборки); + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + Выгрузка = Результат.Выгрузить(); + КоличествоДетей = КоличествоДетей + Выгрузка.Количество(); + Для Каждого ЭлементПотомства Из Выгрузка Цикл + ПолучитьКоличествоДетей(ЭлементПотомства.Ссылка, ИсключениеВыборки, КоличествоДетей); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ДополнительнаяФункциональностьДляРаботыВСКД + +Функция ОформитьПредставлениеПроблемногоОбъекта(ПроблемныйОбъект, ПроблемныйОбъектПредставление, ДополнительнаяИнформация) Экспорт + + ОформленноеПредставлениеОбъекта = ПроблемныйОбъектПредставление + " (" + ПроблемныйОбъект.Метаданные().Представление() + ")"; + + Если ТипЗнч(ПроблемныйОбъект) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Возврат ОформленноеПредставлениеОбъекта; + Иначе + ПолноеИмя = ПроблемныйОбъект.ПолноеИмя; + Если Не ОбщегоНазначения.ЭтоРегистр(Метаданные.НайтиПоПолномуИмени(ПолноеИмя)) Тогда + Возврат ПроблемныйОбъектПредставление; + Иначе + + СтруктураНабора = ДополнительнаяИнформация.Получить(); + + Если ТипЗнч(СтруктураНабора) <> Тип("Структура") Тогда + Возврат ОформленноеПредставлениеОбъекта; + КонецЕсли; + + СтрокаРазмещения = Строка(ПроблемныйОбъект) + "<РазмещениеСтруктурыНабораЗаписейДляПоследующейРасшифровки>" + Символы.ПС + ПолноеИмя; + Для Каждого ЭлементНабора Из СтруктураНабора Цикл + + ЗначениеОтбора = ЭлементНабора.Значение; + ТипЗначенияОтбора = ТипЗнч(ЗначениеОтбора); + ИнформацияОТипе = ""; + + Если ТипЗначенияОтбора = Тип("Число") Тогда + ИнформацияОТипе = "Число"; + ИначеЕсли ТипЗначенияОтбора = Тип("Строка") Тогда + ИнформацияОТипе = "Строка"; + ИначеЕсли ТипЗначенияОтбора = Тип("Булево") Тогда + ИнформацияОТипе = "Булево"; + ИначеЕсли ТипЗначенияОтбора = Тип("Дата") Тогда + ИнформацияОТипе = "Дата"; + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗначенияОтбора) Тогда + ИнформацияОТипе = ЗначениеОтбора.Метаданные().ПолноеИмя(); + КонецЕсли; + + СтрокаРазмещения = СтрокаРазмещения + Символы.ПС + Строка(ЭлементНабора.Ключ) + "~~~" + ИнформацияОТипе + "~~~" + Строка(XMLСтрока(ЗначениеОтбора)); + + КонецЦикла; + + Возврат СтрокаРазмещения; + + КонецЕсли; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ПроцедурыИФункцииОбщегоНазначенияСлужебная + +Функция УточнениеПроблемы(МассивСообщений) + + УточнениеПроблемы = ""; + Для Каждого ПользовательскоеСообщение Из МассивСообщений Цикл + УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + ПользовательскоеСообщение.Текст; + КонецЦикла; + + Возврат УточнениеПроблемы; + +КонецФункции + +Функция ПроверкаОтложена(ИдентификаторРегламентногоЗадания) + + ПроверкаОтложена = Ложь; + Если ЗначениеЗаполнено(ИдентификаторРегламентногоЗадания) Тогда + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторРегламентногоЗадания)); + Если Задание <> Неопределено И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + ПроверкаОтложена = Истина; + КонецЕсли; + КонецЕсли; + + Возврат ПроверкаОтложена; + +КонецФункции + +// Подготавливает параметры проверки к дальнейшей записи в регистр сведений "РезультатыПроверкиУчета". +// А именно: Дополняет параметры выполняемой проверки видом проверки, ссылкой на проверку и важностью проблемы +// И затирает предыдущую информацию в упомянутом регистре. +// Параметры: +// ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Наименование - Строка - Наименование проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром +// ЛимитПроблем для определения предельного количества итераций. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Процедура ПодготовитьДанныеПроверки(Проверка, ПараметрыПроверки) + + Параметры = Новый Структура; + ПараметрыСинхронизации = Новый Структура; + + Параметры.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); + Параметры.Вставить("Идентификатор", "СистемныеПроверки"); + Параметры.Вставить("Наименование", НСтр("ru='Системные проверки'")); + + ПодготовленныеПараметры = ПараметрыСинхронизацииВидаПроверок(Параметры); + + ВидПроверки = СинхронизацияВидаПроверки(ПодготовленныеПараметры); + ПараметрыПроверки.Вставить("Проверка", Проверка); + ПараметрыПроверки.Вставить("ВидПроверки", ВидПроверки); + ПараметрыПроверки.Вставить("ВажностьПроблемы", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Проверка, "ВажностьПроблемы")); + ПараметрыПроверки.Вставить("ГлобальныеНастройки", ГлобальныеНастройки()); + ПараметрыПроверки.Вставить("ИтерацияПроверки", 1); + + Набор = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); + Набор.Отбор.ВидПроверки.Установить(ВидПроверки); + Набор.Отбор.ПравилоПроверки.Установить(Проверка); + Набор.Записать(); + +КонецПроцедуры + +// Выполняет проверку превышения количества итераций проверки допустимого лимита. +// +// Параметры: +// ПараметрыПроверки - Структура - Сформированная алгоритмом проверки структура проблемы. +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Наименование - Строка - Наименование проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром +// ЛимитПроблем для определения предельного количества итераций. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +// Возвращаемое значение: +// Булево - Признак того достигнута ли последняя итерация. +// +Функция ЭтоПоследняяИтерацияПроверки(ПараметрыПроверки) + + ЭтоПоследняяИтерация = Ложь; + + Если ПараметрыПроверки.ЛимитПроблем <> 0 Тогда + Если ПараметрыПроверки.ИтерацияПроверки > ПараметрыПроверки.ЛимитПроблем Тогда + ЭтоПоследняяИтерация = Истина; + Иначе + ПараметрыПроверки.Вставить("ИтерацияПроверки", ПараметрыПроверки.ИтерацияПроверки + 1); + КонецЕсли; + КонецЕсли; + + Возврат ЭтоПоследняяИтерация; + +КонецФункции + +// Возвращает строковое представление вида объектов метаданных по типу объекта. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. +// +// Параметры: +// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на проблемный объект. +// +// Возвращаемое значение: +// Строка - представление вида объектов метаданных. Например: "Справочник", "Документ". +// +Функция ПредставлениеОбъектаПоТипу(СсылкаНаОбъект) + + ТипОбъекта = ТипЗнч(СсылкаНаОбъект); + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + + Возврат НСтр("ru = 'элементом справочника'"); + + ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат НСтр("ru = 'документом'"); + + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат НСтр("ru = 'бизнес процессом'"); + + ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат НСтр("ru = 'планом видов характеристик'"); + + ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат НСтр("ru = 'планом счетов'"); + + ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат НСтр("ru = 'планом видов расчета'"); + + ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат НСтр("ru = 'задачей'"); + + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат НСтр("ru = 'планом обмена'"); + + ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат НСтр("ru = 'перечислением'"); + + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(ТипОбъекта)); + + КонецЕсли; + +КонецФункции + +// Возвращает массив типов, включающий в тип "Строка", "Массив" и "СправочникСсылка.ВидыПроверок" +// для проверки параметров методов, работающих с видами проверок. +// +// Возвращаемое значение: +// Массив - Массив объектных типов. +// +Функция ОписаниеТипаВидПроверки() Экспорт + + МассивТипов = Новый Массив; + МассивТипов.Добавить(Тип("Строка")); + МассивТипов.Добавить(Тип("Массив")); + МассивТипов.Добавить(Тип("СправочникСсылка.ВидыПроверок")); + + Возврат МассивТипов; + +КонецФункции + +// Возвращает структуру типов параметров проверки. +// +// Возвращаемое значение: +// Структура - Структура со свойствами: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * Представление - Строка - Пользовательское представление проверки. +// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, +// соответствующего проверке. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых +// меньше указанной, не следует проверять. По умолчанию не +// заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром +// ЛимитПроблем для определения предельного количества итераций. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на +// выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// +Функция ОжидаемыеТипыСвойствПараметровПроверки() Экспорт + + ОжидаемыеТипыСвойств = Новый Структура; + ОжидаемыеТипыСвойств.Вставить("ВажностьПроблемы", Тип("ПеречислениеСсылка.ВажностьПроблемыУчета")); + ОжидаемыеТипыСвойств.Вставить("ВидПроверки", Тип("СправочникСсылка.ВидыПроверок")); + ОжидаемыеТипыСвойств.Вставить("ГлобальныеНастройки", Тип("Структура")); + ОжидаемыеТипыСвойств.Вставить("ДатаНачалаПроверки", Тип("Дата")); + ОжидаемыеТипыСвойств.Вставить("Идентификатор", Тип("Строка")); + ОжидаемыеТипыСвойств.Вставить("ИдентификаторРегламентногоЗадания", Тип("Строка")); + ОжидаемыеТипыСвойств.Вставить("ИтерацияПроверки", Тип("Число")); + ОжидаемыеТипыСвойств.Вставить("ЛимитПроблем", Тип("Число")); + ОжидаемыеТипыСвойств.Вставить("Наименование", Тип("Строка")); + ОжидаемыеТипыСвойств.Вставить("Проверка", Тип("СправочникСсылка.ПравилаПроверкиУчета")); + + Возврат ОжидаемыеТипыСвойств; + +КонецФункции + +// Возвращает структуру типов описания проблемы. +// +// Возвращаемое значение: +// Проблема - Структура - Сформированная алгоритмом проверки структура проблемы. +// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому +// относится выполненная проверка. +// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. +// * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// идентифицировать ответственного в проблемном объекте. +// * ИгнорироватьПроблему - Булево - Флаг игнорирования проблемы. Если имеет значение "Истина", +// запись о проблеме игнорируется подсистемой. +// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// сведениями, связанными с выявленной проблемой. +// * Выявлено - Дата - Серверное время идентификации проблемы. +// +// +Функция ОжидаемыеТипыСвойствОписанияПроблемы() Экспорт + + ОжидаемыеТипыСвойств = Новый Структура; + ОжидаемыеТипыСвойств.Вставить("ВажностьПроблемы", Тип("ПеречислениеСсылка.ВажностьПроблемыУчета")); + ОжидаемыеТипыСвойств.Вставить("ВидПроверки", Тип("СправочникСсылка.ВидыПроверок")); + ОжидаемыеТипыСвойств.Вставить("Выявлено", Тип("Дата")); + ОжидаемыеТипыСвойств.Вставить("ДополнительнаяИнформация", Тип("ХранилищеЗначения")); + ОжидаемыеТипыСвойств.Вставить("КлючУникальности", Тип("УникальныйИдентификатор")); + МассивТипов = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда + МассивТипов.Добавить(Тип("СправочникСсылка.Пользователи")); + КонецЕсли; + МассивТипов.Добавить(Тип("Неопределено")); + ОжидаемыеТипыСвойств.Вставить("Ответственный", МассивТипов); + ОжидаемыеТипыСвойств.Вставить("ПравилоПроверки", Тип("СправочникСсылка.ПравилаПроверкиУчета")); + ОжидаемыеТипыСвойств.Вставить("ПроблемныйОбъект", ОбщегоНазначения.ОписаниеТипаВсеСсылки()); + ОжидаемыеТипыСвойств.Вставить("УточнениеПроблемы", Тип("Строка")); + + Возврат ОжидаемыеТипыСвойств; + +КонецФункции + +Функция СсылочныеВидыОбъектовМетаданных() + + Результат = Новый Массив; + Результат.Добавить(Метаданные.Справочники); + Результат.Добавить(Метаданные.Документы); + Результат.Добавить(Метаданные.ПланыОбмена); + Результат.Добавить(Метаданные.ПланыВидовХарактеристик); + Результат.Добавить(Метаданные.ПланыСчетов); + Результат.Добавить(Метаданные.ПланыВидовРасчета); + Результат.Добавить(Метаданные.БизнесПроцессы); + Результат.Добавить(Метаданные.Задачи); + Возврат Результат; + +КонецФункции + +Функция РегистрыКакОбъектыМетаданных() + + Результат = Новый Массив; + Результат.Добавить(Метаданные.РегистрыБухгалтерии); + Результат.Добавить(Метаданные.РегистрыНакопления); + Результат.Добавить(Метаданные.РегистрыРасчета); + Результат.Добавить(Метаданные.РегистрыСведений); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/КонтрольВеденияУчетаСлужебный.mdo b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/КонтрольВеденияУчетаСлужебный.mdo new file mode 100644 index 000000000..cfedb3632 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/КонтрольВеденияУчетаСлужебный.mdo @@ -0,0 +1,11 @@ + + + КонтрольВеденияУчетаСлужебный + + ru + Контроль ведения учета служебный + + true + true + true + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..03b4596e3 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl @@ -0,0 +1,205 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Обработчик двойного щелчка мыши, нажатия клавиши Enter или гиперссылки в табличном документе формы отчета. +// См. "Расширение поля формы для поля табличного документа.Выбор" в синтакс-помощнике. +// +// Параметры: +// ФормаОтчета - УправляемаяФорма - Форма отчета. +// Элемент - ПолеФормы - Табличный документ. +// Область - ОбластьЯчеекТабличногоДокумента - Выбранное значение. +// СтандартнаяОбработка - Булево - Признак выполнения стандартной обработки события. +// +Процедура ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка) Экспорт + + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.РезультатыПроверкиУчета" Тогда + Расшифровка = Область.Расшифровка; + Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда + + СтандартнаяОбработка = Ложь; + Если Расшифровка.Свойство("Назначение") Тогда + Если Расшифровка.Назначение = "ИсправитьПроблемы" Тогда + ИсправитьПроблему(ФормаОтчета, Расшифровка); + ИначеЕсли Расшифровка.Назначение = "ОткрытьФормуРегистра" Тогда + ОткрытьФормуРегистраСПроблемнымНаборомЗаписей(ФормаОтчета, Расшифровка); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Процедура открывающая форму для интерактивный действий пользователя +// для решения проблемы. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// Расшифровка - Структура - Структура, содержащая данные по исправлению проблемы +// расшифровки ячейки отчета по результатам проверок учета. +// * Назначение - Строка - Строковый идентификатор назначения расшифровки. +// * ИдентификаторПроверки - Строка - Строковый индикатор проверки. +// * ОбработчикПереходаКИсправлению - Строка - Имя функции-обработчика исправления проблемы. +// Под функцией-обработчиком понимать экспортную процедуру +// клиентского общего модуля. Либо полное имя открываемой формы. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверок. +// +Процедура ИсправитьПроблему(Форма, Расшифровка) + + ОбработчикПереходаКИсправлению = Расшифровка.ОбработчикПереходаКИсправлению; + ИдентификаторПроверки = Расшифровка.ИдентификаторПроверки; + ВидПроверки = Расшифровка.ВидПроверки; + + Если СтрНачинаетсяС(ОбработчикПереходаКИсправлению, "ОбщаяФорма.") Или СтрНайти(ОбработчикПереходаКИсправлению, ".Форма") > 0 Тогда + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИдентификаторПроверки", ИдентификаторПроверки); + ПараметрыФормы.Вставить("ВидПроверки", ВидПроверки); + + ОткрытьФорму(ОбработчикПереходаКИсправлению, ПараметрыФормы, Форма); + + Иначе + + ОбработчикИсправления = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОбработчикПереходаКИсправлению, "."); + ИсполняемыйФрагмент = ОбработчикИсправления[0] + "." + ОбработчикИсправления[1] + "(ИдентификаторПроверки, ВидПроверки)"; + Результат = Вычислить(ИсполняемыйФрагмент); + + КонецЕсли; + +КонецПроцедуры + +// Процедура открывающая форму регистра сведений с проблемным набором записей +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// Расшифровка - Структура - Структура, содержащая данные по исправлению проблемы +// расшифровки ячейки отчета по результатам проверок учета. +// * Назначение - Строка - Строковый идентификатор назначения расшифровки. +// * ПолноеИмяРегистра - Строка - Полное имя целевого регистра сведений. +// * ОтборНабораЗаписей - Структура - Отбор целевого набора записей. +// +Процедура ОткрытьФормуРегистраСПроблемнымНаборомЗаписей(Форма, Расшифровка) + + ПолноеИмяРегистра = Расшифровка.ПолноеИмяРегистра; + ОтборНабораЗаписей = Расшифровка.ОтборНабораЗаписей; + + ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; + ОтборКомпоновки = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных")); + + ФормаРегистра = ПолучитьФорму(ПолноеИмяРегистра + ".ФормаСписка", , Форма); + + Для Каждого ЭлементОтбораНабора Из ОтборНабораЗаписей Цикл + + ЭлементОтбора = ОтборКомпоновки.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ЭлементОтбораНабора.Ключ); + ЭлементОтбора.ПравоеЗначение = ЭлементОтбораНабора.Значение; + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.Использование = Истина; + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Поле", ЭлементОтбораНабора.Ключ); + ПараметрыОтбора.Вставить("Значение", ЭлементОтбораНабора.Значение); + ПараметрыОтбора.Вставить("ВидСравнения", ВидСравненияКомпоновкиДанных.Равно); + ПараметрыОтбора.Вставить("Использование", Истина); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Истина); + ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); + + ДобавитьОтбор(ФормаРегистра.Список.КомпоновщикНастроек, ПараметрыОтбора, ДополнительныеПараметры); + + КонецЦикла; + + ФормаРегистра.Открыть(); + +КонецПроцедуры + +// Добавляет отбор в коллекцию отборов компоновщика или группы отборов +// +// Параметры: +// ЭлементСтруктуры - КомпоновщикНастроекКомпоновкиДанных, НастройкиКомпоновкиДанных - элемент структуры КД +// ПараметрыОтбора - Структура - Содержит параметры отбора компоновки данных. +// * Поле - Строка - Имя поля, по которому добавляется отбор. +// * Значение - Произвольный - Значение отбора КД (по умолчанию: Неопределено). +// * ВидСравнения - ВидСравненияКомпоновкиДанных - Вид сравнений КД (по умолчанию: Неопределено). +// * Использование - Булево - Признак использования отбора (по умолчанию: Истина). +// ДополнительныеПараметры - Структура - Содержит дополнительные параметры, перечисленные ниже: +// * ВПользовательскиеНастройки - Булево - признак добавления в пользовательские настройки КД (по умолчанию: Ложь). +// * ЗаменятьСуществующий - Булево - признак полной замены существующего отбора по полю (по умолчанию: Истина). +// +// Возвращаемое значение: +// ЭлементОтбораКомпоновкиДанных - Добавленный отбор. +// +Функция ДобавитьОтбор(ЭлементСтруктуры, ПараметрыОтбора, ДополнительныеПараметры = Неопределено) + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Ложь); + ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); + Иначе + Если Не ДополнительныеПараметры.Свойство("ВПользовательскиеНастройки") Тогда + ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Ложь); + КонецЕсли; + Если Не ДополнительныеПараметры.Свойство("ЗаменятьСуществующий") Тогда + ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(ПараметрыОтбора.Поле) = Тип("Строка") Тогда + НовоеПоле = Новый ПолеКомпоновкиДанных(ПараметрыОтбора.Поле); + Иначе + НовоеПоле = ПараметрыОтбора.Поле; + КонецЕсли; + + Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + Отбор = ЭлементСтруктуры.Настройки.Отбор; + + Если ДополнительныеПараметры.ВПользовательскиеНастройки Тогда + Для Каждого ЭлементНастройки Из ЭлементСтруктуры.ПользовательскиеНастройки.Элементы Цикл + Если ЭлементНастройки.ИдентификаторПользовательскойНастройки = + ЭлементСтруктуры.Настройки.Отбор.ИдентификаторПользовательскойНастройки Тогда + Отбор = ЭлементНастройки; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиКомпоновкиДанных") Тогда + Отбор = ЭлементСтруктуры.Отбор; + Иначе + Отбор = ЭлементСтруктуры; + КонецЕсли; + + ЭлементОтбора = Неопределено; + Если ДополнительныеПараметры.ЗаменятьСуществующий Тогда + Для каждого Элемент Из Отбор.Элементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Если Элемент.ЛевоеЗначение = НовоеПоле Тогда + ЭлементОтбора = Элемент; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Если ЭлементОтбора = Неопределено Тогда + ЭлементОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + КонецЕсли; + ЭлементОтбора.Использование = ПараметрыОтбора.Использование; + ЭлементОтбора.ЛевоеЗначение = НовоеПоле; + ЭлементОтбора.ВидСравнения = ?(ПараметрыОтбора.ВидСравнения = Неопределено, ВидСравненияКомпоновкиДанных.Равно, + ПараметрыОтбора.ВидСравнения); + ЭлементОтбора.ПравоеЗначение = ПараметрыОтбора.Значение; + + Возврат ЭлементОтбора; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/КонтрольВеденияУчетаСлужебныйКлиент.mdo b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/КонтрольВеденияУчетаСлужебныйКлиент.mdo new file mode 100644 index 000000000..7d6140ce8 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/КонтрольВеденияУчетаСлужебныйКлиент.mdo @@ -0,0 +1,10 @@ + + + КонтрольВеденияУчетаСлужебныйКлиент + + ru + Контроль ведения учета служебный клиент + + true + true + diff --git a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl index fbc583942..981ac8d92 100644 --- a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl @@ -479,12 +479,11 @@ Исключение + ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Распространение курсов валют по областям данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОтменитьТранзакцию(); - КонецПопытки; КонецЦикла; diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl index ddfaec068..054c68423 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl @@ -32,11 +32,11 @@ Результат = ""; // Представление единиц измерения времени в винительном падеже для количеств: 1, 2-4, 5-20. - ПредставлениеНедель = НСтр("ru = 'неделю'") + "," + НСтр("ru = 'недели'") + "," + НСтр("ru = 'недель'"); - ПредставлениеДней = НСтр("ru = 'день'") + "," + НСтр("ru = 'дня'") + "," + НСтр("ru = 'дней'"); - ПредставлениеЧасов = НСтр("ru = 'час'") + "," + НСтр("ru = 'часа'") + "," + НСтр("ru = 'часов'"); - ПредставлениеМинут = НСтр("ru = 'минуту'") + "," + НСтр("ru = 'минуты'") + "," + НСтр("ru = 'минут'"); - ПредставлениеСекунд = НСтр("ru = 'секунду'") + "," + НСтр("ru = 'секунды'") + "," + НСтр("ru = 'секунд'"); + ПредставлениеНедель = НСтр("ru = ';%1 неделю;;%1 недели;%1 недель;%1 недели'"); + ПредставлениеДней = НСтр("ru = ';%1 день;;%1 дня;%1 дней;%1 дня'"); + ПредставлениеЧасов = НСтр("ru = ';%1 час;;%1 часа;%1 часов;%1 часа'"); + ПредставлениеМинут = НСтр("ru = ';%1 минуту;;%1 минуты;%1 минут;%1 минуты'"); + ПредставлениеСекунд = НСтр("ru = ';%1 секунду;;%1 секунды;%1 секунд;%1 секунды'"); Время = Число(Время); @@ -60,28 +60,28 @@ КонецЕсли; Если КоличествоНедель > 0 И КоличествоДней+КоличествоЧасов+КоличествоМинут+КоличествоСекунд=0 Тогда - Результат = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоНедель, ПредставлениеНедель); + Результат = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеНедель, КоличествоНедель); Иначе КоличествоДней = КоличествоДней + КоличествоНедель * 7; Счетчик = 0; Если КоличествоДней > 0 Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоДней, ПредставлениеДней) + " "; + Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеДней, КоличествоДней) + " "; Счетчик = Счетчик + 1; КонецЕсли; Если КоличествоЧасов > 0 Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоЧасов, ПредставлениеЧасов) + " "; + Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеЧасов, КоличествоЧасов) + " "; Счетчик = Счетчик + 1; КонецЕсли; Если (ПолноеПредставление Или Счетчик < 2) И КоличествоМинут > 0 Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоМинут, ПредставлениеМинут) + " "; + Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеМинут, КоличествоМинут) + " "; Счетчик = Счетчик + 1; КонецЕсли; Если (ПолноеПредставление Или Счетчик < 2) И (КоличествоСекунд > 0 Или КоличествоНедель+КоличествоДней+КоличествоЧасов+КоличествоМинут = 0) Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоСекунд, ПредставлениеСекунд); + Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеСекунд, КоличествоСекунд); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl index 013f7cd63..92ca283b8 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl @@ -378,4 +378,5 @@ КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl index bb1d0b3a9..a6de02694 100644 --- a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl @@ -405,7 +405,6 @@ |%2.'"), КомпонентыОбмена.НаправлениеОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); КонецПопытки; @@ -416,7 +415,6 @@ Попытка ВыполнитьВыгрузкуЗарегистрированныхДанных(КомпонентыОбмена, НомерОтправленного); Исключение - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -473,7 +471,6 @@ |%2.'"), КомпонентыОбмена.НаправлениеОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); КонецПопытки; @@ -521,7 +518,6 @@ КомпонентыОбмена.НаправлениеОбмена, ПредставлениеОбъектаДляПротокола(ТекОбъект), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); Возврат; КонецПопытки; @@ -623,7 +619,6 @@ ТекущееПКО.Ключ, ПредставлениеОбъектаДляПротокола(Объект), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); Возврат; КонецПопытки; @@ -1406,7 +1401,7 @@ Если КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу И (ВариантИдентификации = "ПоПолямПоиска" - Или ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска") Тогда + Или ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска") Тогда // Объекты, при идентификации которых используются поля поиска, // должны быть записаны в информационную базу с целью получения одной и той же ссылки на объект при каждом поиске. ЗаписыватьОбъектВИБ = Истина; @@ -1609,7 +1604,6 @@ |%2.'"), КомпонентыОбмена.НаправлениеОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); КонецПопытки; @@ -1768,7 +1762,6 @@ КомпонентыОбмена.НаправлениеОбмена, ПредставлениеОбъектаДляПротокола(ОбъектXDTO), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); Прервать; КонецПопытки; @@ -1789,7 +1782,6 @@ |%2.'"), КомпонентыОбмена.НаправлениеОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); КонецПопытки; КонецЕсли; @@ -1830,7 +1822,6 @@ |%2.'"), КомпонентыОбмена.НаправлениеОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); КонецПопытки; @@ -1929,7 +1920,6 @@ КомпонентыОбмена.НаправлениеОбмена, ПредставлениеОбъектаДляПротокола(ОбъектXDTO), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); Прервать; КонецПопытки; @@ -1998,23 +1988,30 @@ Header.CreationDate = ТекущаяУниверсальнаяДата(); Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - + ИмяПланаОбмена = ЗаписьСообщения.Получатель.Метаданные().Имя; Confirmation = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Confirmation")); Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - Confirmation.ExchangePlan = ЗаписьСообщения.Получатель.Метаданные().Имя; + Confirmation.ExchangePlan = ИмяПланаОбмена; Confirmation.To = СокрЛП(ДанныеПолучателя.Код); Confirmation.From = СокрЛП(ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(Confirmation.ExchangePlan)); Confirmation.MessageNo = ЗаписьСообщения.НомерСообщения; Confirmation.ReceivedNo = ЗаписьСообщения.НомерПринятого; + + ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(ЗаписьСообщения.Получатель); + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда + // Требуется корректировка кода узла отправителя. + Confirmation.From = СокрЛП(ПсевдонимПредопределенногоУзла); + КонецЕсли; КонецЕсли; Header.Confirmation = Confirmation; - КонецЕсли; - - Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда Для Каждого ВерсияФормата Из ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента) Цикл Header.AvailableVersion.Добавить(ВерсияФормата); КонецЦикла; + ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(КомпонентыОбмена.УзелКорреспондента); + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда + Header.NewFrom = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + КонецЕсли; Иначе Header.AvailableVersion.Добавить(КомпонентыОбмена.ВерсияФорматаОбмена); КонецЕсли; @@ -2123,8 +2120,12 @@ ПолучательИзСообщения = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодКому); Если ПолучательИзСообщения <> ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() Тогда - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 178); - Прервать; + // Возможно, задан виртуальный код получателя. + ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(КомпонентыОбмена.УзелКорреспондента); + Если ПсевдонимПредопределенногоУзла <> КодКому Тогда + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 178); + Прервать; + КонецЕсли; КонецЕсли; ОтправительИзСообщения = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодОтКого); @@ -2139,11 +2140,12 @@ // Проверяем базовый формат МенеджерПланаОбмена = МенеджерПланаОбмена(КомпонентыОбмена.УзелКорреспондента); - Если МенеджерПланаОбмена.ФорматОбмена() <> ФорматОбмена.БазовыйФормат Тогда + ФорматПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); + Если ФорматПланаОбмена <> ФорматОбмена.БазовыйФормат Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Формат сообщения обмена <%1> не соответствует формату плана обмена <%2>.'"), ФорматОбмена.БазовыйФормат, - МенеджерПланаОбмена.ФорматОбмена()); + ФорматПланаОбмена); КонецЕсли; // Проверяем версию формата сообщения обмена. @@ -2177,18 +2179,29 @@ КонецЕсли; - // Проверяем возможность увеличения версии. + // Проверяем возможность увеличения версии и поддержку кодировки по УИДам в корреспонденте. ДоступныеВерсииОтправителя = Header.AvailableVersion; ДоступныеВерсииПолучателя = ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента); НомерВерсииКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "ВерсияФорматаОбмена"); - МаксимальнаяОбщаяВерсия = НомерВерсииКорреспондента; + МаксимальнаяОбщаяВерсия = "0.0"; + КомпонентыОбмена.Вставить("КорреспондентПоддерживаетИдентификаторОбменаДанными", Ложь); + ПроверяемаяВерсия = НомерВерсииСПоддержкойИдентификатораОбменаДанными(); Для Каждого ДоступнаяВерсияОтправителя Из ДоступныеВерсииОтправителя Цикл + ДоступнаяВерсияОтправителя = СокрЛП(ДоступнаяВерсияОтправителя); + + // Проверяем поддерживается ли кодировка по УИДам в корреспонденте. + Если Не КомпонентыОбмена.КорреспондентПоддерживаетИдентификаторОбменаДанными + И СравнитьВерсии(ДоступнаяВерсияОтправителя, ПроверяемаяВерсия) >= 0 Тогда + КомпонентыОбмена.КорреспондентПоддерживаетИдентификаторОбменаДанными = Истина; + КонецЕсли; + Если ДоступныеВерсииПолучателя.Найти(ДоступнаяВерсияОтправителя) = Неопределено Тогда Продолжить; КонецЕсли; - РезультатСравненияВерсий = СравнитьВерсии(СокрЛП(ДоступнаяВерсияОтправителя), СокрЛП(МаксимальнаяОбщаяВерсия)); - Если РезультатСравненияВерсий > 0 Тогда + + // Проверяем возможность увеличения версии. + Если СравнитьВерсии(ДоступнаяВерсияОтправителя, МаксимальнаяОбщаяВерсия) >= 0 Тогда МаксимальнаяОбщаяВерсия = ДоступнаяВерсияОтправителя; КонецЕсли; КонецЦикла; @@ -2199,7 +2212,7 @@ УзелКорреспондентаОбъект.ВерсияФорматаОбмена = МаксимальнаяОбщаяВерсия; УзелКорреспондентаОбъект.Записать(); ЗаписатьВПротоколВыполнения(КомпонентыОбмена, - НСтр("ru = 'Изменен номер версии формата обмена.'"),,Ложь,,, Истина); + НСтр("ru = 'Изменен номер версии формата обмена.'"), , Ложь, , , Истина); КонецЕсли; КонецЕсли; @@ -2313,7 +2326,7 @@ СтрокаСообщенияОбОшибке = НСтр("ru = 'Попытка изменения неразделенных данных (%1: %2) в разделенном режиме.'"); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, Объект.Метаданные().ПолноеИмя(), Строка(Объект)); - + КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщенияОбОшибке,, Ложь); @@ -2695,12 +2708,11 @@ // Версию базового формата. // // Параметры: -// УзелИнформационнойБазы - ссылка на узел - корреспондент. +// ИмяПланаОбмена - Строка. // ВерсияФормата - Строка. // -Функция ФорматОбмена(Знач УзелИнформационнойБазы, Знач ВерсияФормата) Экспорт - - ФорматОбмена = МенеджерПланаОбмена(УзелИнформационнойБазы).ФорматОбмена(); +Функция ФорматОбмена(Знач ИмяПланаОбмена, Знач ВерсияФормата) Экспорт + ФорматОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); ЭлементыФормата = СтрРазделить(ФорматОбмена, "/"); ЭлементыФормата.Добавить(ВерсияФормата); @@ -2725,6 +2737,21 @@ Возврат СокрЛП(Результат); КонецФункции +// Возвращает признак поддерживается ли для узла версия формата, для которой предусмотрена кодировка узлов +// с использованием уникальных идентификаторов. +Функция ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(Знач УзелИнформационнойБазы) Экспорт + ПроверяемаяВерсия = НомерВерсииСПоддержкойИдентификатораОбменаДанными(); + Если УзелИнформационнойБазы.ЭтотУзел Или Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + ИмяПланаОбмена = УзелИнформационнойБазы.Метаданные().Имя; + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, "", ""); + ВерсияФорматаКорреспондента = ОписаниеВариантаНастройки.Отборы.ВерсияФорматаОбмена; + Иначе + ВерсияФорматаКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы,"ВерсияФорматаОбмена"); + КонецЕсли; + Возврат (СравнитьВерсии(ВерсияФорматаКорреспондента,ПроверяемаяВерсия) >= 0); + +КонецФункции + #КонецОбласти #Область Прочее @@ -4329,7 +4356,6 @@ |%2.'"), КомпонентыОбмена.НаправлениеОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); Возврат; КонецПопытки; @@ -4367,7 +4393,6 @@ КомпонентыОбмена.НаправлениеОбмена, ПредставлениеОбъектаДляПротокола(Объект.Ссылка), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); Возврат; КонецПопытки; @@ -4845,8 +4870,6 @@ #КонецОбласти -#КонецОбласти - #Область ПоискПравилОбмена Функция ПОДПоТипуСсылкиXDTO(КомпонентыОбмена, ТипСсылкиXDTO, ВозвращатьПустоеЗначение = Ложь) @@ -4928,8 +4951,6 @@ #КонецОбласти -#Область ОбработчикиСобытийПравилОбмена - #Область ОбработчикиСобытийПравилОбработкиДанных // Процедура - "обертка" вызова обработчика ПОД ПриОбработке. // @@ -5280,7 +5301,8 @@ ВерсииФорматаОбмена = Новый Соответствие; Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - МенеджерПланаОбмена(УзелИнформационнойБазы).ПолучитьВерсииФорматаОбмена(ВерсииФорматаОбмена); + ИмяПланаОбмена = УзелИнформационнойБазы.Метаданные().Имя; + ВерсииФорматаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена,"ВерсииФорматаОбмена"); Иначе ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(ВерсииФорматаОбмена); КонецЕсли; @@ -5547,6 +5569,10 @@ КонецФункции +Функция НомерВерсииСПоддержкойИдентификатораОбменаДанными() + Возврат "1.5"; +КонецФункции + #КонецОбласти -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl index 7145a3ac5..980a633a4 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl @@ -179,6 +179,15 @@ КонецФункции +// Возвращает код предопределенного узла плана обмена. +// (Только для внутреннего использования). +// +Функция КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена) Экспорт + + Возврат ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + +КонецФункции + // Для внутреннего использования. // Функция ПолучитьОбщиеДанныеУзлов(Знач ИмяПланаОбмена) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index 336d7c7fe..f4c8f67f2 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -487,7 +487,7 @@ Если ВРег(Лев(СсылкаНаПодробноеОписание, 4)) = "HTTP" Тогда - ПерейтиПоНавигационнойСсылке(СсылкаНаПодробноеОписание); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СсылкаНаПодробноеОписание); Иначе @@ -573,16 +573,10 @@ Возврат; КонецЕсли; - Оповещение = Новый ОписаниеОповещения("ОбработчикОткрытияФайлаИлиКаталогаПослеНачалаЗапускаПриложения", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, ПолноеИмяФайла); + ОбщегоНазначенияКлиент.ОткрытьПроводник(ПолноеИмяФайла); КонецПроцедуры -// Продолжение процедуры (см. выше). -Процедура ОбработчикОткрытияФайлаИлиКаталогаПослеНачалаЗапускаПриложения(КодВозврата, ДополнительныеПараметры) Экспорт - // Обработка не требуется. -КонецПроцедуры - // Открывает диалог для выбора файлового каталога, запрашивая установку расширения для работы с файлами. // // Параметры: @@ -1402,7 +1396,7 @@ Иначе - ПерейтиПоНавигационнойСсылке(АдресДляВосстановленияПароляУчетнойЗаписи); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресДляВосстановленияПароляУчетнойЗаписи); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 90333df9b..7d9a10bb8 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -106,6 +106,17 @@ КонецФункции +// См. ОбменДаннымиСервер.НастройкиПланаОбмена +Функция НастройкиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента = "", ИмяКорреспондента = "", КорреспондентВМоделиСервиса = Неопределено) Экспорт + Возврат ОбменДаннымиСервер.НастройкиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента, ИмяКорреспондента, КорреспондентВМоделиСервиса); +КонецФункции + +// См. ОбменДаннымиСервер.ОписаниеВариантаНастройки +Функция ОписаниеВариантаНастройки(ИмяПланаОбмена, ИдентификаторНастройки, + ВерсияКорреспондента = "", ИмяКорреспондента = "") Экспорт + Возврат ОбменДаннымиСервер.ОписаниеВариантаНастройки(ИмяПланаОбмена, ИдентификаторНастройки, + ВерсияКорреспондента, ИмяКорреспондента); +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Механизм регистрации объектов на узлах планов обмена (МРО). @@ -185,9 +196,7 @@ Результат = Ложь; Если ПланыОбменаБСП().Найти(ИмяПланаОбмена) <> Неопределено Тогда - - Результат = ПланыОбмена[ИмяПланаОбмена].ПланОбменаИспользуетсяВМоделиСервиса(); - + Результат = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена,"ПланОбменаИспользуетсяВМоделиСервиса",""); КонецЕсли; Возврат Результат; @@ -364,12 +373,7 @@ Возврат Результат[0]; КонецФункции -// Определяет, входит ли план обмена в список планов обмена, которые используют обмен данными по формату XDTO. -// -// Параметры: -// ПланОбмена - Ссылка на узел плана обмена или имя плана обмена. -// -// Возвращаемое значение: Булево. +// См. ОбменДаннымиСервер.ЭтоПланОбменаXDTO. // Функция ЭтоПланОбменаXDTO(ПланОбмена) Экспорт Если ТипЗнч(ПланОбмена) = Тип("Строка") Тогда @@ -399,15 +403,6 @@ #Область СлужебныеПроцедурыИФункции -// См. ОбменДаннымиСервер.РежимРегистрацииДанныхДляПланаОбменаПриОбновленииИнформационнойБазы. -// -Функция РежимРегистрацииДанныхДляПланаОбменаПриОбновленииИнформационнойБазы(ИмяПланаОбмена) Экспорт - - Возврат ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "РежимРегистрацииДанныхПриОбновленииИнформационнойБазы"); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Механизм регистрации объектов на узлах планов обмена (МРО). @@ -710,7 +705,7 @@ // Истина - узел принадлежит плану обмена стандартного обмена, иначе Ложь. // Функция ЭтоУзелСтандартногоОбменаДанными(УзелИнформационнойБазы) Экспорт - Если ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда Возврат Ложь; КонецЕсли; @@ -729,7 +724,7 @@ // Функция ЭтоУзелУниверсальногоОбменаДанными(УзелИнформационнойБазы) Экспорт - Если ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда Возврат Истина; Иначе Возврат Не ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) @@ -909,7 +904,8 @@ Функция ОбщиеДанныеУзлов(Знач УзелИнформационнойБазы) Экспорт Возврат ОбменДаннымиСервер.ОбщиеДанныеУзлов(ПолучитьИмяПланаОбмена(УзелИнформационнойБазы), - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ВерсияКорреспондента(УзелИнформационнойБазы)); + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ВерсияКорреспондента(УзелИнформационнойБазы), + ""); КонецФункции // Для внутреннего использования. @@ -922,7 +918,7 @@ ВсеТаблицыЭтойБазы = Новый Массив; ВсеТаблицыКорреспондента = Новый Массив; - ОбщиеДанныеУзлов = ОбменДаннымиСервер.ОбщиеДанныеУзлов(ИмяПланаОбмена, ВерсияКорреспондента); + ОбщиеДанныеУзлов = ОбменДаннымиСервер.ОбщиеДанныеУзлов(ИмяПланаОбмена, ВерсияКорреспондента, ИдентификаторНастройки); ТабличныеЧасти = ОбменДаннымиСобытия.ТабличныеЧастиОбъекта(Метаданные.ПланыОбмена[ИмяПланаОбмена]); @@ -1105,9 +1101,15 @@ // Массив - Используемые транспорты сообщений обмена для узла. // Функция ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы) Экспорт + ИмяПланаОбмена = ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, + ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы), + "", ""); - Результат = ПланыОбмена[ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)].ИспользуемыеТранспортыСообщенийОбмена(); - + Результат = ОписаниеВариантаНастройки.ИспользуемыеТранспортыСообщенийОбмена; + Если Результат.Количество() = 0 Тогда + Результат = ОбменДаннымиСервер.ВсеТранспортыСообщенийОбменаКонфигурации(); + КонецЕсли; // Для базовых версий конфигураций обмен через COM-соединение не поддерживаем. Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.COM); diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index dc4300aac..62aa985d1 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -1,5 +1,55 @@ #Область ПрограммныйИнтерфейс +// Получает значение настройки плана обмена по ее имени. +// Для несуществующих настроек возвращается Неопределено. +// +// Параметры: +// ИмяПланаОбмена - Строка - Имя плана обмена из метаданных. +// ИмяПараметра - Строка - Имя параметра плана обмена или список параметров, разделенных запятыми. +// Список допустимых значений см. в функциях НастройкиПланаОбменаПоУмолчанию, +// ОписаниеВариантаНастройкиОбменаПоУмолчанию. +// ИдентификаторНастройки - Строка - Имя предопределенной настройки плана обмена. +// ВерсияКорреспондента - Строка - Версия конфигурации корреспондента. +// +// Возвращаемое значение: +// Произвольный - Тип возвращаемого значения зависит от типа значения получаемой настройки. +// Структура - Если в качестве параметра ИмяПараметра была передан список параметров через запятую. +// +Функция ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, ИмяПараметра, ИдентификаторНастройки = "", ВерсияКорреспондента = "") Экспорт + + ЗначениеПараметра = Новый Структура; + НастройкиПланаОбмена = Неопределено; + ОписаниеВариантаНастройки = Неопределено; + ИмяПараметра = СтрЗаменить(ИмяПараметра, Символы.ПС, ""); + ИменаПараметров = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяПараметра,,Истина); + НастройкиПланаОбменаПоУмолчанию = НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена); + ОписаниеВариантаПоУмолчанию = ОписаниеВариантаНастройкиОбменаПоУмолчанию(ИмяПланаОбмена); + Если ИменаПараметров.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + Для Каждого ЕдиничныйПараметр Из ИменаПараметров Цикл + ЗначениеЕдиничногоПараметра = Неопределено; + Если НастройкиПланаОбменаПоУмолчанию.Свойство(ЕдиничныйПараметр) Тогда + Если НастройкиПланаОбмена = Неопределено Тогда + НастройкиПланаОбмена = ОбменДаннымиПовтИсп.НастройкиПланаОбмена(ИмяПланаОбмена); + КонецЕсли; + НастройкиПланаОбмена.Свойство(ЕдиничныйПараметр, ЗначениеЕдиничногоПараметра); + ИначеЕсли ОписаниеВариантаПоУмолчанию.Свойство(ЕдиничныйПараметр) Тогда + Если ОписаниеВариантаНастройки = Неопределено Тогда + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, ИдентификаторНастройки, ВерсияКорреспондента); + КонецЕсли; + ОписаниеВариантаНастройки.Свойство(ЕдиничныйПараметр, ЗначениеЕдиничногоПараметра); + КонецЕсли; + Если ИменаПараметров.Количество() = 1 Тогда + Возврат ЗначениеЕдиничногоПараметра; + Иначе + ЗначениеПараметра.Вставить(ЕдиничныйПараметр, ЗначениеЕдиничногоПараметра); + КонецЕсли; + КонецЦикла; + Возврат ЗначениеПараметра; + +КонецФункции + // Процедура-обработчик события "ПриСозданииНаСервере" для формы узла плана обмена. // // Параметры: @@ -12,9 +62,14 @@ Возврат; КонецЕсли; + ПредставлениеПланаОбмена = ЗначениеНастройкиПланаОбмена( + Форма.Объект.Ссылка.Метаданные().Имя, + "ЗаголовокУзлаПланаОбмена", + ВариантОбменаДанными(Форма.Объект.Ссылка)); + Форма.АвтоЗаголовок = Ложь; Форма.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Форма.Объект.Наименование + " (%1)", - ПереопределяемоеИмяУзлаПланаОбмена(Форма.Объект.Ссылка, "ЗаголовокУзлаПланаОбмена")); + ПредставлениеПланаОбмена); КонецПроцедуры @@ -47,9 +102,10 @@ Если Параметры.Свойство("ПолучитьЗначенияПоУмолчанию") Тогда ИмяПланаОбмена = СтрРазделить(Форма.ИмяФормы, ".")[1]; - - НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, Параметры.ВерсияКорреспондента, , ИдентификаторНастройки); - НастройкаОтборовНаУзлеБазыКорреспондента = НастройкаОтборовНаУзлеБазыКорреспондента(ИмяПланаОбмена, Параметры.ВерсияКорреспондента, , ИдентификаторНастройки); + НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, Параметры.ВерсияКорреспондента,, + ИдентификаторНастройки); + НастройкаОтборовНаУзлеБазыКорреспондента = НастройкаОтборовНаУзлеБазыКорреспондента(ИмяПланаОбмена, + Параметры.ВерсияКорреспондента,, ИдентификаторНастройки); ИзменитьСтруктуруХраненияТабличныхЧастей(НастройкаОтборовНаУзлеБазыКорреспондента); Иначе @@ -93,7 +149,7 @@ ПроверитьОбязательныеРеквизитыФормы(Форма, "НастройкаОтборовНаУзле, ВерсияКорреспондента"); Форма.ВерсияКорреспондента = Форма.Параметры.ВерсияКорреспондента; - Форма.НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, Форма.ВерсияКорреспондента, , ИдентификаторНастройки); + Форма.НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, Форма.ВерсияКорреспондента, ,ИдентификаторНастройки); ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, "НастройкаОтборовНаУзле"); @@ -122,7 +178,8 @@ Форма.ВерсияКорреспондента = Форма.Параметры.ВерсияКорреспондента; Форма.ПараметрыВнешнегоСоединения = Форма.Параметры.ПараметрыВнешнегоСоединения; - Форма.НастройкаОтборовНаУзле = НастройкаОтборовНаУзлеБазыКорреспондента(ИмяПланаОбмена, Форма.ВерсияКорреспондента, , ИдентификаторНастройки); + Форма.НастройкаОтборовНаУзле = НастройкаОтборовНаУзлеБазыКорреспондента(ИмяПланаОбмена, Форма.ВерсияКорреспондента,, + ИдентификаторНастройки); ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, "НастройкаОтборовНаУзле"); @@ -176,9 +233,10 @@ КонецЕсли; ПроверитьОбязательныеРеквизитыФормы(Форма, "ЗначенияПоУмолчаниюНаУзле, ВерсияКорреспондента"); - + Форма.ВерсияКорреспондента = Форма.Параметры.ВерсияКорреспондента; - Форма.ЗначенияПоУмолчаниюНаУзле = ЗначенияПоУмолчаниюНаУзле(ИмяПланаОбмена, Форма.ВерсияКорреспондента, , ИдентификаторНастройки); + Форма.ЗначенияПоУмолчаниюНаУзле = ЗначенияПоУмолчаниюНаУзле(ИмяПланаОбмена, Форма.ВерсияКорреспондента,, + ИдентификаторНастройки); ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, "ЗначенияПоУмолчаниюНаУзле"); @@ -208,7 +266,8 @@ Форма.ВерсияКорреспондента = Форма.Параметры.ВерсияКорреспондента; Форма.ПараметрыВнешнегоСоединения = Форма.Параметры.ПараметрыВнешнегоСоединения; - Форма.ЗначенияПоУмолчаниюНаУзле = ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ИмяПланаОбмена, Форма.ВерсияКорреспондента, , ИдентификаторНастройки); + Форма.ЗначенияПоУмолчаниюНаУзле = ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ИмяПланаОбмена, Форма.ВерсияКорреспондента,, + ИдентификаторНастройки); ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, "ЗначенияПоУмолчаниюНаУзле"); @@ -401,33 +460,6 @@ КонецПроцедуры -// Возвращает, если оно задано, переопределяемое имя плана обмена, -// в зависимости от предопределенной настройки обмена. -// Параметры: -// УзелПланаОбмена - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить переопределяемое -// имя. -// ИмяПараметраСИменемУзла - Строка - Имя параметра, в настройках по умолчанию, из которого необходимо получить имя узла. -// -// Возвращаемое значение: -// Строка - переопределяемое имя плана обмена как оно заданно в конфигураторе. -// -Функция ПереопределяемоеИмяУзлаПланаОбмена(Знач УзелПланаОбмена, ИмяПараметраСИменемУзла) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; - ПереопределяемоеИмяУзлаПланаОбмена = УзелПланаОбмена.Метаданные().Синоним; - - ПереопределяемоеИмяУзлаПланаОбмена = ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - ИмяПараметраСИменемУзла, - СохраненныйВариантНастройкиУзлаПланаОбмена(УзелПланаОбмена)); - - УстановитьПривилегированныйРежим(Ложь); - - Возврат ПереопределяемоеИмяУзлаПланаОбмена; - -КонецФункции - // Возвращает идентификатор сохраненного варианта настройки плана обмена. // Параметры: // УзелПланаОбмена - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить переопределяемое @@ -693,7 +725,8 @@ ДополнительныеДанные = Новый Структура; // {Обработчик: ПолучитьДополнительныеДанныеДляКорреспондента} Начало - ПланыОбмена[ИмяПланаОбмена].ПолучитьДополнительныеДанныеДляКорреспондента(ДополнительныеДанные); + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, "","",""); + ДополнительныеДанные = ОписаниеВариантаНастройки.ДополнительныеДанныеДляКорреспондента; // {Обработчик: ПолучитьДополнительныеДанныеДляКорреспондента} Окончание Результат.Вставить("{ДополнительныеДанные}", ДополнительныеДанные); @@ -1008,26 +1041,9 @@ КонецФункции -// Возвращает назначенный для плана обмена режим регистрации изменений, -// применяемый при выполнении записи данных в рамках обновления информационной базы. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. -// -// Возвращаемое значение: -// "Все" - регистрируются все данные (например, для обмена РИБ с отбором), -// "ТолькоНовые" - регистрируются только новые объекты ссылочных типов (например, для обмена по правилам), -// "ОпределяетсяЛогикойОбновления" - решение о регистрации принимается на уровне логики обновления. -// -Функция РежимРегистрацииДанныхДляПланаОбменаПриОбновленииИнформационнойБазы(ИмяПланаОбмена) Экспорт - - Возврат ОбменДаннымиПовтИсп.РежимРегистрацииДанныхДляПланаОбменаПриОбновленииИнформационнойБазы(ИмяПланаОбмена); - -КонецФункции - #Область ДляВызоваИзДругихПодсистем -// ТехнологияСервиса.ОбменДаннымиВМоделиСервиса +// ТехнологияСервиса.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса // Возвращает ссылку на узел плана обмена, найденный по его коду. // Если узел не найден, возвращается Неопределено. @@ -1127,15 +1143,16 @@ // Функция ВариантНастройкиОбменаДляКорреспондента(ИмяПланаОбмена, ИмяКорреспондента) Экспорт - ОписанияВариантовНастроекОбмена = ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ОписанияВариантовНастроекОбмена"); - ОписаниеВарианта = ОписанияВариантовНастроекОбмена.Найти(ИмяКорреспондента, "ИмяКорреспондента"); - - ВариантНастройкиОбмена = ?(ЗначениеЗаполнено(ОписаниеВарианта), ОписаниеВарианта.ИдентификаторНастройки, ""); - Возврат ВариантНастройкиОбмена; + НастройкиПланаОбмена = НастройкиПланаОбмена(ИмяПланаОбмена,, ИмяКорреспондента, Истина); + Если НастройкиПланаОбмена.ВариантыНастроекОбмена.Количество() = 0 Тогда + Возврат ""; + Иначе + Возврат НастройкиПланаОбмена.ВариантыНастроекОбмена[0].ИдентификаторНастройки; + КонецЕсли; КонецФункции -// Конец ТехнологияСервиса.ОбменДаннымиВМоделиСервиса +// Конец ТехнологияСервиса.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса #КонецОбласти @@ -1200,6 +1217,39 @@ Возврат Результат; КонецФункции +// Устарела. Следует использовать функцию ЗначениеНастройкиПланаОбмена, +// установив параметру ИмяПараметра одно из следующих значений: +// - ЗаголовокКомандыДляСозданияНовогоОбменаДанными; +// - ЗаголовокПомощникаСозданияОбмена; +// - ЗаголовокУзлаПланаОбмена; +// - НаименованиеКонфигурацииКорреспондента. +// +// Возвращает, если оно задано, переопределяемое имя плана обмена, +// в зависимости от предопределенной настройки обмена. +// Параметры: +// УзелПланаОбмена - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить переопределяемое +// имя. +// ИмяПараметраСИменемУзла - Строка - Имя параметра, в настройках по умолчанию, из которого необходимо получить имя узла. +// ВариантНастройки - Строка - Вариант настройки обмена. +// +// Возвращаемое значение: +// Строка - переопределяемое имя плана обмена как оно заданно в конфигураторе. +// +Функция ПереопределяемоеИмяУзлаПланаОбмена(Знач УзелПланаОбмена, ИмяПараметраСИменемУзла, ВариантНастройки = "") Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПредставлениеПланаОбмена = ЗначениеНастройкиПланаОбмена( + УзелПланаОбмена.Метаданные().Имя, + ИмяПараметраСИменемУзла, + ВариантНастройки); + + УстановитьПривилегированныйРежим(Ложь); + + Возврат ПредставлениеПланаОбмена; + +КонецФункции + #КонецОбласти #КонецОбласти @@ -1635,108 +1685,6 @@ #Область ПрогрессБар -// Вычисляет количество объектов к загрузке и размер файла сообщения обмена. -// Параметры: -// ИмяФайлаОбмена - Строка - имя файла сообщения обмена. -// ЭтоОбменXDTO - Булево - признак того, что выполняется обмен через универсальный формат. -// ЭтоОбменРИБ - Булево - признак того, что выполняется обмен РИБ. -// -// Возвращаемое значение: -// Структура - свойства структуры: -// * РазмерФайлаСообщенияОбмена - Число - размер файла в мегабайтах, по умолчанию 0. -// * КоличествоОбъектовКЗагрузке - Число - количество объектов к загрузке, по умолчанию 0. -// -// Вычисляет количество объектов к загрузке и размер файла сообщения обмена. -// Параметры: -// ИмяФайлаОбмена - Строка - имя файла сообщения обмена. -// ЭтоОбменXDTO - Булево - признак того, что выполняется обмен через универсальный формат. -// -// Возвращаемое значение: -// Структура - свойства структуры: -// * РазмерФайлаСообщенияОбмена - Число - размер файла в мегабайтах, по умолчанию 0. -// * КоличествоОбъектовКЗагрузке - Число - количество объектов к загрузке, по умолчанию 0. -// -Функция РезультатПодсчетаДанныхКЗагрузке(Знач ИмяФайлаОбмена, ЭтоОбменXDTO, ЭтоОбменРИБ = Ложь) Экспорт - - Результат = Новый Структура; - Результат.Вставить("РазмерФайлаСообщенияОбмена", 0); - Результат.Вставить("КоличествоОбъектовКЗагрузке", 0); - - Если НЕ ЗначениеЗаполнено(ИмяФайлаОбмена) Тогда - Возврат Результат; - КонецЕсли; - - ФайлСДанными = Новый Файл(ИмяФайлаОбмена); - Если Не ФайлСДанными.Существует() Тогда - Возврат Результат; - КонецЕсли; - - ФайлОбмена = Новый ЧтениеXML; - Попытка - // Размер сразу переводим в мегабайты. - Результат.РазмерФайлаСообщенияОбмена = Окр(ФайлСДанными.Размер() / 1048576, 1); - ФайлОбмена.ОткрытьФайл(ИмяФайлаОбмена); - Исключение - Возврат Результат; - КонецПопытки; - - // В зависимости от вида обмена используется разный алгоритм анализа файла обмена. - Если ЭтоОбменXDTO Тогда - ФайлОбмена.Прочитать(); // Message. - ФайлОбмена.Прочитать(); // Header начало. - ФайлОбмена.Пропустить(); // Header конец. - ФайлОбмена.Прочитать(); //Body начало. - Пока ФайлОбмена.Прочитать() Цикл - Если ФайлОбмена.ЛокальноеИмя <> "УдалениеОбъекта" - И ФайлОбмена.ЛокальноеИмя <> "Body" Тогда - Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1; - КонецЕсли; - ФайлОбмена.Пропустить(); - КонецЦикла; - ИначеЕсли ЭтоОбменРИБ Тогда - ФайлОбмена.Прочитать(); // Message. - ФайлОбмена.Прочитать(); // Header начало. - ФайлОбмена.Пропустить(); // Header конец. - ФайлОбмена.Прочитать(); //Body начало. - Пока ФайлОбмена.Прочитать() Цикл - Если ФайлОбмена.ЛокальноеИмя = "Changes" - ИЛИ ФайлОбмена.ЛокальноеИмя = "Data" Тогда - Продолжить; - ИначеЕсли СтрНайти(ФайлОбмена.ЛокальноеИмя, "Config") = 0 - И СтрНайти(ФайлОбмена.ЛокальноеИмя, "Signature") = 0 - И СтрНайти(ФайлОбмена.ЛокальноеИмя, "Nodes") = 0 - И ФайлОбмена.ЛокальноеИмя <> "Parameters" - И ФайлОбмена.ЛокальноеИмя <> "Body" Тогда - Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1; - КонецЕсли; - ФайлОбмена.Пропустить(); - КонецЦикла; - Иначе - - ФайлОбмена.Прочитать(); // Файл обмена. - ФайлОбмена.Прочитать(); // ПравилаОбмена начало. - ФайлОбмена.Пропустить(); // ПравилаОбмена конец. - - ФайлОбмена.Прочитать(); // Типы данных начало. - ФайлОбмена.Пропустить(); // ТипыДанных конец. - - ФайлОбмена.Прочитать(); // Данные по обмену начало. - ФайлОбмена.Пропустить(); // Данные по обмену конец. - Пока ФайлОбмена.Прочитать() Цикл - Если ФайлОбмена.ЛокальноеИмя = "Объект" - ИЛИ ФайлОбмена.ЛокальноеИмя = "НаборЗаписейРегистра" - ИЛИ ФайлОбмена.ЛокальноеИмя = "УдалениеОбъекта" - ИЛИ ФайлОбмена.ЛокальноеИмя = "ИнформацияОРегистрацииОбъекта" Тогда - Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1; - КонецЕсли; - ФайлОбмена.Пропустить(); - КонецЦикла; - КонецЕсли; - ФайлОбмена.Закрыть(); - - Возврат Результат; -КонецФункции - // Рассчитывает процент выгрузки и записывает в виде сообщения пользователю. // // Параметры: @@ -1908,6 +1856,123 @@ КонецПроцедуры +// Анализирует данные к загрузке: +// Вычисляет количество объектов к загрузке, размер файла сообщения обмена, другие служебные данные. +// Параметры: +// ИмяФайлаОбмена - Строка - имя файла сообщения обмена. +// ЭтоОбменXDTO - Булево - признак того, что выполняется обмен через универсальный формат. +// +// Возвращаемое значение: +// Структура - свойства структуры: +// * РазмерФайлаСообщенияОбмена - Число - размер файла в мегабайтах, по умолчанию 0. +// * КоличествоОбъектовКЗагрузке - Число - количество объектов к загрузке, по умолчанию 0. +// * From - Строка - Код узла-отправителя сообщения. +// * To - Строка - Код узла-получателя сообщения. +// * NewFrom - Строка - Код узла-отправителя в новом формате (для перевода существующих обменов на новую кодировку). +Функция РезультатАнализаДанныхКЗагрузке(Знач ИмяФайлаОбмена, ЭтоОбменXDTO, ЭтоОбменРИБ = Ложь) Экспорт + + Результат = Новый Структура; + Результат.Вставить("РазмерФайлаСообщенияОбмена", 0); + Результат.Вставить("КоличествоОбъектовКЗагрузке", 0); + Результат.Вставить("From", ""); + Результат.Вставить("NewFrom", ""); + Результат.Вставить("To", ""); + + Если НЕ ЗначениеЗаполнено(ИмяФайлаОбмена) Тогда + Возврат Результат; + КонецЕсли; + + ФайлСДанными = Новый Файл(ИмяФайлаОбмена); + Если Не ФайлСДанными.Существует() Тогда + Возврат Результат; + КонецЕсли; + + ФайлОбмена = Новый ЧтениеXML; + Попытка + // Размер сразу переводим в мегабайты. + Результат.РазмерФайлаСообщенияОбмена = Окр(ФайлСДанными.Размер() / 1048576, 1); + ФайлОбмена.ОткрытьФайл(ИмяФайлаОбмена); + Исключение + Возврат Результат; + КонецПопытки; + + // В зависимости от вида обмена используется разный алгоритм анализа файла обмена. + Если ЭтоОбменXDTO Тогда + ФайлОбмена.Прочитать(); // Message. + ФайлОбмена.Прочитать(); // Header начало. + НачатьСчетОбъектов = Ложь; + Пока ФайлОбмена.Прочитать() Цикл + Если ФайлОбмена.ЛокальноеИмя = "Header" Тогда + // Закончено чтение заголовка. + НачатьСчетОбъектов = Истина; + ФайлОбмена.Пропустить(); + ИначеЕсли ФайлОбмена.ЛокальноеИмя = "Confirmation" Тогда + ФайлОбмена.Прочитать(); + ИначеЕсли ФайлОбмена.ЛокальноеИмя = "From" Тогда + ФайлОбмена.Прочитать(); + Результат.From = ФайлОбмена.Значение; + ФайлОбмена.Пропустить(); + ИначеЕсли ФайлОбмена.ЛокальноеИмя = "To" Тогда + ФайлОбмена.Прочитать(); + Результат.To = ФайлОбмена.Значение; + ФайлОбмена.Пропустить(); + ИначеЕсли ФайлОбмена.ЛокальноеИмя = "NewFrom" Тогда + ФайлОбмена.Прочитать(); + Результат.NewFrom = ФайлОбмена.Значение; + ФайлОбмена.Пропустить(); + ИначеЕсли НачатьСчетОбъектов + И ФайлОбмена.ТипУзла = ТипУзлаXML.НачалоЭлемента + И ФайлОбмена.ЛокальноеИмя <> "УдалениеОбъекта" + И ФайлОбмена.ЛокальноеИмя <> "Body" Тогда + Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1; + ФайлОбмена.Пропустить(); + КонецЕсли; + КонецЦикла; + + ИначеЕсли ЭтоОбменРИБ Тогда + ФайлОбмена.Прочитать(); // Message. + ФайлОбмена.Прочитать(); // Header начало. + ФайлОбмена.Пропустить(); // Header конец. + ФайлОбмена.Прочитать(); //Body начало. + Пока ФайлОбмена.Прочитать() Цикл + Если ФайлОбмена.ЛокальноеИмя = "Changes" + ИЛИ ФайлОбмена.ЛокальноеИмя = "Data" Тогда + Продолжить; + ИначеЕсли СтрНайти(ФайлОбмена.ЛокальноеИмя, "Config") = 0 + И СтрНайти(ФайлОбмена.ЛокальноеИмя, "Signature") = 0 + И СтрНайти(ФайлОбмена.ЛокальноеИмя, "Nodes") = 0 + И ФайлОбмена.ЛокальноеИмя <> "Parameters" + И ФайлОбмена.ЛокальноеИмя <> "Body" Тогда + Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1; + КонецЕсли; + ФайлОбмена.Пропустить(); + КонецЦикла; + Иначе + + ФайлОбмена.Прочитать(); // Файл обмена. + ФайлОбмена.Прочитать(); // ПравилаОбмена начало. + ФайлОбмена.Пропустить(); // ПравилаОбмена конец. + + ФайлОбмена.Прочитать(); // Типы данных начало. + ФайлОбмена.Пропустить(); // ТипыДанных конец. + + ФайлОбмена.Прочитать(); // Данные по обмену начало. + ФайлОбмена.Пропустить(); // Данные по обмену конец. + Пока ФайлОбмена.Прочитать() Цикл + Если ФайлОбмена.ЛокальноеИмя = "Объект" + ИЛИ ФайлОбмена.ЛокальноеИмя = "НаборЗаписейРегистра" + ИЛИ ФайлОбмена.ЛокальноеИмя = "УдалениеОбъекта" + ИЛИ ФайлОбмена.ЛокальноеИмя = "ИнформацияОРегистрацииОбъекта" Тогда + Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1; + КонецЕсли; + ФайлОбмена.Пропустить(); + КонецЦикла; + КонецЕсли; + ФайлОбмена.Закрыть(); + + Возврат Результат; +КонецФункции + #КонецОбласти #Область РаботаСОбъектомFTPСоединение @@ -2089,42 +2154,6 @@ Возврат ПланыОбмена.ВыбратьИзменения(Узел, НомерСообщения, ФильтрВыборки); КонецФункции -// Получает значение настройки плана обмена по ее имени. -// Для несуществующих параметров возвращается Неопределено. -// -// Параметры: -// ИмяПланаОбмена - Строка - Имя плана обмена из метаданных. -// ИмяПараметра - Строка - Имя параметра плана обмена или список параметров, разделенных запятыми. -// Список допустимых значений см. в функции ПараметрыПланаОбменаПоУмолчанию. -// ИдентификаторНастройки - Строка - Имя предопределенной настройки плана обмена. -// -// Возвращаемое значение: -// - Произвольный - Тип возвращаемого значения зависит от типа значения получаемой настройки. -// - Структура - Если в качестве параметра ИмяПараметра была передан список параметров через запятую. -// -Функция ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, ИмяПараметра, ИдентификаторНастройки = "") Экспорт - - ЗначениеПараметра = Неопределено; - ПараметрыПоУмолчанию = НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена); - Если ОбменДаннымиПовтИсп.ПланыОбменаБСП().Найти(ИмяПланаОбмена) <> Неопределено Тогда - ПланыОбмена[ИмяПланаОбмена].ОпределитьНастройки(ПараметрыПоУмолчанию, ИдентификаторНастройки); - КонецЕсли; - - Если СтрНайти(ИмяПараметра, ",") = 0 Тогда - - ПараметрыПоУмолчанию.Свойство(ИмяПараметра, ЗначениеПараметра); - - Иначе - - ЗначениеПараметра = Новый Структура(ИмяПараметра); - ЗаполнитьЗначенияСвойств(ЗначениеПараметра, ПараметрыПоУмолчанию); - - КонецЕсли; - - Возврат ЗначениеПараметра; - -КонецФункции - Функция СтруктураПараметровWS() Экспорт СтруктураПараметров = Новый Структура; @@ -2285,12 +2314,6 @@ Для Каждого НастройкаСинхронизации Из НастройкиСинхронизации Цикл - ПереопределяемоеИмяУзлаПланаОбмена = ПереопределяемоеИмяУзлаПланаОбмена(НастройкаСинхронизации.УзелИнформационнойБазы, "НаименованиеКонфигурацииКорреспондента"); - - Если ЗначениеЗаполнено(ПереопределяемоеИмяУзлаПланаОбмена) Тогда - НастройкаСинхронизации.ИмяПланаОбмена = ПереопределяемоеИмяУзлаПланаОбмена; - КонецЕсли; - НастройкаСинхронизации.ПредставлениеДатыПоследнейЗагрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейЗагрузки); НастройкаСинхронизации.ПредставлениеДатыПоследнейВыгрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейВыгрузки); НастройкаСинхронизации.ПредставлениеДатыПоследнейУспешнойЗагрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейУспешнойЗагрузки); @@ -2298,6 +2321,11 @@ НастройкаСинхронизации.ВариантОбменаДанными = ВариантОбменаДанными(НастройкаСинхронизации.УзелИнформационнойБазы); + НастройкаСинхронизации.ИмяПланаОбмена = ЗначениеНастройкиПланаОбмена( + НастройкаСинхронизации.УзелИнформационнойБазы.Метаданные().Имя, + "НаименованиеКонфигурацииКорреспондента", + НастройкаСинхронизации.ВариантОбменаДанными); + КонецЦикла; Возврат НастройкиСинхронизации; @@ -2610,7 +2638,7 @@ Попытка СтрокаДвижения.НаборЗаписей.Записать(); Исключение - // Возможно «сработал» RLS или подсистема даты запрета изменения. + // Возможно «сработало» ограничение на уровне записей или подсистема даты запрета изменения. ТекстИсключения = НСтр("ru = 'Операция не выполнена: %1 |%2'"); ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, СтрокаДвижения.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -2710,9 +2738,9 @@ НастройкиТранспортаОбмена.Записать(); ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); - ОтменитьТранзакцию(); КонецПопытки; КонецЕсли; КонецЦикла; @@ -2725,7 +2753,11 @@ // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "ОбменДаннымиСервер.УстановитьКодыПредопределенныхУзлов"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; Обработчик.Приоритет = 1; @@ -2957,19 +2989,122 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистем.ПриРегистрацииМенеджеровВнешнихМодулей. +// См. ИнтеграцияПодсистемБСП.ПриРегистрацииМенеджеровВнешнихМодулей. Процедура ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры) Экспорт Менеджеры.Добавить(ОбменДаннымиСервер); КонецПроцедуры + +Процедура УстановитьКодыПредопределенныхУзлов() Экспорт + НачатьТранзакцию(); + + Попытка + + КодИзМоделиСервиса = ""; + ВиртуальныеКоды = РегистрыСведений.ПсевдонимыПредопределенныхУзлов.СоздатьНаборЗаписей(); + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + + КодИзМоделиСервиса = СокрЛП(МодульОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса())); + + КонецЕсли; + + Для Каждого УзелСсылка Из ПредопределенныеУзлыПлановОбменаБСП() Цикл + Если НЕ ЭтоПланОбменаXDTO(УзелСсылка) Тогда + Продолжить; + ИначеЕсли НЕ ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(УзелСсылка) Тогда + Продолжить; + КонецЕсли; + КодПредопределенногоУзла = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелСсылка, "Код")); + Если НЕ ЗначениеЗаполнено(КодПредопределенногоУзла) + // Не был выполнен переход на новую кодировку узлов. + Или СтрДлина(КодПредопределенногоУзла) < 36 + // Требуется перекодировка в связи с тем, что код сформирован по логике БТС. + Или КодПредопределенногоУзла = КодИзМоделиСервиса Тогда + УникальныйИдентификаторОбменаДанными = Строка(Новый УникальныйИдентификатор); + + УзелОбъект = УзелСсылка.ПолучитьОбъект(); + УзелОбъект.Код = УникальныйИдентификаторОбменаДанными; + УзелОбъект.ОбменДанными.Загрузка = Истина; + УзелОбъект.Записать(); + + Если ЗначениеЗаполнено(КодПредопределенногоУзла) Тогда + // Сохранение предыдущего кода узла в регистре виртуальных кодов. + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ + | %1.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.%1 КАК %1 + |ГДЕ + | %1.ЭтотУзел = ЛОЖЬ + | И %1.ПометкаУдаления = ЛОЖЬ", УзелОбъект.Метаданные().Имя); + Запрос = Новый Запрос(ТекстЗапроса); + КорреспондентыПланаОбмена = Запрос.Выполнить().Выбрать(); + Пока КорреспондентыПланаОбмена.Следующий() Цикл + ВиртуальныйКод = ВиртуальныеКоды.Добавить(); + ВиртуальныйКод.Корреспондент = КорреспондентыПланаОбмена.Ссылка; + ВиртуальныйКод.КодУзла = КодПредопределенногоУзла; + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ВиртуальныеКоды.Количество() > 0 Тогда + ВиртуальныеКоды.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + + #КонецОбласти #КонецОбласти #Область СлужебныеПроцедурыИФункции +Функция ПредопределенныеУзлыПлановОбменаБСП() + + Результат = Новый Массив; + + ТекстЗапроса = ""; + ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл + + Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ + | %1.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.%1 КАК %1 + |ГДЕ + | %1.ЭтотУзел = ИСТИНА", ИмяПланаОбмена); + + КонецЦикла; + Если ПустаяСтрока(ТекстЗапроса) Тогда + Возврат Результат; + КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); + Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Возврат Результат; + +КонецФункции + Процедура ПропуститьПроверкуЗапретаИзменения(Пропустить = Истина) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда @@ -2981,7 +3116,7 @@ Процедура ПриПродолженииНастройкиПодчиненногоУзлаРИБ() Экспорт - ИнтеграцияСтандартныхПодсистем.ПриНастройкеПодчиненногоУзлаРИБ(); + ИнтеграцияПодсистемБСП.ПриНастройкеПодчиненногоУзлаРИБ(); ОбменДаннымиПереопределяемый.ПриНастройкеПодчиненногоУзлаРИБ(); КонецПроцедуры @@ -3469,7 +3604,7 @@ ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена); КонецЕсли; - + Если СтруктураНастроекОбмена.РезультатВыполненияОбмена <> Неопределено Тогда Если ВыводитьСообщения Тогда @@ -3516,7 +3651,7 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); КодТекущегоУзлаПланаОбмена = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийУзелПланаОбмена, "Код"); - + ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь); // Параметры, которые будут определены в функции. @@ -3559,6 +3694,17 @@ ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml"); + ПсевдонимУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); + Если ЗначениеЗаполнено(ПсевдонимУзла) Тогда + // Надо проверить код узла в корреспонденте - он может быть уже перекодирован. + // Тогда псевдоним больше не нужен. + ПланОбменаМенеджер = ВнешнееСоединение.ПланыОбмена[ИмяПланаОбмена]; + Если ПланОбменаМенеджер.НайтиПоКоду(ПсевдонимУзла) <> ПланОбменаМенеджер.ПустаяСсылка() Тогда + КодТекущегоУзлаПланаОбмена = ПсевдонимУзла; + ПроверятьНаличиеУзлаВКорреспонденте = Ложь; + КонецЕсли; + КонецЕсли; + ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ВыполнитьВыгрузкуДляУзлаИнформационнойБазы(Отказ, ИмяПланаОбмена, КодТекущегоУзлаПланаОбмена, ИмяФайлаСообщенияОбмена, СтрокаСообщенияОбОшибке); Если Отказ Тогда @@ -3647,6 +3793,29 @@ Возврат Результат; КонецЕсли; + ПсевдонимУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); + Если ЗначениеЗаполнено(ПсевдонимУзла) Тогда + // Надо проверить код узла в корреспонденте - он может быть уже перекодирован. + // Тогда псевдоним больше не нужен. + Если ЗначениеЗаполнено(ПсевдонимУзла) Тогда + // Следует проверить есть ли в корреспонденте такой узел (возможно он уже перекодировался). + УзелПсевдонимСуществует = Истина; + СообщениеОбОшибке = ""; + ПараметрыПриемникаПрокси = Прокси.GetIBParameters(ИмяПланаОбмена, ПсевдонимУзла, СообщениеОбОшибке); + Попытка + ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(ПараметрыПриемникаПрокси); + Исключение + ПараметрыПриемника = ЗначениеИзСтрокиВнутр(ПараметрыПриемникаПрокси); + КонецПопытки; + Если ПараметрыПриемника.Свойство("УзелСуществует") Тогда + УзелПсевдонимСуществует = (ПараметрыПриемника.УзелСуществует = Истина); + КонецЕсли; + Если УзелПсевдонимСуществует Тогда + КодТекущегоУзлаПланаОбмена = ПсевдонимУзла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Попытка Прокси.UploadData( @@ -3791,10 +3960,19 @@ ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь); ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml"); + ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена); + Если НЕ ФайлСообщенияОбмена.Существует() Тогда + // Возможно, файл удастся получить если применить виртуальный код узла. + ШаблонИмениФайлаСообщенияСтарый = ШаблонИмениФайлаСообщения; + ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь,, Истина); + Если ШаблонИмениФайлаСообщения <> ШаблонИмениФайлаСообщенияСтарый Тогда + ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml"); + ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена); + КонецЕсли; + КонецЕсли; ПереместитьФайл(ИмяФайлаИзСервисаПередачиФайлов, ИмяФайлаСообщенияОбмена); - ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена); Если ФайлСообщенияОбмена.Существует() Тогда ДатаФайлаСообщенияОбмена = ФайлСообщенияОбмена.ПолучитьВремяИзменения(); КонецЕсли; @@ -4159,7 +4337,7 @@ ПараметрыОбмена.УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаИнформационнойБазы); Если ПараметрыОбмена.УзелИнформационнойБазы.Пустая() - И ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + И ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда ОшибкаПерехода = Ложь; НастройкаСинхронизацииЧерезУФ = ПланыОбмена[ИмяПланаОбмена].ПереходНаСинхронизациюЧерезУниверсальныйФорматИнтернет( КодУзлаИнформационнойБазы, ОшибкаПерехода); @@ -4448,8 +4626,27 @@ КонецЕсли; ХранилищеСообщенияОбмена = Неопределено; - + ПсевдонимУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); + Попытка + Если ЗначениеЗаполнено(ПсевдонимУзла) Тогда + // Следует проверить есть ли в корреспонденте такой узел (возможно он уже перекодировался). + УзелПсевдонимСуществует = Истина; + СообщениеОбОшибке = ""; + ПараметрыПриемникаПрокси = Прокси.GetIBParameters(СтруктураНастроекОбмена.ИмяПланаОбмена, ПсевдонимУзла, СообщениеОбОшибке); + Попытка + ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(ПараметрыПриемникаПрокси); + Исключение + ПараметрыПриемника = ЗначениеИзСтрокиВнутр(ПараметрыПриемникаПрокси); + КонецПопытки; + Если ПараметрыПриемника.Свойство("УзелСуществует") Тогда + УзелПсевдонимСуществует = (ПараметрыПриемника.УзелСуществует = Истина); + КонецЕсли; + Если УзелПсевдонимСуществует Тогда + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ПсевдонимУзла; + КонецЕсли; + КонецЕсли; + Прокси.Upload(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, ХранилищеСообщенияОбмена); ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена,, ХранилищеСообщенияОбмена.Получить()); @@ -4482,7 +4679,24 @@ Отказ = Истина; Возврат; КонецЕсли; - + ПсевдонимУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); + Если ЗначениеЗаполнено(ПсевдонимУзла) Тогда + // Следует проверить есть ли в корреспонденте такой узел (возможно он уже перекодировался). + УзелПсевдонимСуществует = Истина; + СтрокаСообщенияОбОшибке = ""; + ПараметрыПриемникаПрокси = Прокси.GetIBParameters(СтруктураНастроекОбмена.ИмяПланаОбмена, ПсевдонимУзла, СтрокаСообщенияОбОшибке); + Попытка + ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(ПараметрыПриемникаПрокси); + Исключение + ПараметрыПриемника = ЗначениеИзСтрокиВнутр(ПараметрыПриемникаПрокси); + КонецПопытки; + Если ПараметрыПриемника.Свойство("УзелСуществует") Тогда + УзелПсевдонимСуществует = (ПараметрыПриемника.УзелСуществует = Истина); + КонецЕсли; + Если УзелПсевдонимСуществует Тогда + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ПсевдонимУзла; + КонецЕсли; + КонецЕсли; Если СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных Тогда ФайлСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), УникальноеИмяФайлаСообщенияОбмена()); @@ -4494,7 +4708,6 @@ СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; Отказ = Истина; КонецПопытки; - // Отправка сообщения обмена только в случае успешной выгрузки данных. Если РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) И НЕ Отказ Тогда @@ -4631,50 +4844,63 @@ Структура.Вставить("РежимОтладки", Ложь); Структура.Вставить("ИмяФайлаПротоколаОбмена", ""); - ЭтоПланОбменаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(УзелИнформационнойБазы); + ЭтоПланОбменаXDTO = ЭтоПланОбменаXDTO(УзелИнформационнойБазы); Если ЭтоПланОбменаXDTO Тогда - // Проверка наличия узла в базе-корреспонденте. + // Проверка псевдонима предопределенного узла + ПсевдонимПредопределенногоУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); ПланОбменаМенеджер = ВнешнееСоединение.ПланыОбмена[Структура.ИмяПланаОбмена]; - ПланОбменаСсылка = ПланОбменаМенеджер.НайтиПоКоду(Структура.ТекущийУзелПланаОбменаКод); - Если НЕ ЗначениеЗаполнено(ПланОбменаСсылка.Code) Тогда - // При необходимости запуск перехода на синхронизацию данных через универсальный формат. - ТекстСообщения = НСтр("ru = 'Необходим переход на синхронизацию данных через универсальный формат в базе-корреспонденте.'"); - ЗаписьЖурналаРегистрацииОбменаДанными(ТекстСообщения, СтруктураНастроекОбмена, Ложь); - - СтруктураПараметров = Новый Структура(); - СтруктураПараметров.Вставить("Код", Структура.ТекущийУзелПланаОбменаКод); - СтруктураПараметров.Вставить("ВариантНастройки", - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "ВариантНастройки")); - СтруктураПараметров.Вставить("Ошибка", Ложь); - СтруктураПараметров.Вставить("СообщениеОбОшибке", ""); - - ЕстьОшибки = Ложь; - СтрокаСообщенияОбОшибке = ""; - РезультатПерехода = - ПланОбменаМенеджер.ПереходНаСинхронизациюЧерезУниверсальныйФорматВнешнееСоединение(СтруктураПараметров); - Если СтруктураПараметров.Ошибка Тогда - ЕстьОшибки = Истина; - НСтрока = НСтр("ru = 'Ошибка при переходе на синхронизацию данных через универсальный формат: %1. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, - СтруктураПараметров.СообщениеОбОшибке); - ИначеЕсли РезультатПерехода = Неопределено Тогда - ЕстьОшибки = Истина; - СтрокаСообщенияОбОшибке = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат не выполнен'"); - КонецЕсли; - Если ЕстьОшибки Тогда - // Синхронизация данных невозможна. - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - Иначе - Сообщение = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат завершен успешно.'"); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Ложь); + ПроверятьНаличиеУзлаВКорреспонденте = Истина; + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда + // Надо проверить код узла в корреспонденте - он может быть уже перекодирован. + // Тогда псевдоним больше не нужен. + Если ПланОбменаМенеджер.НайтиПоКоду(ПсевдонимПредопределенногоУзла) <> ПланОбменаМенеджер.ПустаяСсылка() Тогда + Структура.ТекущийУзелПланаОбменаКод = ПсевдонимПредопределенногоУзла; + ПроверятьНаличиеУзлаВКорреспонденте = Ложь; КонецЕсли; КонецЕсли; - КонецЕсли; + Если ПроверятьНаличиеУзлаВКорреспонденте Тогда + // Проверка наличия узла в базе-корреспонденте. + ПланОбменаСсылка = ПланОбменаМенеджер.НайтиПоКоду(Структура.ТекущийУзелПланаОбменаКод); + Если НЕ ЗначениеЗаполнено(ПланОбменаСсылка.Code) Тогда + // При необходимости запуск перехода на синхронизацию данных через универсальный формат. + ТекстСообщения = НСтр("ru = 'Необходим переход на синхронизацию данных через универсальный формат в базе-корреспонденте.'"); + ЗаписьЖурналаРегистрацииОбменаДанными(ТекстСообщения, СтруктураНастроекОбмена, Ложь); + + СтруктураПараметров = Новый Структура(); + СтруктураПараметров.Вставить("Код", Структура.ТекущийУзелПланаОбменаКод); + СтруктураПараметров.Вставить("ВариантНастройки", + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "ВариантНастройки")); + СтруктураПараметров.Вставить("Ошибка", Ложь); + СтруктураПараметров.Вставить("СообщениеОбОшибке", ""); + + ЕстьОшибки = Ложь; + СтрокаСообщенияОбОшибке = ""; + РезультатПерехода = + ПланОбменаМенеджер.ПереходНаСинхронизациюЧерезУниверсальныйФорматВнешнееСоединение(СтруктураПараметров); + Если СтруктураПараметров.Ошибка Тогда + ЕстьОшибки = Истина; + НСтрока = НСтр("ru = 'Ошибка при переходе на синхронизацию данных через универсальный формат: %1. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, + СтруктураПараметров.СообщениеОбОшибке); + ИначеЕсли РезультатПерехода = Неопределено Тогда + ЕстьОшибки = Истина; + СтрокаСообщенияОбОшибке = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат не выполнен'"); + КонецЕсли; + Если ЕстьОшибки Тогда + // Синхронизация данных невозможна. + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + Иначе + Сообщение = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат завершен успешно.'"); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Ложь); + КонецЕсли; + КонецЕсли; // Если НЕ ЗначениеЗаполнено(ПланОбменаСсылка.Code) Тогда + КонецЕсли; // Если ПроверятьНаличиеУзлаВКорреспонденте Тогда + КонецЕсли; //Если ЭтоПланОбменаXDTO Тогда Попытка СтруктураНастроекОбменаВнешнееСоединение = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СтруктураНастроекОбмена(Структура); @@ -5614,13 +5840,13 @@ ЗафиксироватьТранзакцию(); КонецЕсли; Исключение + Если ИспользоватьТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, УзелИнформационнойБазы.Метаданные(), УзелИнформационнойБазы, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Если ИспользоватьТранзакции Тогда - ОтменитьТранзакцию(); - КонецЕсли; КонецПопытки; Если РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка Тогда @@ -5646,11 +5872,17 @@ // Возвращает имя файла сообщения обмена данными по данным узла-отправителя и узла-получателя. // -Функция ИмяФайлаСообщенияОбмена(КодУзлаОтправителя, КодУзлаПолучателя) +Функция ИмяФайлаСообщенияОбмена(КодУзлаОтправителя, КодУзлаПолучателя, ЭтоИсходящееСообщение) ШаблонИмени = "[Префикс]_[УзелОтправитель]_[УзелПолучатель]"; - + Если СтрДлина(КодУзлаОтправителя) = 36 И ЭтоИсходящееСообщение Тогда + ПрефиксИБИсточника = Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Получить(); + Если ЗначениеЗаполнено(ПрефиксИБИсточника) Тогда + ШаблонИмени = "[Префикс]_[ПрефиксИБИсточника]_[УзелОтправитель]_[УзелПолучатель]"; + КонецЕсли; + КонецЕсли; ШаблонИмени = СтрЗаменить(ШаблонИмени, "[Префикс]", "Message"); + ШаблонИмени = СтрЗаменить(ШаблонИмени, "[ПрефиксИБИсточника]",ПрефиксИБИсточника); ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелОтправитель]", КодУзлаОтправителя); ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелПолучатель]", КодУзлаПолучателя); @@ -5705,12 +5937,7 @@ // Возвращаемое значение: Булево. // Функция ЭтоПланОбменаXDTO(ПланОбмена) Экспорт - Если ТипЗнч(ПланОбмена) = Тип("Строка") Тогда - ИмяПланаОбмена = ПланОбмена; - Иначе - ИмяПланаОбмена = ПланОбмена.Метаданные().Имя; - КонецЕсли; - Возврат ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ЭтоПланОбменаXDTO"); + Возврат ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ПланОбмена); КонецФункции // Функция-свойство: возвращает литерал обозначения строки неограниченной длины. @@ -5830,7 +6057,11 @@ КонецПроцедуры -Процедура ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена) +Процедура ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена, ИспользоватьПсевдоним = Истина, СтекОшибок = Неопределено) + + Если СтекОшибок = Неопределено Тогда + СтекОшибок = Новый Массив; + КонецЕсли; // Получаем инициализированную обработку транспорта сообщений. ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; @@ -5839,12 +6070,48 @@ Если Не ОбработкаТранспортаСообщенийОбмена.ПодключениеУстановлено() Или Не ОбработкаТранспортаСообщенийОбмена.ПолучитьСообщение() Тогда - ЗаписьЖурналаРегистрацииОбменаДанными(ОбработкаТранспортаСообщенийОбмена.СтрокаСообщенияОбОшибкеЖР, СтруктураНастроекОбмена, Истина); + СтекОшибок.Добавить(ОбработкаТранспортаСообщенийОбмена.СтрокаСообщенияОбОшибкеЖР); + + Если Не ИспользоватьПсевдоним Тогда + // Больше попыток поиска файла не будет, поэтому регистрируем все накопленные ошибки. + Для Каждого ТекущаяОшибка Из СтекОшибок Цикл + ЗаписьЖурналаРегистрацииОбменаДанными(ТекущаяОшибка, СтруктураНастроекОбмена, Истина); + КонецЦикла; + КонецЕсли; СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; КонецЕсли; + Если ИспользоватьПсевдоним + И СтруктураНастроекОбмена.РезультатВыполненияОбмена <> Неопределено Тогда + // Возможно, сообщение удастся получить если применить виртуальный код узла (псевдоним). + + Транслитерация = Неопределено; + Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда + СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("FILEТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); + ИначеЕсли СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда + СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("EMAILТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); + ИначеЕсли СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("FTPТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); + КонецЕсли; + Транслитерация = ?(Транслитерация = Неопределено, Ложь, Транслитерация); + + ШаблонИмениФайлаСтарый = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения; + СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения( + СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, + СтруктураНастроекОбмена.УзелИнформационнойБазы, + Ложь, + Транслитерация, + Истина); + Если ШаблонИмениФайлаСтарый <> СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения Тогда + // Попытка повторного выполнения транспорта с новым шаблоном. + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; + ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена, Ложь, СтекОшибок); + КонецЕсли; + + КонецЕсли; + КонецПроцедуры Процедура ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена) @@ -6139,14 +6406,13 @@ Попытка Результат = Прокси.FileExists(ИмяВременногоФайла); Исключение - ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Попытка УдалитьФайлы(ПолноеИмяВременногоФайла); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - ВызватьИсключение ПодробноеПредставлениеОшибки; + ВызватьИсключение; КонецПопытки; Попытка @@ -6614,17 +6880,15 @@ #Область ОберткиДляРаботыСПрограммнымИнтерфейсомМенеджераПланаОбмена Функция НастройкаОтборовНаУзле(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт - Если ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; - - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзле(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиУзла"; + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, + ИдентификаторНастройки, ВерсияКорреспондента); + ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыОтборов; + Результат = Неопределено; + Если ЗначениеЗаполнено(ОписаниеВариантаНастройки.Отборы) Тогда + Результат = ОписаниеВариантаНастройки.Отборы; КонецЕсли; Если Результат = Неопределено Тогда @@ -6639,13 +6903,13 @@ Если ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; - - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].ЗначенияПоУмолчаниюНаУзле(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиЗначенийПоУмолчанию"; + НастройкиПланаОбмена = ОбменДаннымиПовтИсп.НастройкиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента); + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, + ИдентификаторНастройки, ВерсияКорреспондента); + ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыЗначенийПоУмолчанию; + Результат = Неопределено; + Если ЗначениеЗаполнено(ОписаниеВариантаНастройки.ЗначенияПоУмолчанию) Тогда + Результат = ОписаниеВариантаНастройки.ЗначенияПоУмолчанию; КонецЕсли; Если Результат = Неопределено Тогда @@ -6656,9 +6920,11 @@ КонецФункции -Функция ОписаниеОграниченийПередачиДанных(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда +Функция ОписаниеОграниченийПередачиДанных(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, + ИдентификаторНастройки = "") Экспорт + Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ОписаниеОграниченийПередачиДанных", ИмяПланаОбмена) Тогда + Возврат ""; + ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; @@ -6666,9 +6932,11 @@ КонецФункции -Функция ОписаниеЗначенийПоУмолчанию(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда +Функция ОписаниеЗначенийПоУмолчанию(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, + ИдентификаторНастройки = "") Экспорт + Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ОписаниеЗначенийПоУмолчанию",ИмяПланаОбмена) Тогда + Возврат ""; + ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; @@ -6676,35 +6944,36 @@ КонецФункции -Функция ОбщиеДанныеУзлов(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "") Экспорт +Функция ОбщиеДанныеУзлов(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, Знач ИдентификаторНастройки, + ИмяФормы = "") Экспорт Если ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].ОбщиеДанныеУзлов(ВерсияКорреспондента, ИмяФормы); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиУзлов"; - КонецЕсли; + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, + ИдентификаторНастройки, ВерсияКорреспондента); + ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыОбщиеДанныеУзлов; + + Результат = ОписаниеВариантаНастройки.ОбщиеДанныеУзлов; Возврат СтрЗаменить(Результат, " ", ""); КонецФункции -Функция НастройкаОтборовНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт +Функция НастройкаОтборовНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, + ИмяФормы = "", ИдентификаторНастройки = "") Экспорт Если ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; - - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиУзлаБазыКорреспондента"; + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, + ИдентификаторНастройки, ВерсияКорреспондента); + ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыОтборовКорреспондента; + + Результат = Неопределено; + + Если ЗначениеЗаполнено(ОписаниеВариантаНастройки.ОтборыКорреспондента) Тогда + Результат = ОписаниеВариантаНастройки.ОтборыКорреспондента; КонецЕсли; Если Результат = Неопределено Тогда @@ -6714,18 +6983,18 @@ Возврат Результат; КонецФункции -Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт +Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, + ИмяФормы = "", ИдентификаторНастройки = "") Экспорт Если ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; - - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента"; + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, + ИдентификаторНастройки, ВерсияКорреспондента); + ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыЗначенийПоУмолчаниюКорреспондента; + Результат = Неопределено; + Если ЗначениеЗаполнено(ОписаниеВариантаНастройки.ЗначенияПоУмолчаниюКорреспондента) Тогда + Результат = ОписаниеВариантаНастройки.ЗначенияПоУмолчаниюКорреспондента; КонецЕсли; Если Результат = Неопределено Тогда @@ -6736,8 +7005,9 @@ КонецФункции Функция ОписаниеОграниченийПередачиДанныхБазыКорреспондента(Знач ИмяПланаОбмена, Знач НастройкаОтборовНаУзле, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда + Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ОписаниеОграниченийПередачиДанныхБазыКорреспондента", ИмяПланаОбмена) Тогда + Возврат ""; + ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; @@ -6746,8 +7016,9 @@ КонецФункции Функция ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(Знач ИмяПланаОбмена, Знач ЗначенияПоУмолчаниюНаУзле, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда + Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ОписаниеЗначенийПоУмолчаниюБазыКорреспондента", ИмяПланаОбмена) Тогда + Возврат ""; + ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; @@ -6755,19 +7026,10 @@ КонецФункции -Функция ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента) Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Возврат ПланыОбмена[ИмяПланаОбмена].ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(ВерсияКорреспондента); - -КонецФункции - Процедура ПриПодключенииККорреспонденту(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента) Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда + Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ПриПодключенииККорреспонденту", ИмяПланаОбмена) Тогда + Возврат; + ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; @@ -6775,6 +7037,92 @@ КонецПроцедуры +// Заполняет настройки для плана обмена, которые далее используются подсистемой обмена данными. +// Параметры: +// ИмяПланаОбмена - Строка - Имя плана обмена. +// ВерсияКорреспондента - Строка - Версия конфигурации-корреспондента. +// ИмяКорреспондента - Строка - Имя конфигурации корреспондента. +// КорреспондентВМоделиСервиса - Булево или Неопределено - Признак того, что корреспондент находится в модели сервиса. +// Возвращаемое значение: +// Структура - подробнее см. комментарий к функции НастройкиПланаОбменаПоУмолчанию. +Функция НастройкиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента, ИмяКорреспондента, КорреспондентВМоделиСервиса) Экспорт + НастройкиПланаОбмена = НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена); + УстановитьПривилегированныйРежим(Истина); + ПланыОбмена[ИмяПланаОбмена].ПриПолученииНастроек(НастройкиПланаОбмена); + ЕстьОбработчикПолученияВариантов = НастройкиПланаОбмена.Алгоритмы.ПриПолученииВариантовНастроекОбмена; + // Требуется инициализация вариантов. + Если ЕстьОбработчикПолученияВариантов Тогда + ПараметрыОтбора = ПараметрыКонтекстаПолученияВариантовНастроек(ИмяКорреспондента, ВерсияКорреспондента, КорреспондентВМоделиСервиса); + ПланыОбмена[ИмяПланаОбмена].ПриПолученииВариантовНастроекОбмена(НастройкиПланаОбмена.ВариантыНастроекОбмена, ПараметрыОтбора); + Иначе + // Варианты не используются - следует добавить служебный вариант. + ВариантНастройки = НастройкиПланаОбмена.ВариантыНастроекОбмена.Добавить(); + ВариантНастройки.ИдентификаторНастройки = ""; + ВариантНастройки.КорреспондентВМоделиСервиса = ОбщегоНазначения.РазделениеВключено() + И НастройкиПланаОбмена.ПланОбменаИспользуетсяВМоделиСервиса; + ВариантНастройки.КорреспондентВЛокальномРежиме = Истина; + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + + Возврат НастройкиПланаОбмена; +КонецФункции + +// Предназначена для подготовки структуры, для последующей передачи в обработчик получения вариантов настроек. +// Параметры: +// ИмяКорреспондента - Строка - имя конфигурации-корреспондента. +// ВерсияКорреспондента - Строка - версия конфигурации-корреспондента. +// КорреспондентВМоделиСервиса - Булево или Неопределено - признак того, что корреспондент находится в модели сервиса. +// Возвращаемое значение: Структура. +Функция ПараметрыКонтекстаПолученияВариантовНастроек(ИмяКорреспондента, ВерсияКорреспондента, КорреспондентВМоделиСервиса) + Возврат Новый Структура("ИмяКорреспондента, ВерсияКорреспондента, КорреспондентВМоделиСервиса", + ИмяКорреспондента, ВерсияКорреспондента, КорреспондентВМоделиСервиса); +КонецФункции + +// Заполняет настройки, относящиеся к варианту настройки обмена, которые далее используются подсистемой обмена данными. +// Параметры: +// ИмяПланаОбмена - Строка - Имя плана обмена. +// ИдентификаторНастройки - Строка - Идентификатор варианта настройки обмена. +// ВерсияКорреспондента - Строка - Версия конфигурации-корреспондента. +// ИмяКорреспондента - Строка - Имя конфигурации корреспондента. +// Возвращаемое значение: +// Структура - подробнее см. комментарий к функции ОписаниеВариантаНастройкиОбменаПоУмолчанию. +Функция ОписаниеВариантаНастройки(ИмяПланаОбмена, ИдентификаторНастройки, + ВерсияКорреспондента, ИмяКорреспондента) Экспорт + ОписаниеВариантаНастройки = ОписаниеВариантаНастройкиОбменаПоУмолчанию(ИмяПланаОбмена); + ЕстьОбработчикОписанияВарианта = ЕстьАлгоритмМенеджераПланаОбмена("ПриПолученииОписанияВариантаНастройки", ИмяПланаОбмена); + Если ЕстьОбработчикОписанияВарианта Тогда + ПараметрыВарианта = ПараметрыКонтекстаПолученияОписанияВариантаНастройки(ИмяКорреспондента, ВерсияКорреспондента); + ПланыОбмена[ИмяПланаОбмена].ПриПолученииОписанияВариантаНастройки( + ОписаниеВариантаНастройки, ИдентификаторНастройки, ПараметрыВарианта); + КонецЕсли; + Возврат ОписаниеВариантаНастройки; +КонецФункции + +// Предназначена для подготовки структуры, для последующей передачи в обработчик получения описания варианта. +// Параметры: +// ИмяКорреспондента - Строка - имя конфигурации-корреспондента. +// ВерсияКорреспондента - Строка - версия конфигурации-корреспондента. +// Возвращаемое значение: Структура. +Функция ПараметрыКонтекстаПолученияОписанияВариантаНастройки(ИмяКорреспондента, ВерсияКорреспондента) + Возврат Новый Структура("ВерсияКорреспондента, ИмяКорреспондента", + ВерсияКорреспондента,ИмяКорреспондента); +КонецФункции + +// Возвращает признак, предусмотрен ли указанная процедура / функция в модуле менеджера плана обмена. +// Вычисляется по настройкам плана обмена, свойство Алгоритмы (см. комментарий НастройкиПланаОбменаПоУмолчанию). +// Параметры: +// ИмяАлгоритма - Строка - Имя процедуры / функции. +// ИмяПланаОбмена - Строка - Имя плана обмена. +// Возвращаемое значение: +// Булево. +// +Функция ЕстьАлгоритмМенеджераПланаОбмена(ИмяАлгоритма, ИмяПланаОбмена) Экспорт + НастройкиПланаОбмена = ОбменДаннымиПовтИсп.НастройкиПланаОбмена(ИмяПланаОбмена); + АлгоритмыМодуля = НастройкиПланаОбмена.Алгоритмы; + АлгоритмНайден = Неопределено; + АлгоритмыМодуля.Свойство(ИмяАлгоритма, АлгоритмНайден); + Возврат (АлгоритмНайден = Истина); +КонецФункции #КонецОбласти #Область РаботаСПаролямиСинхронизацииДанных @@ -7258,7 +7606,7 @@ Настройка = ЗначенияНастроекОтборовНаУзле(УзелИнформационнойБазы, ВерсияКорреспондента); ОписаниеПравилСинхронизацииДанных = ОписаниеОграниченийПередачиДанных( - ИмяПланаОбмена, Настройка, ВерсияКорреспондента, СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); + ИмяПланаОбмена, Настройка, ВерсияКорреспондента,СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); УстановитьПривилегированныйРежим(Ложь); @@ -7274,7 +7622,8 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, ВерсияКорреспондента, , СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); + НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, ВерсияКорреспондента,, + СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); Для Каждого Настройка Из НастройкаОтборовНаУзле Цикл @@ -7904,7 +8253,7 @@ Функция ОбработкаОбменаДаннымиДляВыгрузки(СтруктураНастроекОбмена) - МенеджерОбработки = ?(ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.УзелИнформационнойБазы), + МенеджерОбработки = ?(ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.УзелИнформационнойБазы), Обработки.КонвертацияОбъектовXDTO, Обработки.КонвертацияОбъектовИнформационныхБаз); @@ -7934,7 +8283,7 @@ Функция ОбработкаОбменаДаннымиДляЗагрузки(СтруктураНастроекОбмена) - МенеджерОбработки = ?(ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.УзелИнформационнойБазы), + МенеджерОбработки = ?(ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.УзелИнформационнойБазы), Обработки.КонвертацияОбъектовXDTO, Обработки.КонвертацияОбъектовИнформационныхБаз); @@ -8177,23 +8526,89 @@ КонецПроцедуры -Функция ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, ЭтоИсходящееСообщение, Транслитерация = Ложь) +Функция ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, ЭтоИсходящееСообщение, Транслитерация = Ложь, ИспользоватьВиртуальныйКодУзлаПриПолучении = Ложь) УзелОтправитель = ?(ЭтоИсходящееСообщение, ТекущийУзелПланаОбмена, УзелИнформационнойБазы); УзелПолучатель = ?(ЭтоИсходящееСообщение, УзелИнформационнойБазы, ТекущийУзелПланаОбмена); - // Учитываем настройку транслитерации для узла плана обмена. - КодОтправителя = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОтправитель, "Код")); + КодОтправителя = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОтправитель, "Код")); КодПолучателя = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелПолучатель, "Код")); + Если ЭтоИсходящееСообщение Или ИспользоватьВиртуальныйКодУзлаПриПолучении Тогда + // Обмен с корреспондентом, который не знаком с новым кодом предопределенного узла - + // при формировании имени файла сообщения обмена вместо кода предопределенного узла используется код из регистра. + ПсевдонимПредопределенногоУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда + Если ЭтоИсходящееСообщение Тогда + КодОтправителя = ПсевдонимПредопределенногоУзла; + Иначе + КодПолучателя = ПсевдонимПредопределенногоУзла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Учитываем настройку транслитерации для узла плана обмена. Если Транслитерация Тогда КодОтправителя = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(КодОтправителя); КодПолучателя = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(КодПолучателя); КонецЕсли; - Возврат ИмяФайлаСообщенияОбмена(КодОтправителя, КодПолучателя); + Возврат ИмяФайлаСообщенияОбмена(КодОтправителя, КодПолучателя, ЭтоИсходящееСообщение); КонецФункции +Функция ПсевдонимПредопределенногоУзла(УзелКорреспондента) Экспорт + Если Не ЭтоПланОбменаXDTO(УзелКорреспондента) Тогда + Возврат ""; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КодУзла + |ИЗ РегистрСведений.ПсевдонимыПредопределенныхУзлов + |ГДЕ Корреспондент = &УзелИнформационнойБазы"; + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелКорреспондента); + ПсевдонимПредопределенногоУзла = ""; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ПсевдонимПредопределенногоУзла = СокрЛП(Выборка.КодУзла); + КонецЕсли; + Возврат ПсевдонимПредопределенногоУзла; +КонецФункции + +Процедура ПроверитьКодыУзлов(РезультатАнализаДанныхКЗагрузке, УзелИнформационнойБазы) Экспорт + Если НЕ ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда + Возврат; + КонецЕсли; + + КодУзлаИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы,"Код"); + Если ЗначениеЗаполнено(РезультатАнализаДанныхКЗагрузке.NewFrom) Тогда + УзелКорреспондентаПерекодирован = (КодУзлаИБ = РезультатАнализаДанныхКЗагрузке.NewFrom); + Если НЕ УзелКорреспондентаПерекодирован + И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(УзелИнформационнойБазы) Тогда + УзелОбменаОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); + УзелОбменаОбъект.Код = РезультатАнализаДанныхКЗагрузке.NewFrom; + УзелОбменаОбъект.ОбменДанными.Загрузка = Истина; + УзелОбменаОбъект.Записать(); + УзелКорреспондентаПерекодирован = Истина; + КонецЕсли; + Иначе + УзелКорреспондентаПерекодирован = Истина; + КонецЕсли; + Если УзелКорреспондентаПерекодирован Тогда + ПсевдонимПредопределенногоУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) + И РезультатАнализаДанныхКЗагрузке.КорреспондентПоддерживаетИдентификаторОбменаДанными Тогда + // Возможно, пора удалить запись. Проверка секции To. + ИмяПланаОбмена = УзелИнформационнойБазы.Метаданные().Имя; + КодПредопределенногоУзла = КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + Если СокрЛП(КодПредопределенногоУзла) = РезультатАнализаДанныхКЗагрузке.To Тогда + УдалитьНаборЗаписейВРегистреСведений(Новый Структура("УзелИнформационнойБазы", УзелИнформационнойБазы), + "ПсевдонимыПредопределенныхУзлов"); + КонецЕсли; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область РаботаСМониторомПроблемОбменаДанными @@ -10265,9 +10680,10 @@ КонецЕсли; Отказ = Ложь; - - УстановитьПривилегированныйРежим(Истина); - ПланыОбмена[ИмяПланаОбмена].ОбработчикПроверкиПараметровУчета(Отказ, Корреспондент, СообщениеОбОшибке); + Если ЕстьАлгоритмМенеджераПланаОбмена("ОбработчикПроверкиПараметровУчета", ИмяПланаОбмена) Тогда + УстановитьПривилегированныйРежим(Истина); + ПланыОбмена[ИмяПланаОбмена].ОбработчикПроверкиПараметровУчета(Отказ, Корреспондент, СообщениеОбОшибке); + КонецЕсли; Возврат Не Отказ; КонецФункции @@ -10428,6 +10844,8 @@ Результат.Вставить("НастройкиПараметровУчетаЗаданы"); Результат.Вставить("КодЭтогоУзла"); Результат.Вставить("ВерсияКонфигурации"); // Начиная с версии БСП 2.1.5.1. + Результат.Вставить("УзелСуществует"); // Начиная с версии БСП 2.4.2(?). + Результат.ПланОбменаСуществует = (Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) <> Неопределено); @@ -10441,7 +10859,14 @@ Результат.ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); Результат.ПрефиксИнформационнойБазыПоУмолчанию = ПрефиксИнформационнойБазы; Результат.НаименованиеИнформационнойБазы = СвойстваЭтогоУзла.Наименование; - Результат.НастройкиПараметровУчетаЗаданы = НастройкиПараметровУчетаВСистемеУстановлены(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + Результат.УзелСуществует = ?(ЗначениеЗаполнено(КодУзла), + ЗначениеЗаполнено(ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла)) + , Ложь); + Если Результат.УзелСуществует Тогда + Результат.НастройкиПараметровУчетаЗаданы = НастройкиПараметровУчетаВСистемеУстановлены(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + Иначе + Результат.НастройкиПараметровУчетаЗаданы = Ложь; + КонецЕсли; Результат.КодЭтогоУзла = СвойстваЭтогоУзла.Код; Результат.ВерсияКонфигурации = Метаданные.Версия; @@ -10896,7 +11321,7 @@ СообщениеПользователю); Если НЕ ЕстьПодключение Тогда - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(Корреспондент) Тогда + Если ЭтоПланОбменаXDTO(Корреспондент) Тогда ИмяПланаОбменаСтаройНастройки = ""; ВариантНастройки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "ВариантНастройки"); ИмяПланаОбменаСтаройНастройки = @@ -12135,7 +12560,7 @@ Для Каждого Движение Из МетаданныеДокумента.Движения Цикл // В запросе получаем имена регистров, по которым есть хотя бы одно движение. // Например, - // ВЫБРАТЬ ПЕРВЫЕ 1 "РегистрНакопления.ТоварыНаСкладах" + // ВЫБРАТЬ Первые 1 "РегистрНакопления.ТоварыНаСкладах" // ИЗ РегистрНакопления.ТоварыНаСкладах // ГДЕ Регистратор = &Регистратор. @@ -12157,7 +12582,7 @@ Запрос = Новый Запрос(ТекстЗапроса); ЗАпрос.УстановитьПараметр("Регистратор", ДокументСсылка); - // При выгрузке для колонки «Имя» тип устанавливается по самой длинной строке из запроса + // При выгрузке для колонки "Имя" тип устанавливается по самой длинной строке из запроса // при втором проходе по таблице новое имя может не «влезть», по этому сразу в запросе // приводится к строка(200). ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); @@ -12196,104 +12621,85 @@ КонецФункции // Определяет настройки по умолчанию для плана обмена, которые затем могут быть переопределены -// в модуле менеджера плана обмена в функции ОпределитьНастройки(). +// в модуле менеджера плана обмена в процедуре ПриПолученииНастроек(). // // Возвращаемое значение: // Структура - содержит поля: -// * ПредупреждатьОНесоответствииВерсийПравилОбмена - Булево - Признак необходимости проверки на -// расхождение версий в правилах конвертации. -// Проверка выполняется при загрузке комплекта -// правил, при отправке данных и при получении -// данных. -// * ПутьКФайлуКомплектаПравилНаПользовательскомСайте - Строка - Содержит путь к файлу комплекта правил в -// виде архива на пользовательском сайте в -// разделе конфигурации. -// * ПутьКФайлуКомплектаПравилВКаталогеШаблонов - Строка - Содержит относительный путь к файлу -// комплекта правил в каталоге шаблонов -// 1С:Предприятия. -// * ЗаголовокКомандыДляСозданияНовогоОбменаДанными - Строка - Содержит представление команды, выводимое в -// пользовательском интерфейсе при создании -// новой настройки обмена данными. -// * ЗаголовокПомощникаСозданияОбмена - Строка - Содержит представление заголовка формы -// помощника создания обмена данными выводимое -// в пользовательском интерфейсе. -// * ИмяПланаОбменаДляПереходаНаНовыйОбмен - Строка - Если для плана обмена свойство установлено, в -// рабочих местах управления настройками не будет -// предлагаться настроить этот вид обмена. -// Существующие обмены этого вида будут продолжать -// отображаться в списке настроенных обменов. -// Получении сообщения обмена в новом формате будет -// инициировать переход на новый вид обмена. -// * НаименованиеКонфигурацииКорреспондента - Строка - Содержит представление наименования -// конфигурации корреспондента выводимое в -// пользовательском интерфейсе. -// * ЗаголовокУзлаПланаОбмена - Строка - Содержит представление узла плана обмена -// выводимое в пользовательском интерфейсе. -// * ВариантыНастроекОбмена - Массив - Список возможных настроек плана обмена. -// Используется для создания заготовленных -// шаблонов с заполненным настройками планов -// обмена. -// * ОтображатьНастройкуОтборовНаУзле - Булево - Признак отображения настроек отборов на узле -// в помощнике создания обмена. -// * ОтображатьЗначенияПоУмолчаниюНаУзле - Булево - Признак отображения значений по умолчанию в -// помощнике создания обмена. -// * ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента - Булево - Признак отображения настроек отборов на узле -// базы-корреспондента в помощнике создания -// обмена. -// * ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента - Булево - Признак отображения значений по умолчанию -// базы-корреспондента в помощнике создания -// обмена. -// * ВидГруппыДляВариантовНастроек - ВидГруппыФормы - вариант вида группы для отображения в -// дереве команд создания обмена вариантов настроек. -// * НазначениеПланаОбмена - Строка - Вариант назначения плана обмена. -// * ОписанияВариантовНастроекОбмена - ТаблицаЗначений - определяет порядок использования вариантов -// настроек обмена в зависимости от вида корреспондента: -// *ИдентификаторНастройки - Строка - выбирается из -// перечня, заданного в ВариантыНастроекОбмена. -// *ИмяКорреспондента - Строка - выбирается исходя из -// значения, заданного в функции ИмяКонфигурацииИсточника -// модуля менеджера плана обмена на стороне корреспондента. -// В случае, если параметр не заполнен, функциональность -// вариантов настроек плана обмена при настройке -// синхронизации с другим приложением в сервисе -// не используется. +// * ВариантыНастроекОбмена - ТаблицаЗначений - Возможные настройки плана обмена. +// Используется для для создания заготовленных +// шаблонов с заполненным настройками планов обмена +// * ВидГруппыДляВариантовНастроек - ВидГруппыФормы - вариант вида группы для отображения в +// дереве команд создания обмена вариантов настроек. +// * ИмяКонфигурацииИсточника - Строка - Имя конфигурации источника, выводимое в +// пользовательском интерфейсе. +// * ВерсииФорматаОбмена - Структура - Соответствие номеров поддерживаемых версий формата +// и ссылок на общие модули с логикой обмена через формат. +// Используется только для обменов через универсальный формат. +// * ФорматОбмена - Строка - Пространство имен XDTO пакета, в котором содержится +// универсальный формат, без указания версии формата. +// Используется только для обменов через универсальный формат. +// * ПланОбменаИспользуетсяВМоделиСервиса - Булево - Признак использования плана обмена для организации +// обмена в модели сервиса. +// * ЭтоПланОбменаXDTO - Булево - Признак того, что это план обмена через +// универсальный формат. +// * ПредупреждатьОНесоответствииВерсийПравилОбмена - Булево - Признак необходимости проверки на +// расхождение версий в правилах конвертации. +// Проверка выполняется при загрузке комплекта +// правил, при отправке данных и при получении данных. +// * ИмяПланаОбменаДляПереходаНаНовыйОбмен - Строка - Если для плана обмена свойство установлено, в +// рабочих местах управления настройками не будет +// предлагаться настроить этот вид обмена. +// Существующие обмены этого вида будут продолжать +// отображаться в списке настроенных обменов. +// Получении сообщения обмена в новом формате будет +// инициировать переход на новый вид обмена. +// * НазначениеПланаОбмена - Строка - Вариант назначения плана обмена. +// * Алгоритмы - Структура - Перечень экспортных процедур и функций, которые +// объявлены в модуле менеджера плана обмена +// и используются подсистемой обмена данными. // Функция НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена) // Получаем значения по умолчанию для плана обмена. МетаданныеПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена]; - ЗаголовокФормыПомощника = НСтр("ru='Синхронизация данных с %Программа% (настройка)'"); - ЗаголовокФормыПомощника = СтрЗаменить(ЗаголовокФормыПомощника, "%Программа%", МетаданныеПланаОбмена.Синоним); + ВариантыНастроекОбмена = Новый ТаблицаЗначений; + ВариантыНастроекОбмена.Колонки.Добавить("ИдентификаторНастройки", Новый ОписаниеТипов("Строка")); + ВариантыНастроекОбмена.Колонки.Добавить("КорреспондентВМоделиСервиса", Новый ОписаниеТипов("Булево")); + ВариантыНастроекОбмена.Колонки.Добавить("КорреспондентВЛокальномРежиме", Новый ОписаниеТипов("Булево")); Параметры = Новый Структура; - - Параметры.Вставить("ПредупреждатьОНесоответствииВерсийПравилОбмена", Истина); - Параметры.Вставить("ПутьКФайлуКомплектаПравилНаПользовательскомСайте", ""); - Параметры.Вставить("ПутьКФайлуКомплектаПравилВКаталогеШаблонов", ""); - Параметры.Вставить("ЗаголовокКомандыДляСозданияНовогоОбменаДанными", МетаданныеПланаОбмена.Синоним); - Параметры.Вставить("ЗаголовокПомощникаСозданияОбмена", ЗаголовокФормыПомощника); - Параметры.Вставить("ИмяПланаОбменаДляПереходаНаНовыйОбмен", ""); - Параметры.Вставить("НаименованиеКонфигурацииКорреспондента", МетаданныеПланаОбмена.Синоним); - Параметры.Вставить("ЗаголовокУзлаПланаОбмена", МетаданныеПланаОбмена.Синоним); - Параметры.Вставить("ВариантыНастроекОбмена", Новый Массив()); - Параметры.Вставить("ОтображатьНастройкуОтборовНаУзле", Истина); - Параметры.Вставить("ОтображатьЗначенияПоУмолчаниюНаУзле", Истина); - Параметры.Вставить("ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента", Истина); - Параметры.Вставить("ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента", Истина); - Параметры.Вставить("ЭтоПланОбменаXDTO", Ложь); - Параметры.Вставить("ВидГруппыДляВариантовНастроек", ВидГруппыФормы.Подменю); + Параметры.Вставить("ВариантыНастроекОбмена", ВариантыНастроекОбмена); + Параметры.Вставить("ВидГруппыДляВариантовНастроек", ВидГруппыФормы.Подменю); + Параметры.Вставить("ИмяКонфигурацииИсточника", ""); + Параметры.Вставить("ВерсииФорматаОбмена", Новый Структура); + Параметры.Вставить("ФорматОбмена", ""); + Параметры.Вставить("ПланОбменаИспользуетсяВМоделиСервиса", Ложь); + Параметры.Вставить("ЭтоПланОбменаXDTO", Ложь); + Параметры.Вставить("ИмяПланаОбменаДляПереходаНаНовыйОбмен", ""); + Параметры.Вставить("ПредупреждатьОНесоответствииВерсийПравилОбмена", Истина); Параметры.Вставить("НазначениеПланаОбмена", ?(МетаданныеПланаОбмена.РаспределеннаяИнформационнаяБаза, "РИБ", "СинхронизацияСДругойПрограммой")); + Алгоритмы = Новый Структура(); + Алгоритмы.Вставить("ПриПолученииВариантовНастроекОбмена", Ложь); + Алгоритмы.Вставить("ПриПолученииОписанияВариантаНастройки", Ложь); - ОписанияВариантовНастроекОбмена = Новый ТаблицаЗначений; - ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка"); - ОписанияВариантовНастроекОбмена.Колонки.Добавить("ИдентификаторНастройки", ОписаниеТиповСтрока); - ОписанияВариантовНастроекОбмена.Колонки.Добавить("ИмяКорреспондента", ОписаниеТиповСтрока); - Параметры.Вставить("ОписанияВариантовНастроекОбмена", ОписанияВариантовНастроекОбмена); + Алгоритмы.Вставить("ОписаниеОграниченийПередачиДанных", Ложь); + Алгоритмы.Вставить("ОписаниеОграниченийПередачиДанныхБазыКорреспондента", Ложь); + Алгоритмы.Вставить("ОписаниеЗначенийПоУмолчанию", Ложь); + Алгоритмы.Вставить("ОписаниеЗначенийПоУмолчаниюБазыКорреспондента", Ложь); + Алгоритмы.Вставить("ПредставлениеОтбораИнтерактивнойВыгрузки", Ложь); + Алгоритмы.Вставить("НастроитьИнтерактивнуюВыгрузку", Ложь); + Алгоритмы.Вставить("НастроитьИнтерактивнуюВыгрузкуВМоделиСервиса", Ложь); + + Алгоритмы.Вставить("ОбработчикПроверкиПараметровУчета", Ложь); + Алгоритмы.Вставить("ПриПодключенииККорреспонденту", Ложь); + Алгоритмы.Вставить("ПриПолученииДанныхОтправителя", Ложь); + Алгоритмы.Вставить("ПриОтправкеДанныхОтправителя", Ложь); + + Параметры.Вставить("Алгоритмы", Алгоритмы); Возврат Параметры; - КонецФункции // Получает дерево метаданных конфигурации с заданным отбором по объектам метаданных. @@ -12413,6 +12819,125 @@ КонецПроцедуры +// Определяет настройки по умолчанию варианта настройки обмена, которые затем могут быть переопределены +// в модуле менеджера плана обмена в процедуре ПриПолученииОписанияВариантаНастройки(). +// Параметры: +// ИмяПланаОбмена - Строка - содержит имя плана обмена. +// +// Возвращаемое значение: +// Структура - содержит поля: +// * Отборы - Структура - Отборы на узле плана обмена, +// подлежат заполнению значениями по умолчанию. +// * ЗначенияПоУмолчанию - Структура - Значения по умолчанию на узле плана обмена. +// * ОтборыКорреспондента - Структура - Отборы на узле плана обмена, подлежат заполнению +// значениями по умолчанию для базы корреспондента. +// * ЗначенияПоУмолчанию - Структура - Значения по умолчанию на узле плана обмена. +// * ЗначенияПоУмолчаниюКорреспондента - Структура - Значения по умолчанию на узле для базы корреспондента. +// * ОбщиеДанныеУзлов - Строка - Имена реквизитов и табличных частей плана обмена, +// через запятую, которые являются общими для пары +// обменивающихся конфигураций. +// * ИмяФормыОтборов - Строка - Имя используемой формы настройки отборов на узле. +// * ИмяФормыЗначенийПоУмолчанию - Строка - Имя используемой формы значений по умолчанию +// на узле. +// * ИмяФормыОтборовКорреспондента - Строка - Имя используемой формы настройки отборов на +// узле базы корреспондента. +// * ИмяФормыЗначенийПоУмолчаниюКорреспондента - Строка - Имя используемой формы значений по умолчанию +// на узле базы корреспондента. +// * ИмяФормыОбщиеДанныеУзлов - Строка - Имя используемой формы настроек узлов. +// * ИмяФайлаНастроекДляПриемника - Строка - Имя файла по умолчанию для сохранения +// настроек синхронизации. +// * ИспользоватьПомощникСозданияОбменаДанными - Булево - Признак, будет ли использоваться помощник для +// создания новых узлов плана обмена. +// * ИмяФормыСозданияНачальногоОбраза - Строка - Имя используемой формы создания начального +// образа распределенной ИБ. +// * ДополнительныеДанныеДляКорреспондента - Структура - дополнительные данные, которые будут +// использованы в базе-корреспонденте при +// настройке обмена. Могут быть использованы в обработчике +// ПриСозданииНаСервере в форме настройки узла +// плана обмена ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента +// * ПояснениеДляНастройкиПараметровУчета - Строка - Пояснение о последовательности действий пользователя +// для настройки параметров учета в текущей +// информационной базе. +// * ПояснениеДляНастройкиПараметровУчетаКорреспондента - Строка - Пояснение о последовательности действий пользователя +// для настройки параметров учета в базе корреспонденте. +// * ПутьКФайлуКомплектаПравилНаПользовательскомСайте - Строка - Путь к файлу комплекта правил в виде архива +// на пользовательском сайте в разделе конфигурации. +// * ПутьКФайлуКомплектаПравилВКаталогеШаблонов - Строка - Относительный путь к файлу комплекта правил в +// каталоге шаблонов +// * ЗаголовокКомандыДляСозданияНовогоОбменаДанными - Строка - Представление команды, выводимое в пользовательском +// интерфейсе при создании новой настройки +// обмена данными +// * ЗаголовокПомощникаСозданияОбмена - Строка - Представление заголовка формы помощника +// создания обмена данными выводимое в +// пользовательском интерфейсе. +// * НаименованиеКонфигурацииКорреспондента - Строка - Представление наименования конфигурации корреспондента +// выводимое в пользовательском интерфейсе. +// * ЗаголовокУзлаПланаОбмена - Строка - Представление узла плана обмена +// выводимое в пользовательском интерфейсе. +// * ОтображатьНастройкуОтборовНаУзле - Булево - Признак отображения настроек отборов на узле +// в помощнике создания обмена. +// * ОтображатьЗначенияПоУмолчаниюНаУзле - Булево - Признак отображения значений по умолчанию в +// помощнике создания обмена. +// * ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента - Булево - Признак отображения настроек отборов на узле +// базы-корреспондента в помощнике создания обмена +// * ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента - Булево - Признак отображения значений по умолчанию +// базы-корреспондента в помощнике создания обмена +// * ИспользуемыеТранспортыСообщенийОбмена - Массив - Перечень используемых транспортов сообщений. +// Если не заполнен, будут доступны все +// возможные виды транспорта. +// * КраткаяИнформацияПоОбмену - Строка - Краткое описание обмена данными, которое +// выводится на первой странице помощника +// создания обмена. +// * ПодробнаяИнформацияПоОбмену - Строка - ссылка на веб-страницу или полный путь к +// форме внутри конфигурации строкой, для +// отображения в помощнике создания обмена. +// +Функция ОписаниеВариантаНастройкиОбменаПоУмолчанию(ИмяПланаОбмена) + ОписаниеВарианта = Новый Структура; + МетаданныеПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена]; + ЗаголовокФормыПомощника = НСтр("ru='Синхронизация данных с %Программа% (настройка)'"); + ЗаголовокФормыПомощника = СтрЗаменить(ЗаголовокФормыПомощника, "%Программа%", МетаданныеПланаОбмена.Синоним); + + + ОписаниеВарианта.Вставить("Отборы", Новый Структура); + ОписаниеВарианта.Вставить("ЗначенияПоУмолчанию", Новый Структура); + ОписаниеВарианта.Вставить("ОтборыКорреспондента", Новый Структура); + ОписаниеВарианта.Вставить("ЗначенияПоУмолчаниюКорреспондента", Новый Структура); + ОписаниеВарианта.Вставить("ИмяФормыОтборов", "ФормаНастройкиУзла"); + ОписаниеВарианта.Вставить("ИмяФормыЗначенийПоУмолчанию", "ФормаНастройкиЗначенийПоУмолчанию"); + ОписаниеВарианта.Вставить("ИмяФормыОтборовКорреспондента", "ФормаНастройкиУзлаБазыКорреспондента"); + ОписаниеВарианта.Вставить("ИмяФормыЗначенийПоУмолчаниюКорреспондента", "ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента"); + ОписаниеВарианта.Вставить("ИмяФормыОбщиеДанныеУзлов", "ФормаНастройкиУзлов"); + ОписаниеВарианта.Вставить("ИмяФайлаНастроекДляПриемника", ""); + ОписаниеВарианта.Вставить("ИспользоватьПомощникСозданияОбменаДанными", Истина); + ОписаниеВарианта.Вставить("ИмяФормыСозданияНачальногоОбраза", ""); + ОписаниеВарианта.Вставить("ДополнительныеДанныеДляКорреспондента", Новый Структура); + ОписаниеВарианта.Вставить("ПояснениеДляНастройкиПараметровУчета", ""); + ОписаниеВарианта.Вставить("ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента",""); + ОписаниеВарианта.Вставить("ПутьКФайлуКомплектаПравилНаПользовательскомСайте", ""); + ОписаниеВарианта.Вставить("ПутьКФайлуКомплектаПравилВКаталогеШаблонов", ""); + ОписаниеВарианта.Вставить("ЗаголовокКомандыДляСозданияНовогоОбменаДанными", МетаданныеПланаОбмена.Синоним); + ОписаниеВарианта.Вставить("ЗаголовокПомощникаСозданияОбмена", ЗаголовокФормыПомощника); + ОписаниеВарианта.Вставить("ЗаголовокУзлаПланаОбмена", МетаданныеПланаОбмена.Синоним); + ОписаниеВарианта.Вставить("ОтображатьНастройкуОтборовНаУзле", Истина); + ОписаниеВарианта.Вставить("ОтображатьЗначенияПоУмолчаниюНаУзле", Истина); + ОписаниеВарианта.Вставить("ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента", Истина); + ОписаниеВарианта.Вставить("ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента", Истина); + ОписаниеВарианта.Вставить("НаименованиеКонфигурацииКорреспондента", МетаданныеПланаОбмена.Синоним); + ОписаниеВарианта.Вставить("ИспользуемыеТранспортыСообщенийОбмена", Новый Массив); + ОписаниеВарианта.Вставить("КраткаяИнформацияПоОбмену", ""); + ОписаниеВарианта.Вставить("ПодробнаяИнформацияПоОбмену", ""); + ОписаниеВарианта.Вставить("ОбщиеДанныеУзлов", ""); + + Возврат ОписаниеВарианта; +КонецФункции + +Функция КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена) Экспорт + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена), "Код"); +КонецФункции + #КонецОбласти #Область РаботаСКонстантойСообщениеОбменаИзГлавногоУзла @@ -12632,10 +13157,10 @@ КонецЕсли; Если ЕстьСценарийУзла Тогда - - МодульМенеджераУзла = ПланыОбмена[МетаУзел.Имя]; - МодульМенеджераУзла.НастроитьИнтерактивнуюВыгрузку(УзелИнформационнойБазы, Результат.ПараметрыСценарияДополнения); - + Если ЕстьАлгоритмМенеджераПланаОбмена("НастроитьИнтерактивнуюВыгрузку",МетаУзел.Имя) Тогда + МодульМенеджераУзла = ПланыОбмена[МетаУзел.Имя]; + МодульМенеджераУзла.НастроитьИнтерактивнуюВыгрузку(УзелИнформационнойБазы, Результат.ПараметрыСценарияДополнения); + КонецЕсли; КонецЕсли; Результат.Вставить("АдресХранилищаФормы", АдресХранилищаФормы); @@ -12904,6 +13429,9 @@ // Функция ПредставлениеДополненияВыгрузкиПоСценариюУзла(Знач ДополнениеВыгрузки) МетаУзел = ДополнениеВыгрузки.УзелИнформационнойБазы.Метаданные(); + Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ПредставлениеОтбораИнтерактивнойВыгрузки",МетаУзел.Имя) Тогда + Возврат ""; + КонецЕсли; МодульМенеджера = ПланыОбмена[МетаУзел.Имя]; Параметры = Новый Структура; diff --git a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl index 6e652df59..dd11c47cf 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl @@ -429,7 +429,7 @@ КомпонентыОбмена.ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.ВерсияФорматаОбменаПриВыгрузке( КомпонентыОбмена.УзелКорреспондента); КомпонентыОбмена.XMLСхема = ОбменДаннымиXDTOСервер.ФорматОбмена( - КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.ВерсияФорматаОбмена); + ПараметрыWEBСервиса.ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); КомпонентыОбмена.МенеджерОбмена = ОбменДаннымиXDTOСервер.МенеджерОбменаВерсииФормата( КомпонентыОбмена.ВерсияФорматаОбмена, КомпонентыОбмена.УзелКорреспондента); КомпонентыОбмена.ТаблицаПравилаРегистрацииОбъектов = ОбменДаннымиXDTOСервер.ПравилаРегистрацииОбъектов( diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index b65f7ce49..0cebabba0 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -432,7 +432,7 @@ // Для данных, выгружаемых по ссылке, дополнительно заносим сведения в фильтр разрешенных к выгрузке объектов. // Это нужно для того, чтобы данные прошли фильтр при выгрузке и были выгружены в сообщение обмена. - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(Получатель) Тогда + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(Получатель) Тогда ОбменДаннымиXDTOСервер.ДобавитьОбъектВФильтрРазрешенныхОбъектов(Данные.Ссылка, Получатель); Иначе РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьОбъектВФильтрРазрешенныхОбъектов(Данные.Ссылка, Получатель); @@ -1460,7 +1460,7 @@ МассивУзлов = Новый Массив; - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда МассивУзлов = ОбменДаннымиXDTOСервер.МассивУзловДляРегистрацииВыгружатьПриНеобходимости( Ссылка, ИмяПланаОбмена, ИмяРеквизитаФлага); Иначе diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl index a3f9be6ee..533cab0d4 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -126,7 +126,7 @@ ЗаписьСообщения.ПрерватьЗапись(); ЗаписьXML.Закрыть(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; @@ -750,7 +750,7 @@ ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -801,7 +801,7 @@ Отказ = Истина; ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -1377,7 +1377,7 @@ Результат = НоваяТаблицаОбработчиковСообщений(); - ИнтеграцияСтандартныхПодсистем.ПриОпределенииОбработчиковКаналовСообщений(Результат); + ИнтеграцияПодсистемБСП.ПриОпределенииОбработчиковКаналовСообщений(Результат); ОбменСообщениямиПереопределяемый.ПолучитьОбработчикиКаналовСообщений(Результат); diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index 83939aa4b..3e7d2f608 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -32,7 +32,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "2.4.2.164"; + Описание.Версия = "2.4.3.162"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; @@ -57,7 +57,7 @@ // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - ИнтеграцияСтандартныхПодсистем.ПриДобавленииОбработчиковОбновления(Обработчики); + ИнтеграцияПодсистемБСП.ПриДобавленииОбработчиковОбновления(Обработчики); КонецПроцедуры @@ -70,7 +70,7 @@ Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия, Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт - ИнтеграцияСтандартныхПодсистем.ПослеОбновленияИнформационнойБазы(ПредыдущаяВерсия, ТекущаяВерсия, + ИнтеграцияПодсистемБСП.ПослеОбновленияИнформационнойБазы(ПредыдущаяВерсия, ТекущаяВерсия, ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим); КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl index 704f464ff..972895aae 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -320,6 +320,7 @@ Функция ВерсияИБ(Знач ИдентификаторБиблиотеки, Знач ПолучитьВерсиюОбщихДанных = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); + УстановитьОтключениеБезопасногоРежима(Истина); СтандартнаяОбработка = Истина; Результат = ""; @@ -1209,6 +1210,7 @@ Обработчики.Вставить("ВыполняетсяОбновлениеИБ", "ОбновлениеИнформационнойБазыСлужебный.УстановкаПараметровСеанса"); Обработчики.Вставить("ПараметрыОбработчикаОбновления", "ОбновлениеИнформационнойБазыСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ОтмененныеДлительныеОперации", "ДлительныеОперации.УстановкаПараметровСеанса"); КонецПроцедуры @@ -1219,8 +1221,8 @@ КонецПроцедуры -// См. СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. -Процедура СобратьСтатистикуКонфигурации() Экспорт +// См. ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации. +Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда Возврат; @@ -4821,22 +4823,23 @@ Процедура ЗапускРегистрацииДанныхОтложенногоОбновления(Параметры, АдресРезультата) Экспорт - ПараметрыОбработчика = Неопределено; - Пока ЗаполнениеДанныхОтложенногоОбработчикаВФоне(ПараметрыОбработчика, АдресРезультата) Цикл - // Пока есть, что обрабатывать. + ПараметрыОтметкиКОбработке = Неопределено; + ОписаниеПроцедуры = Неопределено; + Пока ЕстьСледующаяПроцедураЗаполнения(ОписаниеПроцедуры) Цикл + ЗаполнитьДанныеОтложенногоОбработчика(ОписаниеПроцедуры, ПараметрыОтметкиКОбработке); КонецЦикла; - Если ПараметрыОбработчика <> Неопределено + Если ПараметрыОтметкиКОбработке <> Неопределено И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - МодульОбменДаннымиСервер.ЗавершитьЗаписьФайлаСДаннымиОбновления(ПараметрыОбработчика); + МодульОбменДаннымиСервер.ЗавершитьЗаписьФайлаСДаннымиОбновления(ПараметрыОтметкиКОбработке); КонецЕсли; КонецПроцедуры -Функция ЗаполнениеДанныхОтложенногоОбработчикаВФоне(ПараметрыОбработчикаСтруктура, АдресРезультата) +Функция ЕстьСледующаяПроцедураЗаполнения(ОписаниеПроцедуры) - ЕстьДанныеДляРегистрации = Ложь; + ЕстьПроцедураЗаполнения = Ложь; НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; @@ -4853,40 +4856,42 @@ Продолжить; КонецЕсли; - ЕстьДанныеДляРегистрации = Истина; + ЕстьПроцедураЗаполнения = Истина; ОписаниеПроцедуры.Статус = "Выполняется"; // Установка признака начала выполнения обработчика. ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); Прервать; КонецЦикла; - Если ЕстьДанныеДляРегистрации Тогда + Если ЕстьПроцедураЗаполнения Тогда ЗафиксироватьТранзакцию(); Иначе + ОписаниеПроцедуры = Неопределено; ОтменитьТранзакцию(); КонецЕсли; Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; + Возврат ЕстьПроцедураЗаполнения; + +КонецФункции + +Функция ЗаполнитьДанныеОтложенногоОбработчика(ОписаниеПроцедуры, ПараметрыОтметкиКОбработке) - Если Не ЕстьДанныеДляРегистрации Тогда - Возврат Ложь; - КонецЕсли; - - Если ПараметрыОбработчикаСтруктура = Неопределено Тогда - ПараметрыОбработчикаСтруктура = ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке(); + Если ПараметрыОтметкиКОбработке = Неопределено Тогда + ПараметрыОтметкиКОбработке = ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке(); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - МодульОбменДаннымиСервер.ИнициализироватьФайлСДаннымиОбновления(ПараметрыОбработчикаСтруктура); + МодульОбменДаннымиСервер.ИнициализироватьФайлСДаннымиОбновления(ПараметрыОтметкиКОбработке); КонецЕсли; КонецЕсли; - ПараметрыОбработчикаСтруктура.Очередь = ОписаниеПроцедуры.Очередь; - ПараметрыОбработчикаСтруктура.Вставить("ДанныеОбработчика", Новый Соответствие); + ПараметрыОтметкиКОбработке.Очередь = ОписаниеПроцедуры.Очередь; + ПараметрыОтметкиКОбработке.Вставить("ДанныеОбработчика", Новый Соответствие); ПараметрыОбработчика = Новый Массив; - ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура); + ПараметрыОбработчика.Добавить(ПараметрыОтметкиКОбработке); Попытка Сообщение = НСтр("ru = 'Выполняется процедура заполнения данных |""%1"" @@ -4923,7 +4928,7 @@ Если ТипЗнч(НовыеСведенияОбОбновлении.ОбрабатываемыеДанные) <> Тип("Соответствие") Тогда НовыеСведенияОбОбновлении.ОбрабатываемыеДанные = Новый Соответствие; КонецЕсли; - НовыеСведенияОбОбновлении.ОбрабатываемыеДанные.Вставить(ОписаниеПроцедуры.ИмяОбработчика, ПараметрыОбработчикаСтруктура.ДанныеОбработчика); + НовыеСведенияОбОбновлении.ОбрабатываемыеДанные.Вставить(ОписаниеПроцедуры.ИмяОбработчика, ПараметрыОтметкиКОбработке.ДанныеОбработчика); НовыеСведенияОбОбновлении.ОписаниеПроцедурЗаполнения[ОписаниеПроцедуры.ИмяОбработчика].Статус = "Выполнено"; ЗаписатьСведенияОбОбновленииИнформационнойБазы(НовыеСведенияОбОбновлении); diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index 6ea85408d..5f9c43d9f 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -976,8 +976,8 @@ ЗафиксироватьТранзакцию(); Исключение - ВызватьИсключение; ОтменитьТранзакцию(); + ВызватьИсключение; КонецПопытки; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 076ecea1f..35489eeac 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -267,7 +267,7 @@ СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы), СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораКластера)); - ЗапуститьПриложение(СтрокаЗапуска); + ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаЗапуска); КонецПроцедуры @@ -356,6 +356,7 @@ АдресЭлектроннойПочты = ?(Параметры.РежимОбновления = 2 И Параметры.ВыслатьОтчетНаПочту, Параметры.АдресЭлектроннойПочты, ""); + // Вызов КаталогВременныхФайлов вместо ПолучитьИмяВременногоФайла, так как каталог не должен удаляться // автоматически при завершении клиентского приложения. // В него сохраняются исполняемые файлы, лог выполнения и резервная копия, при определенной настройке. diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index c0d2107af..22190bf01 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -20,88 +20,204 @@ //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции для работы с данными в базе. -// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы -// по ссылке на объект. -// -// Если доступа к одному из реквизитов нет, то в случае "ВыбратьРазрешенные = Ложь" возникнет исключение прав доступа, -// а в случае "ВыбратьРазрешенные = Истина" вернется значение Неопределено для всех реквизитов. +// Структура, содержащая значения реквизитов, прочитанные из информационной базы по ссылке на объект. // -// Если необходимо зачитать реквизит независимо от прав текущего пользователя, -// то следует использовать предварительный переход в привилегированный режим. -// -// Функция не предназначена для получения значений реквизитов пустых ссылок. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. // // Параметры: // Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить. -// +// - Строка - полное имя предопределенного элемента, значения реквизитов которого необходимо получить. // Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате -// требований к свойствам структуры. -// Например, "Код, Наименование, Родитель". +// требований к свойствам структуры. +// Например, "Код, Наименование, Родитель". // - Структура, ФиксированнаяСтруктура - в качестве ключа передается -// псевдоним поля для возвращаемой структуры с результатом, а в качестве -// значения (опционально) фактическое имя поля в таблице. -// Если значение не определено, то имя поля берется из ключа. +// псевдоним поля для возвращаемой структуры с результатом, а в качестве +// значения (опционально) фактическое имя поля в таблице. +// Если ключ задан, а значение не определено, то имя поля берется из ключа. // - Массив, ФиксированныйМассив - имена реквизитов в формате требований -// к свойствам структуры. -// +// к свойствам структуры. // ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя, и в случае, -// если выборка будет пустая, то все реквизиты вернутся со значением Неопределено; -// если Ложь, то возникнет исключение при отсутствии прав на любой из реквизитов. +// - если есть ограничение на уровне записей, то все реквизиты вернутся +// со значением Неопределено; +// - если нет прав для работы с таблицей, то возникнет исключение. +// - если Ложь, то возникнет исключение при отсутствии прав на таблицу +// или любой из реквизитов. // // Возвращаемое значение: // Структура - содержит имена (ключи) и значения затребованных реквизитов. -// Если строка затребованных реквизитов пуста, то возвращается пустая структура. -// Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено. +// - если в параметр Реквизиты передана пустая строка, то возвращается пустая структура. +// - если в параметр Ссылка передана пустая ссылка, то возвращается структура, +// соответствующая именам реквизитов со значениями Неопределено. +// - если в параметр Ссылка передана ссылка несуществующего объекта (битая ссылка), +// то все реквизиты вернутся со значением Неопределено. // Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты, ВыбратьРазрешенные = Ложь) Экспорт + // Если передано имя предопределенного. + Если ТипЗнч(Ссылка) = Тип("Строка") Тогда + + ПолноеИмяПредопределенногоЭлемента = Ссылка; + + // Вычисление ссылки по имени предопределенного. + // - дополнительно выполняет проверку метаданных предопределенного, выполняется предварительно. + Попытка + Ссылка = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(ПолноеИмяПредопределенногоЭлемента); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный первый параметр Ссылка: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + + // Разбор полного имени предопределенного. + ЧастиПолногоИмени = СтрРазделить(ПолноеИмяПредопределенногоЭлемента, "."); + ПолноеИмяОбъектаМетаданных = ЧастиПолногоИмени[0] + "." + ЧастиПолногоИмени[1]; + + // Если предопределенный не создан в ИБ, то требуется выполнить проверку доступа к объекту. + // В других сценариях проверка доступа выполняется в момент исполнения запроса. + Если Ссылка = Неопределено Тогда + + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + + Если Не ПравоДоступа("Чтение", МетаданныеОбъекта) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для работы с таблицей ""%1""'"), ПолноеИмяОбъектаМетаданных); + КонецЕсли; + + КонецЕсли; + + Иначе // Если передана ссылка. + + Попытка + ПолноеИмяОбъектаМетаданных = Ссылка.Метаданные().ПолноеИмя(); + Исключение + ВызватьИсключение НСтр("ru = 'Неверный первый параметр Ссылка: + |- Значение должно быть ссылкой или именем предопределенного элемента'"); + КонецПопытки; + + КонецЕсли; + + // Разбор реквизитов, если второй параметр Строка. Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда Если ПустаяСтрока(Реквизиты) Тогда Возврат Новый Структура; КонецЕсли; - Реквизиты = СтрРазделить(Реквизиты, ",", Ложь); + + // Удаление пробелов. + Реквизиты = СтрЗаменить(Реквизиты, " ", ""); + // Преобразование параметра в массив полей. + Реквизиты = СтрРазделить(Реквизиты, ","); КонецЕсли; - СтруктураРеквизитов = Новый Структура; - Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда - СтруктураРеквизитов = Реквизиты; - ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда + // Приведение реквизитов к единому формату. + СтруктураПолей = Новый Структура; + Если ТипЗнч(Реквизиты) = Тип("Структура") + Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда + + СтруктураПолей = Реквизиты; + + ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") + Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда + Для Каждого Реквизит Из Реквизиты Цикл - СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит); + + Попытка + ПсевдонимПоля = СтрЗаменить(Реквизит, ".", ""); + СтруктураПолей.Вставить(ПсевдонимПоля, Реквизит); + Исключение + // Если псевдоним не является ключом. + + // Поиск ошибки доступности полей. + Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты); + Если Результат.Ошибка Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный второй параметр Реквизиты: %1'"), Результат.ОписаниеОшибки); + КонецЕсли; + + // Не удалось распознать ошибку, проброс первичной ошибки. + ВызватьИсключение; + + КонецПопытки; КонецЦикла; Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты))); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты))); КонецЕсли; - ТекстПолей = ""; - Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл - ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), - СокрЛП(КлючИЗначение.Значение), - СокрЛП(КлючИЗначение.Ключ)); + // Подготовка результата (после выполнения запроса переопределится). + Результат = Новый Структура; + + // Формирование текста запроса к выбираемым полям. + ТекстЗапросаПолей = ""; + Для каждого КлючИЗначение Из СтруктураПолей Цикл - Псевдоним = СокрЛП(КлючИЗначение.Ключ); + ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), + КлючИЗначение.Значение, + КлючИЗначение.Ключ); + ПсевдонимПоля = КлючИЗначение.Ключ; + + ТекстЗапросаПолей = + ТекстЗапросаПолей + ?(ПустаяСтрока(ТекстЗапросаПолей), "", ",") + " + | " + ИмяПоля + " КАК " + ПсевдонимПоля; + + + // Предварительное добавление поля по псевдониму в возвращаемый результат. + Результат.Вставить(ПсевдонимПоля); - ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + " - | " + ИмяПоля + " КАК " + Псевдоним; КонецЦикла; + // Если предопределенного нет в ИБ. + // - приведение результата к отсутствию объекта в ИБ или передаче пустой ссылки. + Если Ссылка = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ " + ?(ВыбратьРазрешенные, "РАЗРЕШЕННЫЕ", "") + " + |" + ТекстЗапросаПолей + " + |ИЗ + | " + ПолноеИмяОбъектаМетаданных + " КАК Таблица + |ГДЕ + | Таблица.Ссылка = &Ссылка + |"; + + // Выполнение запроса. Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", Ссылка); - Запрос.Текст = - "ВЫБРАТЬ " + ?(ВыбратьРазрешенные, "РАЗРЕШЕННЫЕ", "") + " - |" + ТекстПолей + " - |ИЗ - | " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы - |ГДЕ - | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка - |"; - Выборка = Запрос.Выполнить().Выбрать(); + Запрос.Текст = ТекстЗапроса; - Результат = Новый Структура; - Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл - Результат.Вставить(КлючИЗначение.Ключ); - КонецЦикла; + Попытка + Выборка = Запрос.Выполнить().Выбрать(); + Исключение + + // Если реквизиты были переданы строкой, то они уже конвертированы в массив. + // Если реквизиты - массив, оставляем без изменений. + // Если реквизиты - структура - конвертируем в массив. + // В остальных случаях уже было бы выброшено исключение. + Если Тип("Структура") = ТипЗнч(Реквизиты) Тогда + Реквизиты = Новый Массив; + Для каждого КлючИЗначение Из СтруктураПолей Цикл + ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), + КлючИЗначение.Значение, + КлючИЗначение.Ключ); + Реквизиты.Добавить(ИмяПоля); + КонецЦикла; + КонецЕсли; + + // Поиск ошибки доступности полей. + Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты); + Если Результат.Ошибка Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный второй параметр Реквизиты: %1'"), Результат.ОписаниеОшибки); + КонецЕсли; + + // Не удалось распознать ошибку, проброс первичной ошибки. + ВызватьИсключение; + + КонецПопытки; + // Заполнение реквизитов. Если Выборка.Следующий() Тогда ЗаполнитьЗначенияСвойств(Результат, Выборка); КонецЕсли; @@ -110,55 +226,56 @@ КонецФункции -// Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект. -// -// Если доступа к реквизиту нет, то в случае "ВыбратьРазрешенные = Ложь" возникнет исключение прав доступа, -// а в случае "ВыбратьРазрешенные = Истина" вернется значение Неопределено. +// Значение реквизита, прочитанного из информационной базы по ссылке на объект. // -// Если необходимо зачитать реквизит независимо от прав текущего пользователя, -// то следует использовать предварительный переход в привилегированный режим. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. // -// Функция не предназначена для получения значений реквизитов пустых ссылок. -// // Параметры: // Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить. -// ИмяРеквизита - Строка - имя получаемого реквизита. +// - Строка - полное имя предопределенного элемента, значения реквизитов которого необходимо получить. +// ИмяРеквизита - Строка - имя получаемого реквизита. // ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя, и в случае, -// если выборка будет пустая, то вернется значение Неопределено. -// +// - если есть ограничение на уровне записей, то возвращается Неопределено; +// - если нет прав для работы с таблицей, то возникнет исключение. +// - если Ложь, то возникнет исключение при отсутствии прав на таблицу +// или любой из реквизитов. +// // Возвращаемое значение: // Произвольный - зависит от типа значения прочитанного реквизита. -// +// - если в параметр Ссылка передана пустая ссылка, то возвращается Неопределено. +// - если в параметр Ссылка передана ссылка несуществующего объекта (битая ссылка), +// то возвращается Неопределено. +// Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные = Ложь) Экспорт + Если ПустаяСтрока(ИмяРеквизита) Тогда + ВызватьИсключение НСтр("ru = 'Неверный второй параметр ИмяРеквизита: + |- Имя реквизита должно быть заполнено'"); + КонецЕсли; + Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные); Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", "")]; КонецФункции -// Возвращает значения реквизитов, прочитанные из информационной базы -// для нескольких объектов. -// -// Если доступа к одному из реквизитов какого-либо объекта нет, то в случае "ВыбратьРазрешенные = Ложь" возникнет -// исключение прав доступа, а в случае "ВыбратьРазрешенные = Истина" вернется значение Неопределено для всех -// реквизитов этого объекта. +// Значения реквизитов, прочитанные из информационной базы для нескольких объектов. // // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. // -// Функция не предназначена для получения значений реквизитов пустых ссылок. -// // Параметры: // МассивСсылок - Массив - массив ссылок на объекты одного типа. -// Значения массива должны быть ссылками на объекты одного типа. -// ИменаРеквизитов - Строка - имена реквизитов перечисленные через запятую, в формате требований к свойствам структуры. -// Например, "Код, Наименование, Родитель". -// +// Значения массива должны быть ссылками на объекты одного типа. +// если массив пуст, то результатом будет пустое соответствие. +// ИменаРеквизитов - Строка - имена реквизитов перечисленные через запятую, в формате требований к свойствам +// структуры. Например, "Код, Наименование, Родитель". // ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя, и в случае, -// если какой-либо объект будет исключен из выборки по правам, то все реквизиты этого объекта -// вернутся со значением Неопределено; -// если Ложь, то возникнет исключение при отсутствии прав на любой из реквизитов любого -// из объектов. +// - если какой-либо объект будет исключен из выборки по правам, то этот объект +// будет исключен и из результата; +// - если Ложь, то возникнет исключение при отсутствии прав на таблицу +// или любой из реквизитов. +// // Возвращаемое значение: // Соответствие - список объектов и значений их реквизитов: // * Ключ - ЛюбаяСсылка - ссылка на объект; @@ -168,21 +285,60 @@ // Функция ЗначенияРеквизитовОбъектов(МассивСсылок, ИменаРеквизитов, ВыбратьРазрешенные = Ложь) Экспорт + Если ПустаяСтрока(ИменаРеквизитов) Тогда + ВызватьИсключение НСтр("ru = 'Неверный второй параметр ИменаРеквизитов: + |- Поле объекта должно быть указано'"); + КонецЕсли; + + Если СтрНайти(ИменаРеквизитов, ".") <> 0 Тогда + ВызватьИсключение НСтр("ru = 'Неверный второй параметр ИменаРеквизитов: + |- Обращение через точку не поддерживается'"); + КонецЕсли; + ЗначенияРеквизитов = Новый Соответствие; Если МассивСсылок.Количество() = 0 Тогда Возврат ЗначенияРеквизитов; КонецЕсли; + ПерваяСсылка = МассивСсылок[0]; + + Попытка + ПолноеИмяОбъектаМетаданных = ПерваяСсылка.Метаданные().ПолноеИмя(); + Исключение + ВызватьИсключение НСтр("ru = 'Неверный первый параметр МассивСсылок: + |- Значения массива должны быть ссылками'"); + КонецПопытки; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ " + ?(ВыбратьРазрешенные, "РАЗРЕШЕННЫЕ", "") + " | Ссылка КАК Ссылка, " + ИменаРеквизитов + " |ИЗ - | " + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица + | " + ПолноеИмяОбъектаМетаданных + " КАК Таблица |ГДЕ | Таблица.Ссылка В (&МассивСсылок)"; Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок); - Выборка = Запрос.Выполнить().Выбрать(); + + Попытка + Выборка = Запрос.Выполнить().Выбрать(); + Исключение + + // Удаление пробелов. + ИменаРеквизитов = СтрЗаменить(ИменаРеквизитов, " ", ""); + // Преобразование параметра в массив полей. + ИменаРеквизитов = СтрРазделить(ИменаРеквизитов, ","); + + // Поиск ошибки доступности полей. + Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, ИменаРеквизитов); + Если Результат.Ошибка Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный второй параметр ИменаРеквизитов: %1'"), Результат.ОписаниеОшибки); + КонецЕсли; + + // Не удалось распознать ошибку, проброс первичной ошибки. + ВызватьИсключение; + + КонецПопытки; Пока Выборка.Следующий() Цикл Результат = Новый Структура(ИменаРеквизитов); @@ -194,34 +350,35 @@ КонецФункции -// Возвращает значения реквизита, прочитанного из информационной базы для нескольких объектов. -// -// Если доступа к одному из реквизитов нет, то в случае "ВыбратьРазрешенные = Ложь" возникнет -// исключение прав доступа, а в случае "ВыбратьРазрешенные = Истина" вернется значение Неопределено для всех -// реквизитов. +// Значения реквизита, прочитанного из информационной базы для нескольких объектов. // // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. -// -// Функция не предназначена для получения значений реквизитов пустых ссылок. // // Параметры: // МассивСсылок - Массив - массив ссылок на объекты одного типа. // Значения массива должны быть ссылками на объекты одного типа. // ИмяРеквизита - Строка - например, "Код". // ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя, и в случае, -// если какой-либо объект будет исключен из выборки по правам, то значение реквизита -// этого объекта вернется со значением Неопределено; -// если Ложь, то возникнет исключение при отсутствии прав на любой из реквизитов любого -// из объектов. -// +// - если какой-либо объект будет исключен из выборки по правам, то этот объект +// будет исключен и из результата; +// - если Ложь, то возникнет исключение при отсутствии прав на таблицу +// или любой из реквизитов. +// // Возвращаемое значение: // Соответствие - Ключ - ссылка на объект, Значение - значение прочитанного реквизита. +// * Ключ - ссылка на объект, +// * Значение - значение прочитанного реквизита. // Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита, ВыбратьРазрешенные = Ложь) Экспорт + Если ПустаяСтрока(ИмяРеквизита) Тогда + ВызватьИсключение НСтр("ru = 'Неверный второй параметр ИмяРеквизита: + |- Имя реквизита должно быть заполнено'"); + КонецЕсли; + ЗначенияРеквизитов = ЗначенияРеквизитовОбъектов(МассивСсылок, ИмяРеквизита, ВыбратьРазрешенные); - Для Каждого Элемент Из ЗначенияРеквизитов Цикл + Для каждого Элемент Из ЗначенияРеквизитов Цикл ЗначенияРеквизитов[Элемент.Ключ] = Элемент.Значение[ИмяРеквизита]; КонецЦикла; @@ -1736,7 +1893,7 @@ ИсключенияПоискаИнтеграция = Новый Массив; - ИнтеграцияСтандартныхПодсистем.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаИнтеграция); + ИнтеграцияПодсистемБСП.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаИнтеграция); ИсключенияПоиска = Новый Массив; ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоиска); @@ -2105,20 +2262,6 @@ КонецФункции -// Возвращает признак принадлежности узла к плану обмена РИБ. -// -// Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// -// Возвращаемое значение: -// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. -// -Функция ЭтоУзелРаспределеннойИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт - - Возврат ОбщегоНазначенияПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); - -КонецФункции - // Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. // В главном узле всегда Ложь. // @@ -4298,23 +4441,26 @@ Отбор = Новый Структура("Владелец", Владелец); БезопасноеХранилищеДанных.Владелец = Владелец; БезопасноеХранилищеДанных.Прочитать(); - Если Ключи <> Неопределено Тогда - СписокКлючей = СтрРазделить(Ключи, ",", Ложь); - Если БезопасноеХранилищеДанных.Выбран() И СписокКлючей.Количество() > 0 Тогда - ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); - Для каждого КлючДляУдаления Из СписокКлючей Цикл - Если ДанныеДляСохранения.Свойство(КлючДляУдаления) Тогда - ДанныеДляСохранения.Удалить(КлючДляУдаления); - КонецЕсли; - КонецЦикла; - ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); - БезопасноеХранилищеДанных.Данные = ДанныеДляХранилищеЗначения; - БезопасноеХранилищеДанных.Записать(); + Если ТипЗнч(БезопасноеХранилищеДанных.Данные) = Тип("ХранилищеЗначения") Тогда + ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); + Если Ключи <> Неопределено И ТипЗнч(ДанныеДляСохранения) = Тип("Структура") Тогда + СписокКлючей = СтрРазделить(Ключи, ",", Ложь); + Если БезопасноеХранилищеДанных.Выбран() И СписокКлючей.Количество() > 0 Тогда + Для каждого КлючДляУдаления Из СписокКлючей Цикл + Если ДанныеДляСохранения.Свойство(КлючДляУдаления) Тогда + ДанныеДляСохранения.Удалить(КлючДляУдаления); + КонецЕсли; + КонецЦикла; + ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); + БезопасноеХранилищеДанных.Данные = ДанныеДляХранилищеЗначения; + БезопасноеХранилищеДанных.Записать(); + Возврат; + КонецЕсли; КонецЕсли; - Иначе - БезопасноеХранилищеДанных.Удалить(); КонецЕсли; - + + БезопасноеХранилищеДанных.Удалить(); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -4377,7 +4523,8 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с внутренним буфером обмена. -// Помещает выделенные строки табличной части во внутренний буфер обмена. +// Помещает выделенные строки табличной части во внутренний буфер обмена +// откуда их можно получить с помощью СтрокиИзБуфераОбмена. // // Параметры: // ТабличнаяЧасть - ДанныеФормыКоллекция - Табличная часть, строки которой @@ -4417,7 +4564,7 @@ КонецПроцедуры -// Помещает произвольные данные во внутренний буфер обмена. +// Помещает произвольные данные во внутренний буфер обмена, откуда их можно получить с помощью СтрокиИзБуфераОбмена. // // Параметры: // Данные - Произвольный - Данные, которые необходимо поместить в внутренний буфер обмена. @@ -4444,7 +4591,7 @@ КонецПроцедуры -// Получает строки табличной части, помещенные во внутренний буфер обмена. +// Получает строки табличной части, помещенные во внутренний буфер обмена с помощью СкопироватьСтрокиВБуферОбмена. // // Возвращаемое значение: // Структура - со свойствами: @@ -5951,11 +6098,12 @@ НаборЗаписейОригинала = Менеджер.СоздатьНаборЗаписей(); КонецЕсли; + ВидОшибки = ""; + Если ВнутренняяТранзакция Тогда НачатьТранзакцию(); КонецЕсли; - ВидОшибки = ""; Попытка Если ВнутренняяТранзакция Тогда Блокировка = Новый БлокировкаДанных; @@ -6245,11 +6393,13 @@ Удаляемые = Новый Массив; + ВидОшибки = ""; + ЛокальнаяТранзакция = Не ТранзакцияАктивна(); Если ЛокальнаяТранзакция Тогда НачатьТранзакцию(); КонецЕсли; - ВидОшибки = ""; + Попытка Для Каждого Ссылка Из СписокСсылок Цикл Информация = ИнформацияОТипе(ТипЗнч(Ссылка), ПараметрыВыполнения); @@ -7679,4 +7829,89 @@ КонецФункции +// Выполняет поиск проверяемых выражений среди реквизитов объекта метаданных. +// +// Параметры: +// ПолноеИмяОбъектаМетаданных - Строка - полное имя проверяемого объекта. +// ПроверяемыеВыражения - Массив - имена полей или проверяемые выражения объекта метаданных. +// +// Возвращаемое значение: +// Структура - Результат проверки. +// * Ошибка - Булево - Найдена ошибка. +// * ОписаниеОшибки - Строка - Описание найденных ошибок. +// +// Пример: +// +// Реквизиты = Новый Массив; +// Реквизиты.Добавить("Номер"); +// Реквизиты.Добавить("Валюта.НаименованиеПолное"); +// +// Результат = ОбщегоНазначения.НайтиОшибкуДоступностиРеквизитовОбъекта("Документ._ДемоЗаказПокупателя", Реквизиты); +// +// Если Результат.Ошибка Тогда +// ВызватьИсключение Результат.ОписаниеОшибки; +// КонецЕсли; +// +Функция НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, ПроверяемыеВыражения) + + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + + Если МетаданныеОбъекта = Неопределено Тогда + Возврат Новый Структура("Ошибка, ОписаниеОшибки", Истина, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка получения метаданных ""%1""'"), ПолноеИмяОбъектаМетаданных)); + КонецЕсли; + + // Разрешение вызова из безопасного режима внешней обработки или расширения. + // Информация о доступности полей источника схемы при проверке метаданных не является секретной. + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Схема = Новый СхемаЗапроса; + Пакет = Схема.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса")); + Оператор = Пакет.Операторы.Получить(0); + + Источник = Оператор.Источники.Добавить(ПолноеИмяОбъектаМетаданных, "Таблица"); + ТекстОшибки = ""; + + Для Каждого ТекущееВыражение Из ПроверяемыеВыражения Цикл + + Если Не ПолеИсточникаСхемыЗапросаДоступно(Источник, ТекущееВыражение) Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '- Поле объекта ""%1"" не найдено'"), ТекущееВыражение); + КонецЕсли; + + КонецЦикла; + + Возврат Новый Структура("Ошибка, ОписаниеОшибки", Не ПустаяСтрока(ТекстОшибки), ТекстОшибки); + +КонецФункции + +// Используется в НайтиОшибкуДоступностиРеквизитовОбъекта. +// Выполняет проверку доступности поля проверяемого выражения в источнике оператора схемы запроса. +// +Функция ПолеИсточникаСхемыЗапросаДоступно(ИсточникОператора, ПроверяемоеВыражение) + + ЧастиИмениПоля = СтрРазделить(ПроверяемоеВыражение, "."); + ДоступныеПоля = ИсточникОператора.Источник.ДоступныеПоля; + + ТекущаяЧастьИмениПоля = 0; + Пока ТекущаяЧастьИмениПоля < ЧастиИмениПоля.Количество() Цикл + + ТекущееПоле = ДоступныеПоля.Найти(ЧастиИмениПоля.Получить(ТекущаяЧастьИмениПоля)); + + Если ТекущееПоле = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + // Инкрементация следующей части имени поля и соответствующего списка доступности полей. + ТекущаяЧастьИмениПоля = ТекущаяЧастьИмениПоля + 1; + ДоступныеПоля = ТекущееПоле.Поля; + + КонецЦикла; + + Возврат Истина; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 4075c51e8..392f923d2 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -263,10 +263,15 @@ ТекстКоманды = "regsvr32.exe /n /i:user /s comcntr.dll"; - КодВозврата = Неопределено; - ЗапуститьПриложение(ТекстКоманды, КаталогПрограммы(), Истина, КодВозврата); + ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ТекущийКаталог = КаталогПрограммы(); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; - Если КодВозврата = Неопределено Или КодВозврата > 0 Тогда + Результат = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(ТекстКоманды, ПараметрыЗапускаПрограммы); + + КодВозврата = Результат.КодВозврата; + + Если КодВозврата = Неопределено Или КодВозврата <> 0 Тогда ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС + НСтр("ru = 'Код ошибки regsvr32:'") + " " + КодВозврата; @@ -304,7 +309,11 @@ // Задает вопрос о продолжении действия, которое приведет к потере изменений: // "Данные были изменены. Сохранить изменения?" -// Для использования в обработчиках события ПередЗакрытием модулей форм. +// Для использования в обработчиках события ПередЗакрытием модулей форм объектов, +// которые возможно записать в информационную базу. +// Отображение вопроса зависит свойства модифицированности формы. +// Для отображения вопроса произвольной формы используйте: +// см. процедуру ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(). // // Параметры: // ОповещениеСохранитьИЗакрыть - ОписаниеОповещения - содержит имя процедуры, вызываемой при нажатии на кнопку OK. @@ -365,6 +374,8 @@ // Задает вопрос о продолжении действия, которое приведет к закрытию формы. // Для использования в обработчиках события ПередЗакрытием модулей форм. +// Для отображения вопроса в форме, которая возможно записать в информационную базу, используйте: +// см. процедуру ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(). // // Параметры: // Форма - УправляемаяФорма - форма, которая вызывает диалог предупреждения. @@ -436,22 +447,6 @@ КонецФункции -// Выполняет переход по ссылке на объект информационной базы или внешний объект. -// (например, ссылка на сайт или путь к папке). -// -// Параметры: -// Ссылка - Строка - ссылка для перехода. -// -Процедура ПерейтиПоСсылке(Ссылка) Экспорт - - #Если ТолстыйКлиентОбычноеПриложение Тогда - ЗапуститьПриложение(Ссылка); - #Иначе - ПерейтиПоНавигационнойСсылке(Ссылка); - #КонецЕсли - -КонецПроцедуры - // Обновляет интерфейс программы сохраняя текущее активное окно. // Процедура ОбновитьИнтерфейсПрограммы() Экспорт @@ -679,7 +674,7 @@ Функция ПредлагатьСоздаватьРезервныеКопии() Экспорт Результат = Ложь; - ИнтеграцияСтандартныхПодсистемКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме(Результат); + ИнтеграцияПодсистемБСПКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме(Результат); Возврат Результат; КонецФункции @@ -687,7 +682,7 @@ // Предлагает пользователю создать резервную копию. Процедура ПредложитьПользователюСоздатьРезервнуюКопию() Экспорт - ИнтеграцияСтандартныхПодсистемКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию(); + ИнтеграцияПодсистемБСПКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию(); КонецПроцедуры @@ -700,7 +695,8 @@ // Структура - коллекция параметров: // * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте. // * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать и обновлять компоненту. -// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. +// * ИдентификаторыСозданияОбъектов - Массив - идентификатор создания экземпляра модуля объекта, // используется только для компонент, у которых есть несколько идентификаторов создания объектов, // при задании параметр Идентификатор будет игнорироваться. // @@ -713,9 +709,9 @@ Функция ПараметрыПодключенияКомпоненты() Экспорт Параметры = Новый Структура; - Параметры.Вставить("Кэшировать" , Истина); + Параметры.Вставить("Кэшировать", Истина); Параметры.Вставить("ПредложитьУстановить", Истина); - Параметры.Вставить("ТекстПояснения" , ""); + Параметры.Вставить("ТекстПояснения", ""); Параметры.Вставить("ИдентификаторыСозданияОбъектов", Новый Массив); Возврат Параметры; @@ -730,7 +726,7 @@ // Оповещение - ОписаниеОповещения - Описание оповещения о подключении со следующими параметрами: // * Результат - Структура - результат подключения компоненты: // ** Подключено - Булево - признак подключения. -// ** ПодключаемыйМодуль - AddIn - экземпляр объекта внешней компоненты. +// ** ПодключаемыйМодуль - AddIn - экземпляр объекта внешней компоненты; // - ФиксированноеСоответствие - экземпляры объектов внешней компоненты, // указанные в ПараметрыПодключения.ИдентификаторыСозданияОбъектов, // Ключ - Идентификатор, Значение - экземпляр объекта. @@ -783,12 +779,12 @@ КонецЕсли; Контекст = Новый Структура; - Контекст.Вставить("Оповещение" , Оповещение); - Контекст.Вставить("Идентификатор" , Идентификатор); - Контекст.Вставить("Местоположение" , ПолноеИмяМакета); - Контекст.Вставить("Кэшировать" , Параметры.Кэшировать); + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("Идентификатор", Идентификатор); + Контекст.Вставить("Местоположение", ПолноеИмяМакета); + Контекст.Вставить("Кэшировать", Параметры.Кэшировать); Контекст.Вставить("ПредложитьУстановить", Параметры.ПредложитьУстановить); - Контекст.Вставить("ТекстПояснения" , Параметры.ТекстПояснения); + Контекст.Вставить("ТекстПояснения", Параметры.ТекстПояснения); Контекст.Вставить("ИдентификаторыСозданияОбъектов", Параметры.ИдентификаторыСозданияОбъектов); ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпоненту(Контекст); @@ -799,8 +795,7 @@ // // Возвращаемое значение: // Структура - коллекция параметров: -// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать -// (только для веб клиента). +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. // // Пример: // @@ -858,7 +853,7 @@ КонецЕсли; Контекст = Новый Структура; - Контекст.Вставить("Оповещение" , Оповещение); + Контекст.Вставить("Оповещение", Оповещение); Контекст.Вставить("Местоположение", ПолноеИмяМакета); Контекст.Вставить("ТекстПояснения", Параметры.ТекстПояснения); @@ -866,4 +861,232 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с внешними приложениями. + +// Открывает проводник с указанным путем. +// Если передан путь к файлу, то выполняет позиционирование курсора в проводнике на этом файле. +// +// Параметры: +// ПутьККаталогуИлиФайлу - Строка - полный путь к файлу или каталогу на диске. +// +// Пример: +// // Для Windows +// ОбщегоНазначенияКлиент.ОткрытьПроводник("C:\Users"); +// ОбщегоНазначенияКлиент.ОткрытьПроводник("C:\Program Files\1cv8\common\1cestart.exe"); +// // Для Linux +// ОбщегоНазначенияКлиент.ОткрытьПроводник("/home/"); +// ОбщегоНазначенияКлиент.ОткрытьПроводник("/opt/1C/v8.3/x86_64/1cv8c"); +// +Процедура ОткрытьПроводник(ПутьККаталогуИлиФайлу) Экспорт + + ФайлИнфо = Новый Файл(ПутьККаталогуИлиФайлу); + + Контекст = Новый Структура; + Контекст.Вставить("ФайлИнфо", ФайлИнфо); + + Оповещение = Новый ОписаниеОповещения("ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами", + ОбщегоНазначенияСлужебныйКлиент, Контекст); + + ТекстПредложения = НСтр("ru = 'Для открытия папки необходимо установить расширение работы с файлами.'"); + ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + +КонецПроцедуры + +// Открывает файл в программе просмотра, ассоциированной с расширением файла в операционной системе. +// Блокирует возможность открытия файлов, расширение которых относятся к исполняемым файлам. +// +// Параметры: +// ПутьКФайлу - Строка - полный путь к файлу на диске, который требуется открыть. +// Оповещение - ОписаниеОповещения, Неопределено - оповещение о результате открытия. +// - если оповещение не задано - в случае ошибки будет показано предупреждение. +// * ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// +// Пример: +// ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(КаталогДокументов() + "test.pdf"); +// ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(КаталогДокументов() + "test.xlsx"); +// +Процедура ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу, Знач Оповещение = Неопределено) Экспорт + + ФайлИнфо = Новый Файл(ПутьКФайлу); + + Контекст = Новый Структура; + Контекст.Вставить("ФайлИнфо", ФайлИнфо); + Контекст.Вставить("Оповещение", Оповещение); + + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами", + ОбщегоНазначенияСлужебныйКлиент, Контекст); + + ТекстПредложения = НСтр("ru = 'Для открытия файла необходимо установить расширение работы с файлами.'"); + ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + +КонецПроцедуры + +// Открывает навигационную ссылку в программе, которая ассоциирована с протоколом навигационной ссылки. +// +// Допустимые протоколы: http, https, e1c, v8help, mailto, tel, skype. +// +// Для открытия проводника или файла в программе просмотра не следует формировать ссылку по протоколу file:// +// - для открытия проводника см. ОткрытьПроводник. +// - для открытия файла по расширению см. ОткрытьФайлВПрограммеПросмотра. +// +// Параметры: +// НавигационнаяСсылка - Строка - ссылка, которую требуется открыть. +// Оповещение - ОписаниеОповещения, Неопределено - оповещение о результате открытия. +// - если оповещение не задано - в случае ошибки будет показано предупреждение. +// * ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// +// Пример: +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("e1cib/navigationpoint/startpage"); // начальная страница. +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("v8help://1cv8/QueryLanguageFullTextSearchInData"); +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("https://1c.ru"); +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("mailto:help@1c.ru"); +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("skype:echo123?call"); +// +Процедура ОткрытьНавигационнуюСсылку(НавигационнаяСсылка, Знач Оповещение = Неопределено) Экспорт + + Контекст = Новый Структура; + Контекст.Вставить("НавигационнаяСсылка", НавигационнаяСсылка); + Контекст.Вставить("Оповещение", Оповещение); + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось перейти по ссылке ""%1"" по причине: + |Неверно задана навигационная ссылка.'"), + НавигационнаяСсылка); + + Если Не ОбщегоНазначенияСлужебныйКлиент.ЭтоДопустимаяСсылка(НавигационнаяСсылка) Тогда + ОбщегоНазначенияСлужебныйКлиент.ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияСлужебныйКлиент.ЭтоВебСсылка(НавигационнаяСсылка) + Или ОбщегоНазначенияСлужебныйКлиент.ЭтоНавигационнаяСсылка(НавигационнаяСсылка) Тогда + + Попытка + +#Если ТолстыйКлиентОбычноеПриложение Тогда + ЗапуститьПриложение(НавигационнаяСсылка); +#Иначе + ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); +#КонецЕсли + + Исключение + ОбщегоНазначенияСлужебныйКлиент.ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Возврат; + КонецПопытки; + + Если Оповещение <> Неопределено Тогда + ПриложениеЗапущено = Истина; + ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); + КонецЕсли; + + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияСлужебныйКлиент.ЭтоСсылкаНаСправку(НавигационнаяСсылка) Тогда + ОткрытьСправку(НавигационнаяСсылка); + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами", + ОбщегоНазначенияСлужебныйКлиент, Контекст); + + ТекстПредложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для открытия ссылки ""%1"" необходимо установить расширение работы с файлами.'"), + НавигационнаяСсылка); + ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + +КонецПроцедуры + +// Возвращает структуру параметров для см. процедуру ЗапуститьПрограмму. +// +// Возвращаемое значение: +// ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. +// Оповещение - Булево - ОписаниеОповещения, Неопределено - оповещение о результате +// завершения запущенного приложения. +// если оповещение не задано - в случае ошибки будет показано предупреждение. +// * Результат - Структура - Результат работы программы. +// ** ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. +// ** ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. +// ** КодВозврата - Число - код возврата программы. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// +Функция ПараметрыЗапускаПрограммы() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ТекущийКаталог", ""); + Параметры.Вставить("Оповещение", Неопределено); + + Возврат Параметры; + +КонецФункции + +// Запускает внешнюю программу в соответствии с параметрами запуска. +// +// для переводчиков: RunApplication +// +// Параметры: +// СтрокаКоманды - Строка - Командная строка для запуска программы. +// ПараметрыЗапускаПрограммы - Структура, Неопределено - см. функцию ПараметрыЗапускаПрограммы. +// +// Пример: +// +// +Процедура ЗапуститьПрограмму(Знач СтрокаКоманды, ПараметрыЗапускаПрограммы = Неопределено) Экспорт + + Если ПараметрыЗапускаПрограммы = Неопределено Тогда + ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); + КонецЕсли; + + ТекущийКаталог = ПараметрыЗапускаПрограммы.ТекущийКаталог; + Оповещение = ПараметрыЗапускаПрограммы.Оповещение; + + Контекст = Новый Структура; + Контекст.Вставить("СтрокаКоманды", СтрокаКоманды); + Контекст.Вставить("ТекущийКаталог", ТекущийКаталог); + Контекст.Вставить("Оповещение", Оповещение); + + Если ОбщегоНазначенияСлужебныйКлиент.СодержитНебезопасныеДействия(СтрокаКоманды) Тогда + ОписаниеОшибки = + НСтр("ru = 'Недопустимое значение параметра СтрокаКоманды. + |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"); + + ОбщегоНазначенияСлужебныйКлиент.ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами", + ОбщегоНазначенияСлужебныйКлиент, Контекст); + + ТекстПредложения = НСтр("ru = 'Для создания временного каталога необходимо установить расширение работы с файлами.'"); + ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + +КонецПроцедуры + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать: +// ОткрытьНавигационнуюСсылку при передачи ссылки на сайт или навигационной ссылки. +// ОткрытьПроводник для открытия проводника при передачи пути к папке или файлу. +// ОткрытьФайлВПрограммеПросмотра для открытия файла по расширению при передачи пути к файлу. +// +// Выполняет переход по ссылке на объект информационной базы или внешний объект. +// (например, ссылка на сайт или путь к папке). +// +// Параметры: +// Ссылка - Строка - ссылка для перехода. +// +Процедура ПерейтиПоСсылке(Ссылка) Экспорт + + #Если ТолстыйКлиентОбычноеПриложение Тогда + ЗапуститьПриложение(Ссылка); + #Иначе + ПерейтиПоНавигационнойСсылке(Ссылка); + #КонецЕсли + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index 5e5196a2e..f5e0f2559 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -22,7 +22,7 @@ // * Модули - Массив - ссылки на модули, в которых нужно вызвать эту же процедуру после возврата. // Модули можно добавлять только в рамках вызова в процедуру переопределяемого модуля. // Используется для упрощения реализации нескольких последовательных асинхронных вызовов -// в разные подсистемы. См. пример ИнтеграцияСтандартныхПодсистемКлиент.ПередНачаломРаботыСистемы. +// в разные подсистемы. См. пример ИнтеграцияПодсистемБСПКлиент.ПередНачаломРаботыСистемы. // // Пример: // Следующий код открывает окно, блокирующее вход в программу. diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 329200a02..69a0dbd69 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -546,14 +546,21 @@ Возврат Массив; КонецФункции -// Вычитает один массив элементов из другого массива. Возвращает результат вычитания. +// Вычисляет разность массивов. Разностью массивов А и В является массив, содержащий +// все элементы массива А не существующие в массиве В. // // Параметры: // Массив - Массив - массив элементов, из которого необходимо выполнить вычитание; // МассивВычитания - Массив - массив элементов, который будет вычитаться. // // Возвращаемое значение: -// Массив - результат вычитания двух массивов. +// Массив - дополнение массива В до А. +// +// Пример: +// //А = [1, 3, 5, 7]; +// //В = [3, 7, 9]; +// Результат = СократитьМассив(А, В); +// //Результат = [1, 5]; // Функция СократитьМассив(Массив, МассивВычитания) Экспорт @@ -2386,11 +2393,14 @@ // Получает ссылку предопределенного элемента по его полному имени. // Предопределенные элементы могут содержаться только в следующих объектах: -// справочники, планы видов характеристик, планы счетов и планы видов расчета. +// - Справочники; +// - Планы видов характеристик; +// - Планы счетов; +// - Планы видов расчета. // // Параметры: // ПолноеИмяПредопределенного - Строка - Полный путь к предопределенному элементу, включая его имя. -// Формат полностью аналогичен функции глобального контекста ПредопределенноеЗначение(). +// Формат аналогичен функции глобального контекста ПредопределенноеЗначение(). // Например: // "Справочник.ВидыКонтактнойИнформации.EmailПользователя" // "ПланСчетов.Хозрасчетный.Материалы" @@ -2398,20 +2408,60 @@ // // Возвращаемое значение: // ЛюбаяСсылка - ссылка на предопределенный элемент. -// Неопределено - если элемент не найден, или на него нет прав. +// Неопределено - если предопределенный есть в метаданных, но не создан в ИБ. // Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт - Если ВРег(Прав(ПолноеИмяПредопределенного, 13)) = ".ПУСТАЯССЫЛКА" Тогда - // Для получения пустых ссылок используется стандартная функция платформы. + // Используется стандартная функция платформы для получения: + // - пустых ссылок; + // - значений перечислений; + // - точек маршрута бизнес-процессов. + Если ".ПУСТАЯССЫЛКА" = ВРег(Прав(ПолноеИмяПредопределенного, 13)) + Или "ПЕРЕЧИСЛЕНИЕ." = ВРег(Лев(ПолноеИмяПредопределенного, 13)) + Или "БИЗНЕСПРОЦЕСС." = ВРег(Лев(ПолноеИмяПредопределенного, 14)) Тогда + Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного); КонецЕсли; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Предопределенное значение ""%1"" не найдено.'"), ПолноеИмяПредопределенного); + + // Разбор полного имени предопределенного. + ЧастиПолногоИмени = СтрРазделить(ПолноеИмяПредопределенного, "."); + Если ЧастиПолногоИмени.Количество() <> 3 Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ПолноеИмяОбъектаМетаданных = ВРег(ЧастиПолногоИмени[0] + "." + ЧастиПолногоИмени[1]); + ИмяПредопределенного = ЧастиПолногоИмени[2]; + + // В зависимости от контекста выполняется обращение к разному кэшу. + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Возврат СтандартныеПодсистемыВызовСервера.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); + ПредопределенныеЗначения = СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); #Иначе - Возврат СтандартныеПодсистемыКлиентПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); + ПредопределенныеЗначения = СтандартныеПодсистемыКлиентПовтИсп.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); #КонецЕсли + + // Если ошибка в имени метаданных. + Если ПредопределенныеЗначения = Неопределено Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + // Получение результата из кэша. + ПредопределенноеЗначение = ПредопределенныеЗначения.Получить(ИмяПредопределенного); + + // Если предопределенного нет в метаданных. + Если ПредопределенноеЗначение = Неопределено Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + // Если предопределенный есть в метаданных, но не создан в ИБ. + Если Null = ПредопределенноеЗначение Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат ПредопределенноеЗначение; КонецФункции @@ -2898,33 +2948,54 @@ // с заданными коэффициентами распределения. // // Параметры: -// РаспределяемаяСумма - Число - сумма, которую надо распределить; -// Коэффициенты - Массив - коэффициенты распределения; -// Точность - Число - точность округления при распределении. Необязателен. +// РаспределяемаяСумма - Число - сумма, которую надо распределить, если сумма равна 0 - то возвращается Неопределено; +// Если передана отрицательная - расчет по модулю и после инверсия знаков результата. +// Коэффициенты - Массив - коэффициенты распределения, должны быть не отрицательными; +// Точность - Число - точность округления при распределении. Необязателен. // // Возвращаемое значение: // Массив - массив размерностью равный массиву коэффициентов, содержит // суммы в соответствии с весом коэффициента (из массива коэффициентов). -// В случае если распределить не удалось (сумма = 0, кол-во коэффициентов = 0, -// или суммарный вес коэффициентов = 0), тогда возвращается значение Неопределено. +// В случае, если распределить невозможно (кол-во коэффициентов = 0, +// есть коэффициенты с отрицательным значением или суммарный вес коэффициентов = 0), +// тогда будет возвращено Неопределено. +// +// Пример: +// +// Коэффициенты = Новый Массив; +// Коэффициенты.Добавить(1); +// Коэффициенты.Добавить(2); +// Результат = ОбщегоНазначенияКлиентСервер.РаспределитьСуммуПропорциональноКоэффициентам(1, Коэффициенты); +// // Результат = [0.33, 0.67] // Функция РаспределитьСуммуПропорциональноКоэффициентам(Знач РаспределяемаяСумма, Знач Коэффициенты, Знач Точность = 2) Экспорт - Если Коэффициенты.Количество() = 0 Или Не ЗначениеЗаполнено(РаспределяемаяСумма) Тогда + // Старое поведение при неуказанной сумме - для обратной совместимости. + Если Не ЗначениеЗаполнено(РаспределяемаяСумма) Тогда + Возврат Неопределено; + КонецЕсли; + + Если Коэффициенты.Количество() = 0 Тогда + // Недопустимо значение параметра Коэффициенты + // Ожидалось: хотя бы один коэффициент будет задан. Возврат Неопределено; КонецЕсли; ИндексМаксимальногоКоэффициента = 0; МаксимальныйКоэффициент = 0; - РаспределеннаяСумма = 0; СуммаКоэффициентов = 0; Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл Коэффициент = Коэффициенты[Индекс]; - АбсолютноеЗначениеКоэффициента = ?(Коэффициент > 0, Коэффициент, -Коэффициент); - Если МаксимальныйКоэффициент < АбсолютноеЗначениеКоэффициента Тогда - МаксимальныйКоэффициент = АбсолютноеЗначениеКоэффициента; + Если Коэффициент < 0 Тогда + // Недопустимо значение параметра Коэффициенты + // Ожидалось: все значения коэффициентов будут неотрицательны. + Возврат Неопределено; + КонецЕсли; + + Если МаксимальныйКоэффициент < Коэффициент Тогда + МаксимальныйКоэффициент = Коэффициент; ИндексМаксимальногоКоэффициента = Индекс; КонецЕсли; @@ -2932,30 +3003,39 @@ КонецЦикла; Если СуммаКоэффициентов = 0 Тогда + // Недопустимо значение параметра Коэффициенты + // Ожидалось: хотя бы один коэффициент будет больше нуля. Возврат Неопределено; КонецЕсли; Результат = Новый Массив(Коэффициенты.Количество()); + ВыполнятьИнверсию = (РаспределяемаяСумма < 0); + Если ВыполнятьИнверсию Тогда + РаспределяемаяСумма = -РаспределяемаяСумма; // Abs(РаспределяемаяСумма). + КонецЕсли; + + РаспределеннаяСумма = 0; + Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл Результат[Индекс] = Окр(РаспределяемаяСумма * Коэффициенты[Индекс] / СуммаКоэффициентов, Точность, 1); РаспределеннаяСумма = РаспределеннаяСумма + Результат[Индекс]; КонецЦикла; - Дельта = РаспределяемаяСумма - РаспределеннаяСумма; + СуммарнаяПогрешность = РаспределяемаяСумма - РаспределеннаяСумма; - Если Дельта > 0 Тогда + Если СуммарнаяПогрешность > 0 Тогда // Погрешности округления отнесем на коэффициент с максимальным весом. Если Не РаспределеннаяСумма = РаспределяемаяСумма Тогда - Результат[ИндексМаксимальногоКоэффициента] = Результат[ИндексМаксимальногоКоэффициента] + Дельта; + Результат[ИндексМаксимальногоКоэффициента] = Результат[ИндексМаксимальногоКоэффициента] + СуммарнаяПогрешность; КонецЕсли; - ИначеЕсли Дельта < 0 Тогда + ИначеЕсли СуммарнаяПогрешность < 0 Тогда // Если распределили больше чем положено, размазываем погрешность по ближайшим максимальным весам. ЗначениеПогрешности = 1 / Pow(10, Точность); - КоличествоЭлементовПогрешности = -Дельта / ЗначениеПогрешности; + КоличествоЭлементовПогрешности = -СуммарнаяПогрешность / ЗначениеПогрешности; КоэффициентыРешето = Новый Массив(Новый ФиксированныйМассив(Коэффициенты)); @@ -2967,13 +3047,235 @@ КонецЦикла; Иначе - // Если Дельта = 0, то все идеально. + // Если СуммарнаяПогрешность = 0, то все идеально. + КонецЕсли; + + Если ВыполнятьИнверсию Тогда + Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл + Результат[Индекс] = -Результат[Индекс]; + КонецЦикла; КонецЕсли; Возврат Результат; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с внешними приложениями. + +// Возвращает структуру параметров для см. процедуру ЗапуститьПрограмму. +// +// Возвращаемое значение: +// ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. +// ДождатьсяЗавершения - Булево - Истина - дожидаться завершения запущенного приложения +// перед продолжением работы. +// ПолучитьПотокВывода - Булево - Истина - результат, направленный в поток stdout, +// если не указан ДождатьсяЗавершения - игнорируется. +// ПолучитьПотокОшибок - Булево - Истина - ошибки, направленные в поток stderr, +// если не указан ДождатьсяЗавершения - игнорируется. +// ВыполнитьСНаивысшимиПравами - Булево - Истина - требуется запустить программу на исполнение +// с повышением привилегий системы (подтверждение UAC). +// Не совместим с параметром ДождатьсяЗавершения. +// В Linux и MacOS игнорируется. +// +Функция ПараметрыЗапускаПрограммы() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ТекущийКаталог", ""); + Параметры.Вставить("ДождатьсяЗавершения", Ложь); + Параметры.Вставить("ПолучитьПотокВывода", Ложь); + Параметры.Вставить("ПолучитьПотокОшибок", Ложь); + Параметры.Вставить("ВыполнитьСНаивысшимиПравами", Ложь); // для переводчиков: RunWithElevatedPermissions. + + Возврат Параметры; + +КонецФункции + +// Запускает внешнюю программу в соответствии с параметрами запуска. +// Не доступно в веб-клиенте. +// +// Параметры: +// СтрокаКоманды - Строка - Командная строка для запуска программы. +// ПараметрыЗапускаПрограммы - Структура, Неопределено - см. функцию ПараметрыЗапускаПрограммы. +// +// Возвращаемое значение: +// Структура - Результат работы программы. +// КодВозврата - Число - код возврата программы. +// ПотокВывода - Строка - результат работы программы, направленный в поток stdout. +// ПотокОшибок - Строка - ошибки исполнения программы, направленные в поток stderr. +// +// Пример: +// ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму("calc"); +// +// ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); +// ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами = Истина; +// ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму("C:\Program Files\1cv8\common\1cestart.exe", +// ПараметрыЗапускаПрограммы); +// +// ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); +// ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; +// Результат = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыЗапускаПрограммы); +// +Функция ЗапуститьПрограмму(Знач СтрокаКоманды, ПараметрыЗапускаПрограммы = Неопределено) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение НСтр("ru = 'Запуск программ недоступен в веб-клиенте.'"); +#Иначе + + Если СодержитНебезопасныеДействия(СтрокаКоманды) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимая строка команды: + |%1 + |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), + СтрокаКоманды); + КонецЕсли; + + Если ПараметрыЗапускаПрограммы = Неопределено Тогда + ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); + КонецЕсли; + + ТекущийКаталог = ПараметрыЗапускаПрограммы.ТекущийКаталог; + ДождатьсяЗавершения = ПараметрыЗапускаПрограммы.ДождатьсяЗавершения; + ПолучитьПотокВывода = ПараметрыЗапускаПрограммы.ПолучитьПотокВывода; + ПолучитьПотокОшибок = ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок; + ВыполнитьСНаивысшимиПравами = ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами; + + Если ВыполнитьСНаивысшимиПравами Тогда +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами. + |Повешение привилегий системы не доступно на сервере.'"); +#КонецЕсли + + Если ДождатьсяЗавершения Тогда + ВызватьИсключение НСтр("ru = 'Недопустимо одновременно устанавливать параметры + | - ПараметрыЗапускаПрограммы.ДождатьсяЗавершения и + | - ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами: + |Операционная система не позволяет отслеживать от имени пользователя процессы, + |запущенные администратором.'"); + КонецЕсли; + КонецЕсли; + + Если ДождатьсяЗавершения Тогда + + Если ПолучитьПотокВывода Тогда + ФайлПотокаВывода = ПолучитьИмяВременногоФайла("stdout.tmp"); + СтрокаКоманды = СтрокаКоманды + " > """ + ФайлПотокаВывода + """"; + КонецЕсли; + + Если ПолучитьПотокОшибок Тогда + ФайлПотокаОшибок = ПолучитьИмяВременногоФайла("stderr.tmp"); + СтрокаКоманды = СтрокаКоманды + " 2>""" + ФайлПотокаОшибок + """"; + КонецЕсли; + + КонецЕсли; + + Если Не ПустаяСтрока(ТекущийКаталог) Тогда + СтрокаКоманды = "cd """ + ТекущийКаталог + """ && " + СтрокаКоманды; + КонецЕсли; + + КодВозврата = Неопределено; + + СистемнаяИнформация = Новый СистемнаяИнформация(); + Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) + Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + + // Для Windows выполняем запуск через cmd.exe (для перенаправления stdout и stderr). + СтрокаКоманды = "cmd /c """ + СтрокаКоманды + """"; + +#Если Сервер Тогда + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + // В файловой информационной базе показывать окно консоли не следует и в серверном контексте. + Оболочка = Новый COMОбъект("Wscript.Shell"); + // Run запускает новый процесс, не являющийся дочерним текущего процесса (в отличии от Exec). + КодВозврата = Оболочка.Run(СтрокаКоманды, 0, ДождатьсяЗавершения); + Оболочка = Неопределено; + Иначе + ЗапуститьПриложение(СтрокаКоманды,, ДождатьсяЗавершения, КодВозврата); + КонецЕсли; +#Иначе + Если ВыполнитьСНаивысшимиПравами Тогда + + // После начала исполнения файла команды отследить статус процесса будет невозможно, + // Потому удалять batch файл следует последней строкой команды в самом batch файле. + // Асинхронно удалять нельзя, иначе может наступить коллизия, + // когда идет попытка удаления, а запуск еще не состоялся. + + ФайлКоманды = ПолучитьИмяВременногоФайла("runas.bat"); + ЗаписьКоманды = Новый ЗаписьТекста(ФайлКоманды, КодировкаТекста.OEM); + ЗаписьКоманды.ЗаписатьСтроку(СтрокаКоманды); + ЗаписьКоманды.ЗаписатьСтроку("del /f /q """ + ФайлКоманды + """"); + ЗаписьКоманды.Закрыть(); + + Оболочка = Новый COMОбъект("Shell.Application"); + // Запуск с передачей глагола действия - повышения привилегий. + Оболочка.ShellExecute("cmd", "/c """ + ФайлКоманды + """",, "runas", 0); + Оболочка = Неопределено; + + Иначе + Оболочка = Новый COMОбъект("Wscript.Shell"); + // Run запускает новый процесс, не являющийся дочерним текущего процесса (в отличии от Exec). + КодВозврата = Оболочка.Run(СтрокаКоманды, 0, ДождатьсяЗавершения); + Оболочка = Неопределено; + КонецЕсли; +#КонецЕсли + + Иначе + // Для ОС Linux и MacOS просто запускаем команду. + // Параметр ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами игнорируется. + ЗапуститьПриложение(СтрокаКоманды,, ДождатьсяЗавершения, КодВозврата); + + КонецЕсли; + + // Переопределение возвращенного оболочной значения. + Если КодВозврата = Неопределено Тогда + КодВозврата = 0; + КонецЕсли; + + ПотокВывода = ""; + ПотокОшибок = ""; + + Если ДождатьсяЗавершения Тогда + + Если ПолучитьПотокВывода Тогда + + ЧтениеПотокаВывода = Новый ЧтениеТекста(ФайлПотокаВывода, КодировкаСтандартныхПотоков()); + ПотокВывода = ЧтениеПотокаВывода.Прочитать(); + ЧтениеПотокаВывода.Закрыть(); + + УдалитьВременныйФайл(ФайлПотокаВывода); + + Если ПотокВывода = Неопределено Тогда + ПотокВывода = ""; + КонецЕсли; + + КонецЕсли; + + Если ПолучитьПотокОшибок Тогда + + ЧтениеПотокаОшибок = Новый ЧтениеТекста(ФайлПотокаОшибок, КодировкаСтандартныхПотоков()); + ПотокОшибок = ЧтениеПотокаОшибок.Прочитать(); + ЧтениеПотокаОшибок.Закрыть(); + + УдалитьВременныйФайл(ФайлПотокаОшибок); + + Если ПотокОшибок = Неопределено Тогда + ПотокОшибок = ""; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("КодВозврата", КодВозврата); + Результат.Вставить("ПотокВывода", ПотокВывода); + Результат.Вставить("ПотокОшибок", ПотокОшибок); + + Возврат Результат; + +#КонецЕсли + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -3140,8 +3442,10 @@ Возврат ОжидаемыеТипы.Типы().Найти(ТипЗначения) <> Неопределено; ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Тип") Тогда Возврат ТипЗначения = ОжидаемыеТипы; - ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Массив") Тогда + ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Массив") Или ТипЗнч(ОжидаемыеТипы) = Тип("ФиксированныйМассив") Тогда Возврат ОжидаемыеТипы.Найти(ТипЗначения) <> Неопределено; + ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Соответствие") Или ТипЗнч(ОжидаемыеТипы) = Тип("ФиксированноеСоответствие") Тогда + Возврат ОжидаемыеТипы.Получить(ТипЗначения) <> Неопределено; КонецЕсли; Возврат Неопределено; КонецФункции @@ -3168,9 +3472,8 @@ Для Индекс = 0 По Массив.Количество() - 1 Цикл Значение = Массив[Индекс]; - АбсолютноеЗначение = ?(Значение > 0, Значение, -Значение); - Если МаксимальноеЗначение < АбсолютноеЗначение Тогда - МаксимальноеЗначение = АбсолютноеЗначение; + Если МаксимальноеЗначение < Значение Тогда + МаксимальноеЗначение = Значение; КонецЕсли; КонецЦикла; @@ -3178,4 +3481,56 @@ КонецФункции +Функция СодержитНебезопасныеДействия(СтрокаКоманды) + + Возврат СтрНайти(СтрокаКоманды, "$") <> 0 + Или СтрНайти(СтрокаКоманды, "`") <> 0 + Или СтрНайти(СтрокаКоманды, "|") <> 0 + Или СтрНайти(СтрокаКоманды, ";") <> 0 + Или СтрНайти(СтрокаКоманды, "&") <> 0; + +КонецФункции + +// Возвращает кодировку стандартных поток вывода и ошибок, используемую в текущей ОС. +// +// Возвращаемое значение: +// КодировкаТекста - кодировка стандартных потоков вывода и ошибок. +// +Функция КодировкаСтандартныхПотоков() + + СистемнаяИнформация = Новый СистемнаяИнформация(); + Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) + Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + + Кодировка = КодировкаТекста.OEM; + Иначе + Кодировка = КодировкаТекста.Системная; + КонецЕсли; + + Возврат Кодировка; + +КонецФункции + +Процедура УдалитьВременныйФайл(ПолноеИмяФайла) + + Если ПустаяСтрока(ПолноеИмяФайла) Тогда + Возврат; + КонецЕсли; + + Попытка + УдалитьФайлы(ПолноеИмяФайла); + Исключение +#Если Сервер Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Базовая функциональность'", КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Предупреждение,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить временный файл + |%1 по причине: %2'"), + ПолноеИмяФайла, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); +#КонецЕсли + КонецПопытки; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl index 0feaaf18e..dc1364556 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl @@ -343,20 +343,6 @@ КонецФункции -// Возвращает признак принадлежности узла к плану обмена РИБ. -// -// Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// -// Возвращаемое значение: -// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. -// -Функция ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) Экспорт - - Возврат УзелИнформационнойБазы.Метаданные().РаспределеннаяИнформационнаяБаза; - -КонецФункции - // Возвращает Истина, если программа работает в режиме автономного рабочего места. Функция ЭтоАвтономноеРабочееМесто() Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl index 473b58f9b..016cb8216 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl @@ -6,13 +6,13 @@ #Область СлужебныйПрограммныйИнтерфейс // Параметры: -// Контекст - Структура - контекст процедуры: -// * Оповещение - ОписаниеОповещения - . -// * Идентификатор - Строка - . -// * Местоположение - Строка - . -// * Кэшировать - Булево - . -// * ПредложитьУстановить - Булево - . -// * ТекстПояснения - Строка - . +// Контекст - Структура - контекст процедуры: +// * Оповещение - ОписаниеОповещения - . +// * Идентификатор - Строка - . +// * Местоположение - Строка - . +// * Кэшировать - Булево - . +// * ПредложитьУстановить - Булево - . +// * ТекстПояснения - Строка - . // Процедура ПодключитьКомпоненту(Контекст) Экспорт @@ -44,23 +44,23 @@ КонецЕсли; КонецЕсли; - + СимволическоеИмя = "С" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""); //генерация уникального имени Контекст.Вставить("СимволическоеИмя", СимволическоеИмя); Оповещение = Новый ОписаниеОповещения( "ПодключитьКомпонентуЗавершение", ЭтотОбъект, Контекст, "ПодключитьКомпонентуЗавершениеПоОшибке", ЭтотОбъект); - + НачатьПодключениеВнешнейКомпоненты(Оповещение, Контекст.Местоположение, СимволическоеИмя); - + КонецПроцедуры // Параметры: -// Контекст - Структура - контекст процедуры: -// * Оповещение - ОписаниеОповещения - . -// * Местоположение - Строка - . -// * ТекстПояснения - Строка - . +// Контекст - Структура - контекст процедуры: +// * Оповещение - ОписаниеОповещения - . +// * Местоположение - Строка - . +// * ТекстПояснения - Строка - . // Процедура УстановитьКомпоненту(Контекст) Экспорт @@ -81,6 +81,18 @@ КонецПроцедуры +// Проверяет, является ли переданная строка внутренней навигационной ссылкой. +// +// Параметры: +// Строка - Строка - навигационная ссылка. +// +Функция ЭтоНавигационнаяСсылка(Строка) Экспорт + + Возврат СтрНачинаетсяС(Строка, "e1c:") + Или СтрНачинаетсяС(Строка, "e1cib/"); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -320,13 +332,13 @@ Возврат; КонецЕсли; - + Результат.Вставить("ОписаниеОшибки", НСтр("ru = 'Ошибка при подключении внешней компоненты'")); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); Возврат; КонецЕсли; - + Попытка Если Контекст.ИдентификаторыСозданияОбъектов.Количество() = 0 Тогда @@ -340,7 +352,7 @@ Иначе ПодключаемыеМодули = Новый Соответствие; - Для Каждого Идентификатор Из Контекст.ИдентификаторыСозданияОбъектов Цикл + Для каждого Идентификатор Из Контекст.ИдентификаторыСозданияОбъектов Цикл ПодключаемыйМодуль = Новый("AddIn." + Контекст.СимволическоеИмя + "." + Идентификатор); @@ -360,7 +372,7 @@ Результат.Вставить("Подключено" , Ложь); Результат.Вставить("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - + Если Контекст.Кэшировать Тогда // Помещение в кэш экземпляра внешней компоненты. @@ -416,7 +428,7 @@ Контекст.ПредложитьУстановить = Ложь; // Одна попытка установки уже прошла. ПодключитьКомпоненту(Контекст); - + КонецПроцедуры // Продолжение процедуры ПодключитьКомпоненту. @@ -467,9 +479,6 @@ "УстановитьКомпонентуЗавершение", ЭтотОбъект, Контекст, "УстановитьКомпонентуЗавершениеПоОшибке", ЭтотОбъект); - // Если компонента была ранее подключена, то выдается интерактивное сообщение платформой вместо исключения. - // Скорее всего ошибка платформы. - НачатьУстановкуВнешнейКомпоненты(Оповещение, Контекст.Местоположение); КонецПроцедуры @@ -499,4 +508,462 @@ #КонецОбласти +#Область ОткрытьПроводник + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. +Процедура ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + + Если РасширениеПодключено Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьПроводникПослеПроверкиСуществования", ЭтотОбъект, Контекст); + ФайлИнфо.НачатьПроверкуСуществования(Оповещение); + Иначе + ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие папки не возможно.'"); + ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. +Процедура ОткрытьПроводникПослеПроверкиСуществования(Существует, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + + Если Существует Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьПроводникПослеПроверкиЭтоФайл", ЭтотОбъект, Контекст); + ФайлИнфо.НачатьПроверкуЭтоФайл(Оповещение); + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдена папка, которую требуется открыть в проводнике: + |""%1""'"), + ФайлИнфо.ПолноеИмя); + ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. +Процедура ОткрытьПроводникПослеПроверкиЭтоФайл(ЭтоФайл, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + + Оповещение = Новый ОписаниеОповещения("ОткрытьПроводникПослеОткрытияКаталога", ЭтотОбъект); + Если ЭтоФайл Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + НачатьЗапускПриложения(Оповещение, "explorer.exe /select, """ + ФайлИнфо.ПолноеИмя + """"); + Иначе // Это Linux или MacOS. + НачатьЗапускПриложения(Оповещение, "file:///" + ФайлИнфо.Путь); + КонецЕсли; + Иначе // Это каталог. + НачатьЗапускПриложения(Оповещение, "file:///" + ФайлИнфо.ПолноеИмя); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. +Процедура ОткрытьПроводникПослеОткрытияКаталога(КодВозврата, Контекст) Экспорт + + Возврат; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +Процедура ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст) + + Если Не ПустаяСтрока(ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОткрытьФайлВПрограммеПросмотра + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. +Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + + Если РасширениеПодключено Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлВПрограммеПросмотраПослеПроверкиСуществования", + ЭтотОбъект, Контекст); + ФайлИнфо.НачатьПроверкуСуществования(Оповещение); + Иначе + ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие файла невозможно.'"); + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. +Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиСуществования(Существует, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + + Если Существует Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлВПрограммеПросмотраПослеПроверкиЭтоФайл", + ЭтотОбъект, Контекст); + ФайлИнфо.НачатьПроверкуЭтоФайл(Оповещение); + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найден файл, который требуется открыть: + |%1'"), + ФайлИнфо.ПолноеИмя); + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. +Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиЭтоФайл(ЭтоФайл, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + + Если ЭтоФайл Тогда + + Если ПустаяСтрока(ФайлИнфо.Расширение) Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Имя файла не содержит расширения: + |%1'"), + ФайлИнфо.ПолноеИмя); + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Возврат; + КонецЕсли; + + Если ЭтоРасширениеИсполняемогоФайла(ФайлИнфо.Расширение) Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Исполняемые файлы открывать запрещено: + |%1'"), + ФайлИнфо.ПолноеИмя); + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Возврат; + КонецЕсли; + + Оповещение = Контекст.Оповещение; + ДождатьсяЗавершения = (Оповещение <> Неопределено); + + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлВПрограммеПросмотраПослеЗапускаПриложения", ЭтотОбъект, Контекст, + "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, ФайлИнфо.ПолноеИмя,, ДождатьсяЗавершения); + + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найден файл, который требуется открыть: + |%1'"), + ФайлИнфо.ПолноеИмя); + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. +Процедура ОткрытьФайлВПрограммеПросмотраПослеЗапускаПриложения(КодВозврата, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Если Оповещение <> Неопределено Тогда + ПриложениеЗапущено = (КодВозврата = 0); + ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. +Процедура ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке("", Контекст); + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. +Процедура ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст) + + Оповещение = Контекст.Оповещение; + + Если Оповещение = Неопределено Тогда + Если Не ПустаяСтрока(ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + Иначе + ПриложениеЗапущено = Ложь; + ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// Расширение - Строка - свойство Расширение объекта Файл. +// +Функция ЭтоРасширениеИсполняемогоФайла(Знач Расширение) + + Расширение = ВРег(Расширение); + + // Windows + Возврат Расширение = ".BAT" // Batch File + Или Расширение = ".BIN" // Binary Executable + Или Расширение = ".CMD" // Command Script + Или Расширение = ".COM" // Приложение MS-DOS + Или Расширение = ".CPL" // Control Panel Extension + Или Расширение = ".EXE" // Исполняемый файл + Или Расширение = ".GADGET" // Binary Executable + Или Расширение = ".HTA" // HTML Application + Или Расширение = ".INF1" // Setup Information File + Или Расширение = ".INS" // Internet Communication Settings + Или Расширение = ".INX" // InstallShield Compiled Script + Или Расширение = ".ISU" // InstallShield Uninstaller Script + Или Расширение = ".JOB" // Windows Task Scheduler Job File + Или Расширение = ".LNK" // File Shortcut + Или Расширение = ".MSC" // Microsoft Common Console Document + Или Расширение = ".MSI" // Windows Installer Package + Или Расширение = ".MSP" // Windows Installer Patch + Или Расширение = ".MST" // Windows Installer Setup Transform File + Или Расширение = ".OTM" // Макрос Microsoft Outlook + Или Расширение = ".PAF" // Portable Application Installer File + Или Расширение = ".PIF" // Program Information File + Или Расширение = ".PS1" // Windows PowerShell Cmdlet + Или Расширение = ".REG" // Registry Data File + Или Расширение = ".RGS" // Registry Script + Или Расширение = ".SCT" // Windows Scriptlet + Или Расширение = ".SHB" // Windows Document Shortcut + Или Расширение = ".SHS" // Shell Scrap Object + Или Расширение = ".U3P" // U3 Smart Application + Или Расширение = ".VB" // VBScript File + Или Расширение = ".VBE" // VBScript Encoded Script + Или Расширение = ".VBS" // VBScript File + Или Расширение = ".VBSCRIPT" // Visual Basic Script + Или Расширение = ".WS" // Windows Script + Или Расширение = ".WSF" // Windows Script + // Linux + Или Расширение = ".CSH" // C Shell Script + Или Расширение = ".KSH" // Unix Korn Shell Script + Или Расширение = ".OUT" // Исполняемый файл + Или Расширение = ".RUN" // Исполняемый файл + Или Расширение = ".SH" // Shell Script + // MacOS + Или Расширение = ".ACTION" // Automator Action + Или Расширение = ".APP" // Исполняемый файл + Или Расширение = ".COMMAND" // Terminal Command + Или Расширение = ".OSX" // Исполняемый файл + Или Расширение = ".WORKFLOW" // Automator Workflow + // Прочие + Или Расширение = ".AIR" // Установочный пакет Adobe AIR + Или Расширение = ".COFFIE" // Сценарий CoffeeScript (JavaScript) + Или Расширение = ".JAR" // Архив Java + Или Расширение = ".JS" // JScript File + Или Расширение = ".JSE" // JScript Encoded File + Или Расширение = ".PLX" // Исполняемый файл Perl + Или Расширение = ".PYC" // Компилированный файл Python + Или Расширение = ".PYO"; // Оптимизированный код Python + +КонецФункции + +#КонецОбласти + +#Область ОткрытьНавигационнуюСсылку + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +Процедура ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + НавигационнаяСсылка = Контекст.НавигационнаяСсылка; + + Если РасширениеПодключено Тогда + + Оповещение = Контекст.Оповещение; + ДождатьсяЗавершения = (Оповещение <> Неопределено); + + Оповещение = Новый ОписаниеОповещения("ОткрытьНавигационнуюСсылкуПослеЗапускаПриложения", ЭтотОбъект, Контекст, + "ОткрытьНавигационнуюСсылкуПриОбработкеОшибки", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, НавигационнаяСсылка,, ДождатьсяЗавершения); + + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Расширение для работы с файлами не установлено, переход по ссылке ""%1"" невозможен.'"), + НавигационнаяСсылка); + ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +Процедура ОткрытьНавигационнуюСсылкуПослеЗапускаПриложения(КодВозврата, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Если Оповещение <> Неопределено Тогда + ПриложениеЗапущено = (КодВозврата = 0 Или КодВозврата = Неопределено); + ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +Процедура ОткрытьНавигационнуюСсылкуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ОткрытьНавигационнуюСсылкуОповеститьОбОшибке("", Контекст); + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +Процедура ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Если Оповещение = Неопределено Тогда + Если Не ПустаяСтрока(ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + Иначе + ПриложениеЗапущено = Ложь; + ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); + КонецЕсли; + +КонецПроцедуры + +// Проверяет, является ли переданная строка веб ссылкой. +// +// Параметры: +// Строка - Строка - переданная ссылка. +// +Функция ЭтоВебСсылка(Строка) Экспорт + + Возврат СтрНачинаетсяС(Строка, "http://") // обычное соединение. + Или СтрНачинаетсяС(Строка, "https://");// защищенное соединение. + +КонецФункции + +// Проверяет, является ли переданная строка ссылкой на встроенную справку. +// +// Параметры: +// Строка - Строка - переданная ссылка. +// +Функция ЭтоСсылкаНаСправку(Строка) Экспорт + + Возврат СтрНачинаетсяС(Строка, "v8help://"); + +КонецФункции + +// Проверяет, является ли переданная строка допустимой ссылкой по белому списку протоколов. +// +// Параметры: +// Строка - Строка - переданная ссылка. +// +Функция ЭтоДопустимаяСсылка(Строка) Экспорт + + Возврат СтрНачинаетсяС(Строка, "e1cib/") + Или СтрНачинаетсяС(Строка, "http:") + Или СтрНачинаетсяС(Строка, "https:") + Или СтрНачинаетсяС(Строка, "e1c:") + Или СтрНачинаетсяС(Строка, "v8help:") + Или СтрНачинаетсяС(Строка, "mailto:") + Или СтрНачинаетсяС(Строка, "tel:") + Или СтрНачинаетсяС(Строка, "skype:"); + +КонецФункции + +#КонецОбласти + +#Область ЗапуститьПрограмму + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + Если РасширениеПодключено Тогда + + СтрокаКоманды = Контекст.СтрокаКоманды; + ТекущийКаталог = Контекст.ТекущийКаталог; + Оповещение = Контекст.Оповещение; + + ДождатьсяЗавершения = (Оповещение <> Неопределено); + + Оповещение = Новый ОписаниеОповещения("ЗапуститьПрограммуПослеЗапускаПриложения", ЭтотОбъект, Контекст, + "ЗапуститьПрограммуПриОбработкеОшибки", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); + + Иначе + ОписаниеОшибки = + НСтр("ru = 'Расширение для работы с файлами не установлено, запуск программы невозможен.'"); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуПослеЗапускаПриложения(КодВозврата, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + ДождатьсяЗавершения = (Оповещение <> Неопределено); + + Если ДождатьсяЗавершения Тогда + + Если КодВозврата = Неопределено Тогда + ОписаниеОшибки = + НСтр("ru = 'Произошла неизвестная ошибка при запуске программы.'"); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Иначе + Результат = РезультатЗапускаПрограммы(); + Результат.ПриложениеЗапущено = Истина; + Результат.КодВозврата = КодВозврата; + + ВыполнитьОбработкуОповещения(Оповещение, Результат); + КонецЕсли; + КонецЕсли + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Если Оповещение = Неопределено Тогда + Если Не ПустаяСтрока(ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + Иначе + Результат = РезультатЗапускаПрограммы(); + Результат.ОписаниеОшибки = ОписаниеОшибки; + ВыполнитьОбработкуОповещения(Оповещение, Результат); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Функция РезультатЗапускаПрограммы() + + Результат = Новый Структура; + Результат.Вставить("ПриложениеЗапущено", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + Результат.Вставить("КодВозврата", -13); + + Возврат Результат; + +КонецФункции + +// Проверяет содержит ли строка команды опасные действия +Функция СодержитНебезопасныеДействия(СтрокаКоманды) Экспорт + + Возврат СтрНайти(СтрокаКоманды, "$") <> 0 + Или СтрНайти(СтрокаКоманды, "`") <> 0 + Или СтрНайти(СтрокаКоманды, "|") <> 0 + Или СтрНайти(СтрокаКоманды, ";") <> 0 + Или СтрНайти(СтрокаКоманды, "&") <> 0; + +КонецФункции + +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl index a87908e87..c21426acc 100644 --- a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl @@ -35,25 +35,16 @@ ИмяОтправителя = НастройкиОтправкиSMS.ИмяОтправителя; КонецЕсли; - Если НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.МТС Тогда // МТС - Результат = ОтправкаSMSЧерезМТС.ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, + ПровайдерыSMS = Новый Соответствие; + Для Каждого Провайдер Из Метаданные.Перечисления.ПровайдерыSMS.ЗначенияПеречисления Цикл + ПровайдерыSMS.Вставить(Перечисления.ПровайдерыSMS[Провайдер.Имя], Провайдер.Имя); + КонецЦикла; + + МодульОтправкаSMSЧерезПровайдера = МодульОтправкаSMSЧерезПровайдера(НастройкиОтправкиSMS.Провайдер); + Если МодульОтправкаSMSЧерезПровайдера <> Неопределено Тогда + Результат = МодульОтправкаSMSЧерезПровайдера.ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.Билайн Тогда // Билайн - Результат = ОтправкаSMSЧерезБилайн.ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, - НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.SMSRU Тогда // SMS.RU - Результат = ОтправкаSMSЧерезSMSRU.ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, - НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.SMSЦЕНТР Тогда // SMS-ЦЕНТР - Результат = ОтправкаSMSЧерезSMSЦЕНТР.ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, - НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.СМСУслуги Тогда // СМС-услуги - Результат = ОтправкаSMSЧерезСМСУслуги.ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, - НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.GSMINFORM Тогда // GSM-INFORM - Результат = ОтправкаSMSЧерезGSMINFORM.ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, - НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль); - ИначеЕсли ЗначениеЗаполнено(НастройкиОтправкиSMS.Провайдер) Тогда // Другой + Иначе ПараметрыОтправки = Новый Структура; ПараметрыОтправки.Вставить("НомераПолучателей", НомераПолучателей); ПараметрыОтправки.Вставить("Текст", Текст); @@ -64,12 +55,16 @@ ОтправкаSMSПереопределяемый.ОтправитьSMS(ПараметрыОтправки, Результат); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( - "ОтправкаSMSПереопределяемый.ОтправитьSMS", - "Результат", - Результат, - Тип("Структура"), - Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Тип("Массив"), Тип("Строка"))); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ОтправкаSMSПереопределяемый.ОтправитьSMS", "Результат", Результат, + Тип("Структура"), Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Тип("Массив"), Тип("Строка"))); + + Если Не ЗначениеЗаполнено(Результат.ОписаниеОшибки) И Не ЗначениеЗаполнено(Результат.ОтправленныеСообщения) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при выходе из процедуры ОтправкаSMSПереопределяемый.ОтправитьSMS: + |Не заполнены выходные параметры ОписаниеОшибки и ОтправленныеСообщения (провайдер: %1). + |Ожидается заполнение по меньшей мере одного из этих параметров.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НастройкиОтправкиSMS.Провайдер); + КонецЕсли; + Если Результат.ОтправленныеСообщения.Количество() > 0 Тогда ОбщегоНазначенияКлиентСервер.Проверить( ТипЗнч(Результат.ОтправленныеСообщения[0]) = Тип("Структура"), @@ -118,20 +113,7 @@ КонецЕсли; НастройкиОтправкиSMS = ОтправкаSMSПовтИсп.НастройкиОтправкиSMS(); - - Если НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.СМСУслуги Тогда - ЧастиИдентификатора = СтрРазделить(ИдентификаторСообщения, "/", Истина); - НомерПолучателя = ЧастиИдентификатора[0]; - ИдентификаторСообщения = ЧастиИдентификатора[1]; - КонецЕсли; - Результат = ОтправкаSMSПовтИсп.СтатусДоставки(ИдентификаторСообщения); - Если ТипЗнч(Результат) = Тип("Соответствие") Тогда - Результат = Результат[НомерПолучателя]; - Если Результат = Неопределено Тогда - Результат = "НеОтправлялось"; - КонецЕсли; - КонецЕсли; Возврат Результат; @@ -144,22 +126,16 @@ Функция НастройкаОтправкиSMSВыполнена() Экспорт УстановитьПривилегированныйРежим(Истина); - - Результат = Истина; - НастройкиОтправкиSMS = ОтправкаSMSПовтИсп.НастройкиОтправкиSMS(); - Провайдер = НастройкиОтправкиSMS.Провайдер; - Если Провайдер = Перечисления.ПровайдерыSMS.МТС Или Провайдер = Перечисления.ПровайдерыSMS.Билайн Тогда - Результат = Не ПустаяСтрока(НастройкиОтправкиSMS.Логин) И Не ПустаяСтрока(НастройкиОтправкиSMS.Пароль); - ИначеЕсли ЗначениеЗаполнено(НастройкиОтправкиSMS.Провайдер) Тогда - Отказ = Ложь; + УстановитьПривилегированныйРежим(Ложь); + + Если ЗначениеЗаполнено(НастройкиОтправкиSMS.Провайдер) Тогда + Отказ = ПустаяСтрока(НастройкиОтправкиSMS.Логин) Или ПустаяСтрока(НастройкиОтправкиSMS.Пароль); ОтправкаSMSПереопределяемый.ПриПроверкеНастроекОтправкиSMS(НастройкиОтправкиSMS, Отказ); - Результат = Не Отказ; - Иначе - Результат = Ложь; + Возврат Не Отказ; КонецЕсли; - Возврат Результат; + Возврат Ложь; КонецФункции @@ -204,24 +180,12 @@ МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); - ЗапросыРазрешений.Добавить( - МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ОтправкаSMSЧерезБилайн.Разрешения())); + Для Каждого МодульПровайдера Из МодулиПровайдеров() Цикл + МодульОтправкаSMSЧерезПровайдера = МодульПровайдера.Значение; + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(МодульОтправкаSMSЧерезПровайдера.Разрешения())); + КонецЦикла; - ЗапросыРазрешений.Добавить( - МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ОтправкаSMSЧерезМТС.Разрешения())); - - ЗапросыРазрешений.Добавить( - МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ОтправкаSMSЧерезSMSRU.Разрешения())); - - ЗапросыРазрешений.Добавить( - МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ОтправкаSMSЧерезSMSЦЕНТР.Разрешения())); - - ЗапросыРазрешений.Добавить( - МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ОтправкаSMSЧерезСМСУслуги.Разрешения())); - - ЗапросыРазрешений.Добавить( - МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ОтправкаSMSЧерезGSMINFORM.Разрешения())); - ЗапросыРазрешений.Добавить( МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ДополнительныеРазрешения())); @@ -244,4 +208,21 @@ КонецЕсли; КонецПроцедуры +Функция МодульОтправкаSMSЧерезПровайдера(Провайдер) Экспорт + Возврат МодулиПровайдеров()[Провайдер]; +КонецФункции + +Функция МодулиПровайдеров() + Результат = Новый Соответствие; + + Для Каждого ОбъектМетаданных Из Метаданные.Перечисления.ПровайдерыSMS.ЗначенияПеречисления Цикл + ИмяМодуля = "ОтправкаSMSЧерез" + ОбъектМетаданных.Имя; + Если Метаданные.ОбщиеМодули.Найти(ИмяМодуля) <> Неопределено Тогда + Результат.Вставить(Перечисления.ПровайдерыSMS[ОбъектМетаданных.Имя], ОбщегоНазначения.ОбщийМодуль(ИмяМодуля)); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl index d6914d07e..36e4cd4a8 100644 --- a/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl @@ -11,18 +11,9 @@ Результат = Неопределено; НастройкиОтправкиSMS = НастройкиОтправкиSMS(); - Если НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.МТС Тогда - Результат = ОтправкаSMSЧерезМТС.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.Билайн Тогда - Результат = ОтправкаSMSЧерезБилайн.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.SMSRU Тогда - Результат = ОтправкаSMSЧерезSMSRU.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.SMSЦЕНТР Тогда - Результат = ОтправкаSMSЧерезSMSЦЕНТР.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.СМСУслуги Тогда - Результат = ОтправкаSMSЧерезСМСУслуги.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS); - ИначеЕсли НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.GSMINFORM Тогда - Результат = ОтправкаSMSЧерезGSMINFORM.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS); + МодульОтправкаSMSЧерезПровайдера = ОтправкаSMS.МодульОтправкаSMSЧерезПровайдера(НастройкиОтправкиSMS.Провайдер); + Если МодульОтправкаSMSЧерезПровайдера <> Неопределено Тогда + Результат = МодульОтправкаSMSЧерезПровайдера.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS); ИначеЕсли ЗначениеЗаполнено(НастройкиОтправкиSMS.Провайдер) Тогда ОтправкаSMSПереопределяемый.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS.Провайдер, НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль, Результат); diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl index be19d79b1..f90bbc8af 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl @@ -297,5 +297,11 @@ Возврат Разрешения; КонецФункции +Процедура ЗаполнитьОписаниеУслуги(ОписаниеУслуги) Экспорт + ОписаниеУслуги.АдресВИнтернете = "http://gsm-inform.ru"; + ОписаниеУслуги.ПредставлениеЛогина = НСтр("ru = 'ID кабинета'"); + ОписаниеУслуги.ПредставлениеПароля = НСтр("ru = 'API-ключ'"); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl new file mode 100644 index 000000000..ec1a0c739 --- /dev/null +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl @@ -0,0 +1,269 @@ +#Область СлужебныеПроцедурыИФункции + +// Отправляет SMS через SMS4B. +// +// Параметры: +// НомераПолучателей - Массив - номера получателей в формате +7ХХХХХХХХХХ; +// Текст - Строка - текст сообщения, длиной не более 480 символов; +// ИмяОтправителя - Строка - имя отправителя, которое будет отображаться вместо номера входящего SMS; +// Логин - Строка - логин пользователя услуги отправки sms; +// Пароль - Строка - пароль пользователя услуги отправки sms. +// +// Возвращаемое значение: +// Структура: ОтправленныеСообщения - Массив структур: НомерОтправителя. +// ИдентификаторСообщения. +// ОписаниеОшибки - Строка - пользовательское представление ошибки, если пустая строка, +// то ошибки нет. +Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль) Экспорт + + Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); + + ПараметрыЗапроса = Новый Структура; + ПараметрыЗапроса.Вставить("Login", Логин); + ПараметрыЗапроса.Вставить("Password", Пароль); + ПараметрыЗапроса.Вставить("Source", ИмяОтправителя); + ПараметрыЗапроса.Вставить("Text", Текст); + + Для Каждого НомерПолучателя Из НомераПолучателей Цикл + ПараметрыЗапроса.Вставить("Phone", ФорматироватьНомер(НомерПолучателя)); + РезультатЗапроса = ВыполнитьЗапрос("SendTXT", ПараметрыЗапроса); + + Если СтрДлина(РезультатЗапроса) = 20 Тогда + ОтправленноеСообщение = Новый Структура("НомерПолучателя,ИдентификаторСообщения", НомерПолучателя, РезультатЗапроса); + Результат.ОтправленныеСообщения.Добавить(ОтправленноеСообщение); + Иначе + Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'SMS на номер %1 не отправлено'"), НомерПолучателя) + ": " + ОписаниеОшибкиОтправки(РезультатЗапроса) + Символы.ПС; + КонецЕсли; + КонецЦикла; + + Результат.ОписаниеОшибки = СокрП(Результат.ОписаниеОшибки); + Если Не ПустаяСтрока(Результат.ОписаниеОшибки) Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает текстовое представление статуса доставки сообщения. +// +// Параметры: +// ИдентификаторСообщения - Строка - идентификатор, присвоенный sms при отправке; +// НастройкиОтправкиSMS - Структура - см. ОтправкаSMSПовтИсп.НастройкиОтправкиSMS; +// +// Возвращаемое значение: +// Строка - статус доставки. См. описание функции ОтправкаSMS.СтатусДоставки. +Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт + + Логин = НастройкиОтправкиSMS.Логин; + Пароль = НастройкиОтправкиSMS.Пароль; + + // Подготовка параметров запроса. + ПараметрыЗапроса = Новый Структура; + ПараметрыЗапроса.Вставить("Login", Логин); + ПараметрыЗапроса.Вставить("Password", Пароль); + ПараметрыЗапроса.Вставить("MessageId", ИдентификаторСообщения); + + // отправка запроса + КодСостояния = ВыполнитьЗапрос("StatusTXT", ПараметрыЗапроса); + Если ПустаяСтрока(КодСостояния) Тогда + Возврат "Ошибка"; + КонецЕсли; + + Результат = СтатусДоставкиSMS(КодСостояния); + Если Результат = "Ошибка" Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Не удалось получить статус доставки SMS (id: ""%3""): + |%1 (код ошибки: %2)'"), ОписаниеОшибкиПолученияСтатуса(КодСостояния), КодСостояния, ИдентификаторСообщения); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция СтатусДоставкиSMS(Знач КодСостояния) + СоответствиеСтатусов = Новый Соответствие; + СоответствиеСтатусов.Вставить("-21", "НеОтправлялось"); + СоответствиеСтатусов.Вставить("-22", "НеОтправлялось"); + + Если ПустаяСтрока(КодСостояния) Или СтрНачинаетсяС(КодСостояния, "-") + Или Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(КодСостояния) Тогда + Результат = СоответствиеСтатусов[НРег(КодСостояния)]; + Возврат ?(Результат = Неопределено, "Ошибка", Результат); + КонецЕсли; + + КодСостояния = Число(КодСостояния); + + ВсегоФрагментов = КодСостояния % 256; + ОтправленоФрагментов = Цел(КодСостояния / 256) % 256; + ОкончательныйСтатус = КодСостояния >= 256*256; + + Если ОкончательныйСтатус Тогда + Если ВсегоФрагментов = 0 Или ВсегоФрагментов > ОтправленоФрагментов Тогда + Результат = "НеДоставлено"; + Иначе + Результат = "Доставлено"; + КонецЕсли; + Иначе + Если ВсегоФрагментов = 0 Или ВсегоФрагментов > ОтправленоФрагментов Тогда + Результат = "Отправляется"; + Иначе + Результат = "Отправлено"; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ОписанияОшибок() + ОписанияОшибок = Новый Соответствие; + + ОписанияОшибок.Вставить("0", НСтр("ru = 'Превышен предел открытых сессий.'")); + ОписанияОшибок.Вставить("-1", НСтр("ru = 'Неверный логин или пароль.'")); + ОписанияОшибок.Вставить("-10", НСтр("ru = 'Отказ сервиса.'")); + ОписанияОшибок.Вставить("-20", НСтр("ru = 'Сбой сеанса связи.'")); + ОписанияОшибок.Вставить("-21", НСтр("ru = 'Сообщение не идентифицировано.'")); + ОписанияОшибок.Вставить("-22", НСтр("ru = 'Неверный идентификатор сообщения.'")); + ОписанияОшибок.Вставить("-29", НСтр("ru = 'Отвергнуто спам-фильтром.'")); + ОписанияОшибок.Вставить("-30", НСтр("ru = 'Неверная кодировка сообщения.'")); + ОписанияОшибок.Вставить("-31", НСтр("ru = 'Неразрешенная зона тарификации.'")); + ОписанияОшибок.Вставить("-50", НСтр("ru = 'Неверный отправитель.'")); + ОписанияОшибок.Вставить("-51", НСтр("ru = 'Неразрешенный получатель.'")); + ОписанияОшибок.Вставить("-52", НСтр("ru = 'Недостаточно средств на счете.'")); + ОписанияОшибок.Вставить("-53", НСтр("ru = 'Незарегистрированный отправитель.'")); + ОписанияОшибок.Вставить("-65", НСтр("ru = 'Необходимы гарантии отправителя, обратитесь в техподдержку.'")); + ОписанияОшибок.Вставить("-66", НСтр("ru = 'Не задан отправитель.'")); + ОписанияОшибок.Вставить("-68", НСтр("ru = 'Аккаунт заблокирован.'")); + + Возврат ОписанияОшибок; +КонецФункции + +Функция ОписаниеОшибкиОтправки(КодОшибки) + ОписанияОшибок = ОписанияОшибок(); + ТекстСообщения = ОписанияОшибок[КодОшибки]; + Если ТекстСообщения = Неопределено Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Код ошибки: ""%1"".'"), КодОшибки); + КонецЕсли; + Возврат ТекстСообщения; +КонецФункции + +Функция ОписаниеОшибкиПолученияСтатуса(КодОшибки) + ОписанияОшибок =ОписанияОшибок(); + ТекстСообщения = ОписанияОшибок[КодОшибки]; + Если ТекстСообщения = Неопределено Тогда + ТекстСообщения = НСтр("ru = 'Отказ выполнения операции'"); + КонецЕсли; + Возврат ТекстСообщения; +КонецФункции + +Функция ВыполнитьЗапрос(ИмяМетода, ПараметрыЗапроса) + + Результат = ""; + + ИмяФайлаЗапроса = СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса); + ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("xml"); + + // формирование заголовка + Заголовок = Новый Соответствие; + Заголовок.Вставить("Content-Type", "application/x-www-form-urlencoded"); + Заголовок.Вставить("Content-Length", XMLСтрока(РазмерФайла(ИмяФайлаЗапроса))); + + // Отправка запроса и получение ответа. + Попытка + Соединение = Новый HTTPСоединение("sms4b.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), 60, Новый ЗащищенноеСоединениеOpenSSL); + Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, "/ws/s1c.asmx/" + ИмяМетода, ИмяФайлаОтвета, Заголовок); + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(ИмяФайлаОтвета); + ЧтениеXML.Прочитать(); + Если ЧтениеXML.Имя = "string" Тогда + Если ЧтениеXML.Прочитать() Тогда + Результат = ЧтениеXML.Значение; + КонецЕсли; + КонецЕсли; + ЧтениеXML.Закрыть(); + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Результат = ""; + КонецПопытки; + + УдалитьФайлы(ИмяФайлаЗапроса); + УдалитьФайлы(ИмяФайлаОтвета); + + Возврат Результат; + +КонецФункции + +Функция СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса) + СтрокаЗапроса = ""; + Для Каждого Параметр Из ПараметрыЗапроса Цикл + Если Не ПустаяСтрока(СтрокаЗапроса) Тогда + СтрокаЗапроса = СтрокаЗапроса + "&"; + КонецЕсли; + СтрокаЗапроса = СтрокаЗапроса + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL); + КонецЦикла; + + ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла("txt"); + + ФайлЗапроса = Новый ЗаписьТекста(ИмяФайлаЗапроса, КодировкаТекста.ANSI); + ФайлЗапроса.Записать(СтрокаЗапроса); + ФайлЗапроса.Закрыть(); + + Возврат ИмяФайлаЗапроса; +КонецФункции + +Функция РазмерФайла(ИмяФайла) + Файл = Новый Файл(ИмяФайла); + Возврат Файл.Размер(); +КонецФункции + +Функция ФорматироватьНомер(Номер) + Результат = ""; + ДопустимыеСимволы = "1234567890"; + Для Позиция = 1 По СтрДлина(Номер) Цикл + Символ = Сред(Номер,Позиция,1); + Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда + Результат = Результат + Символ; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. +// +// Возвращаемое значение: +// Массив. +// +Функция Разрешения() Экспорт + + Протокол = "HTTPS"; + Адрес = "sms4b.ru"; + Порт = Неопределено; + Описание = НСтр("ru = 'Отправка SMS через ""SMS4B"".'"); + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + Разрешения = Новый Массив; + Разрешения.Добавить( + МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание)); + + Возврат Разрешения; +КонецФункции + +Процедура ЗаполнитьОписаниеУслуги(ОписаниеУслуги) Экспорт + ОписаниеУслуги.АдресВИнтернете = "http://sms4b.ru"; +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/ОтправкаSMSЧерезSMS4B.mdo b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/ОтправкаSMSЧерезSMS4B.mdo new file mode 100644 index 000000000..22b19ae85 --- /dev/null +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/ОтправкаSMSЧерезSMS4B.mdo @@ -0,0 +1,11 @@ + + + ОтправкаSMSЧерезSMS4B + + ru + Отправка SMS через SMS4B + + true + true + true + diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl index 5e2448cb8..4b3d0fbab 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl @@ -278,5 +278,9 @@ Возврат Разрешения; КонецФункции +Процедура ЗаполнитьОписаниеУслуги(ОписаниеУслуги) Экспорт + ОписаниеУслуги.АдресВИнтернете = "http://sms.ru"; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl index 55c0ee2b3..d3ef510a3 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl @@ -298,5 +298,9 @@ Возврат Разрешения; КонецФункции +Процедура ЗаполнитьОписаниеУслуги(ОписаниеУслуги) Экспорт + ОписаниеУслуги.АдресВИнтернете = "http://smsc.ru"; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl index ffa6610ea..6e9a95a05 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl @@ -247,4 +247,8 @@ Возврат Разрешения; КонецФункции +Процедура ЗаполнитьОписаниеУслуги(ОписаниеУслуги) Экспорт + ОписаниеУслуги.АдресВИнтернете = "http://b2b.beeline.ru/msk/sb/mobile/services/index.wbp?id=3a15308a-7b14-4f8e-acda-0841dd6c750e"; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl index e4eb131c9..94929460f 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl @@ -215,4 +215,8 @@ Возврат Разрешения; КонецФункции +Процедура ЗаполнитьОписаниеУслуги(ОписаниеУслуги) Экспорт + ОписаниеУслуги.АдресВИнтернете = "http://www.mtscommunicator.ru/service/"; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl index e84d7982b..e35f5f06c 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl @@ -84,11 +84,16 @@ // // Возвращаемое значение: // Строка - статус доставки. См. описание функции ОтправкаSMS.СтатусДоставки. -Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт +Функция СтатусДоставки(Знач ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт + + ЧастиИдентификатора = СтрРазделить(ИдентификаторСообщения, "/", Истина); + НомерПолучателя = ЧастиИдентификатора[0]; + ИдентификаторСообщения = ЧастиИдентификатора[1]; + Логин = НастройкиОтправкиSMS.Логин; Пароль = НастройкиОтправкиSMS.Пароль; - Результат = Новый Соответствие; + СтатусыДоставки = Новый Соответствие; // Подготовка параметров запроса. ПараметрыЗапроса = Новый Структура; @@ -115,7 +120,7 @@ Получатели = ОтветСервера.detail[Статус.Имя].Последовательность(); Для Индекс = 0 По Получатели.Количество()-1 Цикл Получатель = Получатели.ПолучитьЗначение(Индекс); - Результат.Вставить(Получатель, СтатусДоставкиSMS(Статус.Имя)); + СтатусыДоставки.Вставить(Получатель, СтатусДоставкиSMS(Статус.Имя)); КонецЦикла; КонецЦикла; Иначе @@ -127,7 +132,13 @@ Возврат "Ошибка"; КонецЕсли; + Результат = СтатусыДоставки[НомерПолучателя]; + Если Результат = Неопределено Тогда + Результат = "НеОтправлялось"; + КонецЕсли; + Возврат Результат; + КонецФункции Функция СтатусДоставкиSMS(КодСостояния) @@ -256,5 +267,9 @@ Возврат Разрешения; КонецФункции +Процедура ЗаполнитьОписаниеУслуги(ОписаниеУслуги) Экспорт + ОписаниеУслуги.АдресВИнтернете = "http://sms-uslugi.ru"; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..586b57ba0 --- /dev/null +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl @@ -0,0 +1,155 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Обработчик двойного щелчка мыши, нажатия клавиши Enter или гиперссылки в табличном документе формы отчета. +// См. "Расширение поля формы для поля табличного документа.Выбор" в синтакс-помощнике. +// +// Параметры: +// ФормаОтчета - УправляемаяФорма - Форма отчета. +// Элемент - ПолеФормы - Табличный документ. +// Область - ОбластьЯчеекТабличногоДокумента - Выбранное значение. +// СтандартнаяОбработка - Булево - Признак выполнения стандартной обработки события. +// +Процедура ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка) Экспорт + + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ОтчетОДвиженияхДокумента" Тогда + + Если ТипЗнч(Область.Расшифровка) = Тип("Структура") Тогда + ОткрытьФормуРегистраИзОтчетаОДвижениях(ФормаОтчета, Область.Расшифровка, СтандартнаяОбработка); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Открывает форму регистра с отбором по регистратору +// +// Параметры: +// ФормаОтчета - УправляемаяФорма - Форма отчета. +// Расшифровка - Структура - Структура со свойствами. +// * ВидРегистра - Содержит вид регистра "Накопления", "Сведений", "Бухгалтерии" или "Расчета". +// * ИмяРегистра - Содержит имя регистра как объекта метаданных. +// * Регистратор - Содержит ссылку на документ регистратор, по которому нужно сделать отбор +// в открывшейся форме регистра. +// СтандартнаяОбработка - Булево - Признак выполнения стандартной (системной) обработки события. +// +Процедура ОткрытьФормуРегистраИзОтчетаОДвижениях(ФормаОтчета, Расшифровка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; + Отбор = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных")); + ЭлементОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Регистратор"); + ЭлементОтбора.ПравоеЗначение = Расшифровка.Регистратор; + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.Использование = Истина; + + ИмяФормыРегистра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Регистр%1.%2.ФормаСписка", + Расшифровка.ВидРегистра, Расшифровка.ИмяРегистра); + + ФормаРегистра = ПолучитьФорму(ИмяФормыРегистра); + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Поле", "Регистратор"); + ПараметрыОтбора.Вставить("Значение", Расшифровка.Регистратор); + ПараметрыОтбора.Вставить("ВидСравнения", ВидСравненияКомпоновкиДанных.Равно); + ПараметрыОтбора.Вставить("Использование", Истина); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Истина); + ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); + + ДобавитьОтбор(ФормаРегистра.Список.КомпоновщикНастроек, ПараметрыОтбора, ДополнительныеПараметры); + ФормаРегистра.Открыть(); + +КонецПроцедуры + +// Добавляет отбор в коллекцию отборов компоновщика или группы отборов +// +// Параметры: +// ЭлементСтруктуры - КомпоновщикНастроекКомпоновкиДанных, НастройкиКомпоновкиДанных - элемент структуры КД +// ПараметрыОтбора - Структура - Содержит параметры отбора компоновки данных. +// * Поле - Строка - Имя поля, по которому добавляется отбор. +// * Значение - Произвольный - Значение отбора КД (по умолчанию: Неопределено). +// * ВидСравнения - ВидСравненияКомпоновкиДанных - Вид сравнений КД (по умолчанию: Неопределено). +// * Использование - Булево - Признак использования отбора (по умолчанию: Истина). +// ДополнительныеПараметры - Структура - Содержит дополнительные параметры, перечисленные ниже: +// * ВПользовательскиеНастройки - Булево - признак добавления в пользовательские настройки КД (по умолчанию: Ложь). +// * ЗаменятьСуществующий - Булево - признак полной замены существующего отбора по полю (по умолчанию: Истина). +// +// Возвращаемое значение: +// ЭлементОтбораКомпоновкиДанных - Добавленный отбор. +// +Функция ДобавитьОтбор(ЭлементСтруктуры, ПараметрыОтбора, ДополнительныеПараметры = Неопределено) + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Ложь); + ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); + Иначе + Если Не ДополнительныеПараметры.Свойство("ВПользовательскиеНастройки") Тогда + ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Ложь); + КонецЕсли; + Если Не ДополнительныеПараметры.Свойство("ЗаменятьСуществующий") Тогда + ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(ПараметрыОтбора.Поле) = Тип("Строка") Тогда + НовоеПоле = Новый ПолеКомпоновкиДанных(ПараметрыОтбора.Поле); + Иначе + НовоеПоле = ПараметрыОтбора.Поле; + КонецЕсли; + + Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + Отбор = ЭлементСтруктуры.Настройки.Отбор; + + Если ДополнительныеПараметры.ВПользовательскиеНастройки Тогда + Для Каждого ЭлементНастройки Из ЭлементСтруктуры.ПользовательскиеНастройки.Элементы Цикл + Если ЭлементНастройки.ИдентификаторПользовательскойНастройки = + ЭлементСтруктуры.Настройки.Отбор.ИдентификаторПользовательскойНастройки Тогда + Отбор = ЭлементНастройки; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиКомпоновкиДанных") Тогда + Отбор = ЭлементСтруктуры.Отбор; + Иначе + Отбор = ЭлементСтруктуры; + КонецЕсли; + + ЭлементОтбора = Неопределено; + Если ДополнительныеПараметры.ЗаменятьСуществующий Тогда + Для каждого Элемент Из Отбор.Элементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Если Элемент.ЛевоеЗначение = НовоеПоле Тогда + ЭлементОтбора = Элемент; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Если ЭлементОтбора = Неопределено Тогда + ЭлементОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + КонецЕсли; + ЭлементОтбора.Использование = ПараметрыОтбора.Использование; + ЭлементОтбора.ЛевоеЗначение = НовоеПоле; + ЭлементОтбора.ВидСравнения = ?(ПараметрыОтбора.ВидСравнения = Неопределено, ВидСравненияКомпоновкиДанных.Равно, + ПараметрыОтбора.ВидСравнения); + ЭлементОтбора.ПравоеЗначение = ПараметрыОтбора.Значение; + + Возврат ЭлементОтбора; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/ОтчетОДвиженияхДокументаСлужебныйКлиент.mdo b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/ОтчетОДвиженияхДокументаСлужебныйКлиент.mdo new file mode 100644 index 000000000..704ecc95c --- /dev/null +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/ОтчетОДвиженияхДокументаСлужебныйКлиент.mdo @@ -0,0 +1,10 @@ + + + ОтчетОДвиженияхДокументаСлужебныйКлиент + + ru + Отчет о движениях документа служебный клиент + + true + true + diff --git a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl index b45180476..81f0bae8d 100644 --- a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl @@ -242,9 +242,6 @@ ПользовательскаяНастройкаКД.Использование = Истина; Форма.ПользовательскиеНастройкиМодифицированы = Истина; - #Если ВебКлиент Тогда - Форма.ОбновитьОтображениеДанных(); // Для платформы. - #КонецЕсли КонецПроцедуры Процедура ИзменитьВидСравнения(Форма, ИдентификаторЭлемента, ОбработчикРезультата) Экспорт @@ -441,9 +438,6 @@ ОтразитьИзмененияВПодчиненных(Форма, Контекст.Идентификатор, ЭлементКД); Форма.ПользовательскиеНастройкиМодифицированы = Истина; - #Если ВебКлиент Тогда - Форма.ОбновитьОтображениеДанных(); // Для платформы. - #КонецЕсли КонецПроцедуры Процедура ВыбратьПериод(Форма, КнопкаВыбораИмя) Экспорт @@ -485,9 +479,6 @@ ЭлементКД.Использование = Истина; Контекст.Форма.ПользовательскиеНастройкиМодифицированы = Истина; - #Если ВебКлиент Тогда - Контекст.Форма.ОбновитьОтображениеДанных(); // Для платформы. - #КонецЕсли КонецПроцедуры Процедура ВыбратьЗначениеПримитивногоТипа(Форма, ТипЗначения, ОписаниеТипов, ТекущееЗначение, ПредставлениеПоля, Обработчик) Экспорт diff --git a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl index cca1c6777..1243d31cd 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl @@ -5,7 +5,7 @@ // Возвращаемое значение: // Структура - Настройки формы отчета: // -// * ФормироватьСразу - Булево - Значение по умолчанию для флажка "Формировать сразу" в форме отчета. +// * ФормироватьСразу - Булево - Значение по умолчанию для флажка "Формировать сразу". // Когда флажок включен, то отчет будет формироваться: // - После открытия; // - После выбора пользовательских настроек; @@ -17,10 +17,50 @@ // Если Истина, то вкладка "Структура" показывается для отчетов на СКД: в расширенном режиме, // а также в простом режиме, если в пользовательские настройки выведены флажки использования группировок. // -// * РазрешеноИзменятьВарианты - Булево - Если Ложь, то блокируются кнопки изменения вариантов этого отчета. +// * РазрешеноИзменятьВарианты - Булево - Если Ложь, то блокируются кнопки изменения вариантов этого отчета. // Если у текущего пользователя нет прав "СохранениеДанныхПользователя" и "Добавление" справочника ВариантыОтчетов, // то принудительно устанавливается в Ложь. -// +// +// * РазрешеноВыбиратьИНастраиватьВариантыБезСохранения - Булево - Имеет смысл для тех отчетов, +// у которых есть необходимость выбора и настройки предопределенных вариантов. Если Истина, +// то блокируется кнопка сохранения варианта этого отчета, но остается возможность выбора и +// настройки предопределенных вариантов. Актуально для контекстных отчетов при необходимости +// предоставлять выбор вариантов. Следует понимать, что при установленном флажке изменить вариант +// возможность есть, но сохранить изменения не получится - при закрытии формы отчета или смене +// варианта настройки будут утеряны. +// +// * ПараметрыРасположенияЭлементовУправления - Структура, Неопределено - варианты: +// - Неопределено - Параметры элементов управления общей формы отчетов "по умолчанию". +// - Структура - с именами настройки в коллекции НастройкиКомпоновкиДанных свойства Настройки +// типа КомпоновщикНастроекКомпоновкиДанных: +// ** Отбор - Массив - как у следующего свойства. +// ** ПараметрыДанных - Структура - со свойствами поля формы: +// *** Поле - Строка - имя поля, отображение которого настраивается. +// *** РастягиватьПоГоризонтали - Булево - значение свойства поля формы. +// *** АвтоМаксимальнаяШирина - Булево - значение свойства поля формы. +// *** Ширина - Число - значение свойства поля формы. +// +// Пример определения описываемого параметра: +// +// МассивНастроек = Новый Массив; +// НастройкиЭлементаУправления = Новый Структура; +// НастройкиЭлементаУправления.Вставить("Поле", "СписокРегистров"); +// НастройкиЭлементаУправления.Вставить("РастягиватьПоГоризонтали", Ложь); +// НастройкиЭлементаУправления.Вставить("АвтоМаксимальнаяШирина", Истина); +// НастройкиЭлементаУправления.Вставить("Ширина", 40); +// +// МассивНастроек.Добавить(НастройкиЭлементаУправления); +// +// НастройкиЭлементовУправления = Новый Структура(); +// НастройкиЭлементовУправления.Вставить("ПараметрыДанных", МассивНастроек); +// +// Возврат НастройкиЭлементовУправления; +// +// * СкрытьКомандыРассылки - Булево - Флаг, позволяющий скрыть команды рассылок, у тех отчетов, +// для которых рассылка не имеет смысла. +// Истина - команды рассылок будут скрыты, +// Ложь (по умолчанию) - команды будут доступны. +// // * Печать - Структура - Параметры печати табличного документа "по умолчанию". // ** ПолеСверху - Число - Отступ сверху при печати (в миллиметрах). // ** ПолеСлева - Число - Отступ слева при печати (в миллиметрах). @@ -197,20 +237,16 @@ // // Параметры: // // Форма - УправляемаяФорма, Неопределено - Форма отчета. // // СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. -// // * ОписаниеТипов - ОписаниеТипов - -// // Тип настройки. -// // * ЗначенияДляВыбора - СписокЗначений - -// // Объекты, которые будут предложены пользователю в списке выбора. -// // Дополняет список объектов, уже выбранных пользователем ранее. -// // * ЗапросЗначенийВыбора - Запрос - -// // Возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. +// // * ОписаниеТипов - ОписаниеТипов - Тип настройки. +// // * ЗначенияДляВыбора - СписокЗначений - Объекты, которые будут предложены пользователю в списке +// выбора. Дополняет список объектов, уже выбранных пользователем ранее. +// // * ЗапросЗначенийВыбора - Запрос - Возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. // // Первой колонкой (с 0м индексом) должен выбираться объект, // // который следует добавить в ЗначенияДляВыбора.Значение. // // Для отключения автозаполнения // // в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. -// // * ОграничиватьВыборУказаннымиЗначениями - Булево - -// // Когда Истина, то выбор пользователя будет ограничен значениями, -// // указанными в ЗначенияДляВыбора (его конечным состоянием). +// // * ОграничиватьВыборУказаннымиЗначениями - Булево - Когда Истина, то выбор пользователя будет +// // ограничен значениями, указанными в ЗначенияДляВыбора (его конечным состоянием). // // // // См. также: // // ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(). @@ -266,6 +302,9 @@ Настройки.Вставить("ВыводитьСуммуВыделенныхЯчеек", Истина); Настройки.Вставить("РазрешеноИзменятьСтруктуру", Истина); Настройки.Вставить("РазрешеноИзменятьВарианты", Истина); + Настройки.Вставить("РазрешеноВыбиратьИНастраиватьВариантыБезСохранения", Ложь); + Настройки.Вставить("ПараметрыРасположенияЭлементовУправления" , Неопределено); + Настройки.Вставить("СкрытьКомандыРассылки" , Ложь); Печать = Новый Структура; Печать.Вставить("ПолеСверху", 10); diff --git a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl index 873286037..ccb3ed1ee 100644 --- a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl @@ -138,7 +138,7 @@ // АдресСсылки - Строка - адрес ссылки, которую необходимо вывести в указанной ячейке. // В стандартной форме отчета автоматически открываются ссылки следующих форматов: // "http://<адрес>", "https://<адрес>", "e1cib/<адрес>", "e1c://<адрес>" -// Такие ссылки открываются при помощи процедуры ОбщегоНазначенияКлиент.ПерейтиПоСсылке. +// Такие ссылки открываются при помощи процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. // См. также ПредставлениеНавигационнойСсылки.НавигационнаяСсылка в синтакс-помощнике. // Для открытия ссылок других форматов следует написать код // в процедуре ОтчетыКлиентПереопределяемый.ОбработкаВыбораТабличногоДокумента. @@ -2105,6 +2105,7 @@ ЗаполнитьЗначенияСвойств(КолонкаЗначениеЭлемент, СвойстваНастройки.ДоступнаяНастройкаКД, "Маска, ФормаВыбора, ФорматРедактирования"); КолонкаЗначениеЭлемент.ВыборГруппИЭлементов = СвойстваНастройки.ВыборГруппИЭлементов; + Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда КолонкаЗначениеЭлемент.ТолькоПросмотр = Истина; КонецЕсли; @@ -2150,6 +2151,47 @@ КонецЕсли; ГруппаВывода.Размер = ГруппаВывода.Размер + ЭлементВывода.Размер; + ПараметрыРасположенияЭлементовУправления = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Форма.НастройкиОтчета, "ПараметрыРасположенияЭлементовУправления"); + + Если ПараметрыРасположенияЭлементовУправления <> Неопределено Тогда + + Для Каждого ПараметрРасположенияЭлементаУправления Из ПараметрыРасположенияЭлементовУправления Цикл + + КлючНастроек = ПараметрРасположенияЭлементаУправления.Ключ; + ЗначенияНастроек = ПараметрРасположенияЭлементаУправления.Значение; + + Настройки = Форма.Отчет.КомпоновщикНастроек.Настройки[КлючНастроек].Элементы; + + Для Каждого Настройка Из Настройки Цикл + + Для Каждого ЗначениеНастройки Из ЗначенияНастроек Цикл + + ЦелевойЭлемент = Неопределено; + + Если КлючНастроек = "Отбор" Тогда + ПолеСКД = Новый ПолеКомпоновкиДанных(ЗначениеНастройки.Поле); + Если ПолеСКД = Настройка.ЛевоеЗначение Тогда + ЦелевойЭлемент = Элементы.Найти("ЭлементОтбора_Значение_" + СтрЗаменить(Настройка.ИдентификаторПользовательскойНастройки, "-", "")); + КонецЕсли; + ИначеЕсли КлючНастроек = "ПараметрыДанных" Тогда + ПараметрСКД = Новый ПараметрКомпоновкиДанных(ЗначениеНастройки.Поле); + Если ПараметрСКД = Настройка.Параметр Тогда + ЦелевойЭлемент = Элементы.Найти("ЗначениеПараметраНастроек_Значение_" + СтрЗаменить(Настройка.ИдентификаторПользовательскойНастройки, "-", "")); + КонецЕсли; + КонецЕсли; + + Если ЦелевойЭлемент <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЦелевойЭлемент, ЗначениеНастройки); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + + КонецЕсли; + КонецПроцедуры Процедура БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, РеквизитПолноеИмя, ТипРеквизита) diff --git a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl index 995a7b1dc..4a71152b5 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl @@ -32,13 +32,18 @@ Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда ВремяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах(); Длительность = (ВремяОкончания - ВремяНачала)/1000; - ЗафиксироватьДлительностьКлючевойОперации( - КлючеваяОперация, - Длительность, - ВремяНачала, - ВремяОкончания, - ВесЗамера, - Комментарий); + + ПараметрыЗамера = Новый Структура; + ПараметрыЗамера.Вставить("КлючеваяОперация", КлючеваяОперация); + ПараметрыЗамера.Вставить("Длительность", Длительность); + ПараметрыЗамера.Вставить("ДатаНачалаКлючевойОперации", ВремяНачала); + ПараметрыЗамера.Вставить("ДатаОкончанияКлючевойОперации", ВремяОкончания); + ПараметрыЗамера.Вставить("ВесЗамера", ВесЗамера); + ПараметрыЗамера.Вставить("Комментарий", Комментарий); + ПараметрыЗамера.Вставить("Технологический", Ложь); + ПараметрыЗамера.Вставить("Длительная", Ложь); + + ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); КонецЕсли; КонецПроцедуры @@ -56,14 +61,18 @@ Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда ВремяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах(); Длительность = (ВремяОкончания - ВремяНачала)/1000; - ЗафиксироватьДлительностьКлючевойОперации( - КлючеваяОперация, - Длительность, - ВремяНачала, - ВремяОкончания, - ВесЗамера, - Комментарий, - Истина); + + ПараметрыЗамера = Новый Структура; + ПараметрыЗамера.Вставить("КлючеваяОперация", КлючеваяОперация); + ПараметрыЗамера.Вставить("Длительность", Длительность); + ПараметрыЗамера.Вставить("ДатаНачалаКлючевойОперации", ВремяНачала); + ПараметрыЗамера.Вставить("ДатаОкончанияКлючевойОперации", ВремяОкончания); + ПараметрыЗамера.Вставить("ВесЗамера", ВесЗамера); + ПараметрыЗамера.Вставить("Комментарий", Комментарий); + ПараметрыЗамера.Вставить("Технологический", Истина); + ПараметрыЗамера.Вставить("Длительная", Ложь); + + ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); КонецЕсли; КонецПроцедуры @@ -235,6 +244,156 @@ КонецПроцедуры +// Начинает замер времени длительной ключевой операции. Закончить замер нужно явно вызовом +// процедуры ЗакончитьЗамерДлительнойОперации. +// +// Параметры: +// КлючеваяОперация - Строка - ключевая операция. +// +// Возвращаемое значение: +// ОписаниеЗамера - соответствие. +// КлючеваяОперация - имя ключевой операции. +// ВремяНачала - время начала ключевой операции в миллисекундах. +// ВремяПоследнегоЗамера - время последнего замера ключевой операции в миллисекундах. +// ВесЗамера - количество данных, обработанных в ходе выполнения действий. +// ВложенныеЗамеры - коллекция замеров вложенных шагов. +// +Функция НачатьЗамерДлительнойОперации(КлючеваяОперация) Экспорт + + ОписаниеЗамера = Новый Соответствие; + Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда + ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ОписаниеЗамера.Вставить("КлючеваяОперация", КлючеваяОперация); + ОписаниеЗамера.Вставить("ВремяНачала", ВремяНачала); + ОписаниеЗамера.Вставить("ВремяПоследнегоЗамера", ВремяНачала); + ОписаниеЗамера.Вставить("ВесЗамера", 0); + ОписаниеЗамера.Вставить("ВложенныеЗамеры", Новый Соответствие); + КонецЕсли; + + Возврат ОписаниеЗамера; + +КонецФункции + +// Фиксирует замер вложенного шага длительной операции. +// Параметры: +// ОписаниеЗамера - Соответствие - должно быть получено вызовом метода НачатьЗамерДлительнойОперации. +// КоличествоДанных - Число - количество данных, например, строк, обработанных в ходе выполнения вложенного шага. +// ИмяШага - Строка - произвольное имя вложенного шага. +// Комментарий - Строка - произвольное дополнительное описание замера. +// +Процедура ЗафиксироватьЗамерДлительнойОперации(ОписаниеЗамера, КоличествоДанных, ИмяШага, Комментарий = "") Экспорт + + Если НЕ ЗначениеЗаполнено(ОписаниеЗамера) Тогда + Возврат; + КонецЕсли; + + ТекущееВремя = ТекущаяУниверсальнаяДатаВМиллисекундах(); + + Длительность = ТекущееВремя - ОписаниеЗамера["ВремяПоследнегоЗамера"]; + КоличествоДанныхШага = ?(КоличествоДанных = 0, 1, КоличествоДанных); + // Если вложенный замер выполняется первый раз, то инициализируем его. + ВложенныеЗамеры = ОписаниеЗамера["ВложенныеЗамеры"]; + Если ВложенныеЗамеры[ИмяШага] = Неопределено Тогда + ВложенныеЗамеры.Вставить(ИмяШага, Новый Соответствие); + ШагВложенногоЗамера = ВложенныеЗамеры[ИмяШага]; + ШагВложенногоЗамера.Вставить("Комментарий", Комментарий); + ШагВложенногоЗамера.Вставить("ВремяНачала", ОписаниеЗамера["ВремяПоследнегоЗамера"]); + ШагВложенногоЗамера.Вставить("Длительность", 0.0); + ШагВложенногоЗамера.Вставить("ВесЗамера", 0); + КонецЕсли; + // Пишем данные вложенного замера. + ШагВложенногоЗамера = ВложенныеЗамеры[ИмяШага]; + ШагВложенногоЗамера.Вставить("ВремяОкончания", ТекущееВремя); + ШагВложенногоЗамера.Вставить("Длительность", Длительность + ШагВложенногоЗамера["Длительность"]); + ШагВложенногоЗамера.Вставить("ВесЗамера", КоличествоДанныхШага + ШагВложенногоЗамера["ВесЗамера"]); + + // Пишем данные длительного замера + ОписаниеЗамера.Вставить("ВремяПоследнегоЗамера", ТекущееВремя); + ОписаниеЗамера.Вставить("ВесЗамера", КоличествоДанныхШага + ОписаниеЗамера["ВесЗамера"]); + +КонецПроцедуры + +// Завершает замер длительной операции. +// Если указано имя шага, фиксирует его как отдельный вложенный шаг +// Параметры: +// ОписаниеЗамера - Соответствие - должно быть получено вызовом метода НачатьЗамерДлительнойОперации. +// КоличествоДанных - Число - количество данных, например, строк, обработанных в ходе выполнения вложенного шага. +// ИмяШага - Строка - произвольное имя вложенного шага. +// Комментарий - Строка - произвольное дополнительное описание замера. +// +Процедура ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, КоличествоДанных, ИмяШага = "", Комментарий = "") Экспорт + + Если НЕ ЗначениеЗаполнено(ОписаниеЗамера) Тогда + Возврат; + КонецЕсли; + + Если ОписаниеЗамера["Клиентский"] = Истина Тогда + Возврат; + КонецЕсли; + + // Если не указано имя шага, но есть вложенные шаги, то имя по умолчанию "ПоследнийШаг". + ВложенныеЗамеры = ОписаниеЗамера["ВложенныеЗамеры"]; + ЕстьВложенныеЗамеры = ВложенныеЗамеры.Количество(); + Если ЕстьВложенныеЗамеры Тогда + КоличествоДанныхШага = ?(КоличествоДанных = 0, 1, КоличествоДанных); + ЗафиксироватьЗамерДлительнойОперации(ОписаниеЗамера, КоличествоДанныхШага, ?(ПустаяСтрока(ИмяШага), "ПоследнийШаг", ИмяШага), Комментарий); + КонецЕсли; + + ТекущееВремя = ТекущаяУниверсальнаяДатаВМиллисекундах(); + УдельноеВремяОбщее = 0; + ИмяКлючевойОперации = ОписаниеЗамера["КлючеваяОперация"]; + Для Каждого Замер Из ВложенныеЗамеры Цикл + ДанныеЗамера = Замер.Значение; + ВесВложенногоЗамера = ДанныеЗамера["ВесЗамера"]; + ДлительностьВложенногоЗамера = ДанныеЗамера["Длительность"]; + КлючеваяОперация = ИмяКлючевойОперации + "." + Замер.Ключ; + УдельноеВремя = ?(ВесВложенногоЗамера = 0, ДлительностьВложенногоЗамера, ДлительностьВложенногоЗамера / ВесВложенногоЗамера); + УдельноеВремяОбщее = УдельноеВремяОбщее + УдельноеВремя; + + ПараметрыЗамера = Новый Структура; + ПараметрыЗамера.Вставить("КлючеваяОперация", КлючеваяОперация); + ПараметрыЗамера.Вставить("Длительность", УдельноеВремя/1000); + ПараметрыЗамера.Вставить("ДатаНачалаКлючевойОперации", ДанныеЗамера["ВремяНачала"]); + ПараметрыЗамера.Вставить("ДатаОкончанияКлючевойОперации", ДанныеЗамера["ВремяОкончания"]); + ПараметрыЗамера.Вставить("ВесЗамера", ВесВложенногоЗамера); + ПараметрыЗамера.Вставить("Комментарий", ДанныеЗамера["Комментарий"]); + ПараметрыЗамера.Вставить("Технологический", Ложь); + ПараметрыЗамера.Вставить("Длительная", Истина); + + ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); + КонецЦикла; + ВремяНачалаЗамера = ОписаниеЗамера["ВремяНачала"]; + // Фиксация удельного времени ключевой операции. + Если ЕстьВложенныеЗамеры Тогда + + ПараметрыЗамера = Новый Структура; + ПараметрыЗамера.Вставить("КлючеваяОперация", ИмяКлючевойОперации + ".Удельный"); + ПараметрыЗамера.Вставить("Длительность", УдельноеВремяОбщее/1000); + ПараметрыЗамера.Вставить("ДатаНачалаКлючевойОперации", ВремяНачалаЗамера); + ПараметрыЗамера.Вставить("ДатаОкончанияКлючевойОперации", ТекущееВремя); + ПараметрыЗамера.Вставить("ВесЗамера", ОписаниеЗамера["ВесЗамера"]); + ПараметрыЗамера.Вставить("Комментарий", Комментарий); + ПараметрыЗамера.Вставить("Технологический", Ложь); + ПараметрыЗамера.Вставить("Длительная", Истина); + + ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); + КонецЕсли; + + // Фиксация длительной ключевой операции. + ПараметрыЗамера = Новый Структура; + ПараметрыЗамера.Вставить("КлючеваяОперация", ИмяКлючевойОперации); + ПараметрыЗамера.Вставить("Длительность", (ТекущееВремя - ВремяНачалаЗамера)/1000); + ПараметрыЗамера.Вставить("ДатаНачалаКлючевойОперации", ВремяНачалаЗамера); + ПараметрыЗамера.Вставить("ДатаОкончанияКлючевойОперации", ТекущееВремя); + ПараметрыЗамера.Вставить("ВесЗамера", ОписаниеЗамера["ВесЗамера"]); + ПараметрыЗамера.Вставить("Комментарий", Комментарий); + ПараметрыЗамера.Вставить("Технологический", Ложь); + ПараметрыЗамера.Вставить("Длительная", Ложь); + + ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -261,7 +420,7 @@ // Возвращаемое значение: // СправочникСсылка.КлючевыеОперации. // -Функция СоздатьКлючевуюОперацию(ИмяКлючевойОперации, ЦелевоеВремя = 1, ВыполненаСОшибкой = Ложь) Экспорт +Функция СоздатьКлючевуюОперацию(ИмяКлючевойОперации, ЦелевоеВремя = 1, ВыполненаСОшибкой = Ложь, Длительная = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -299,6 +458,7 @@ НовыйЭлемент.Наименование = Наименование; НовыйЭлемент.ЦелевоеВремя = ЦелевоеВремя; НовыйЭлемент.ВыполненаСОшибкой = ВыполненаСОшибкой; + НовыйЭлемент.Длительная = Длительная; НовыйЭлемент.Записать(); КлючеваяОперацияСсылка = НовыйЭлемент.Ссылка; Иначе @@ -394,17 +554,33 @@ // Длительность - Число // ДатаНачалаКлючевойОперации - Дата. // -Процедура ЗафиксироватьДлительностьКлючевойОперации( - КлючеваяОперация, - Длительность, - ДатаНачалаКлючевойОперации, - ДатаОкончанияКлючевойОперации, - ВесЗамера, - Комментарий, - Технологический = Ложь) +Процедура ЗафиксироватьДлительностьКлючевойОперации(Параметры) + + КлючеваяОперация = Параметры.КлючеваяОперация; + Длительность = Параметры.Длительность; + ДатаНачалаКлючевойОперации = Параметры.ДатаНачалаКлючевойОперации; + ДатаОкончанияКлючевойОперации = Параметры.ДатаОкончанияКлючевойОперации; + ВесЗамера = Параметры.ВесЗамера; + Комментарий = Параметры.Комментарий; + Технологический = Параметры.Технологический; + Длительная = Параметры.Длительная; + + Если ОценкаПроизводительностиСлужебный.ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда + МодульОбщегоНазначенияКлиентСервер = ОценкаПроизводительностиСлужебный.ОбщийМодуль("ОбщегоНазначенияКлиентСервер"); + КодОсновногоЯзыка = МодульОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); + Иначе + КодОсновногоЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка; + КонецЕсли; Если БезопасныйРежим() <> Ложь Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", КодОсновногоЯзыка), + УровеньЖурналаРегистрации.Информация,,,Строка(КлючеваяОперация)); + + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДатаНачалаКлючевойОперации) Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Невозможно зафиксировать замер с пустой датой начала'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Информация,,,Строка(КлючеваяОперация)); Возврат; @@ -413,7 +589,7 @@ УстановитьПривилегированныйРежим(Истина); Если ТипЗнч(КлючеваяОперация) = Тип("Строка") Тогда - КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация); + КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация, , Длительная); Иначе КлючеваяОперацияСсылка = КлючеваяОперация; КонецЕсли; @@ -622,45 +798,23 @@ УровниПроизводительностиЧисло.Вставить(Перечисления.УровниПроизводительности.Удовлетворительно, 0.70); УровниПроизводительностиЧисло.Вставить(Перечисления.УровниПроизводительности.Плохо, 0.50); - ТекстЗапроса = " - |ВЫБРАТЬ - | Замеры.КлючеваяОперация КАК КлючеваяОперация, - | Замеры.ДатаНачалаЗамера КАК ДатаНачалаЗамера, - | Замеры.ВремяВыполнения КАК ВремяВыполнения, - | Замеры.ВесЗамера КАК ВесЗамера, - | Замеры.Пользователь КАК Пользователь, - | Замеры.ДатаЗаписи КАК ДатаЗаписи, - | Замеры.НомерСеанса КАК НомерСеанса, - | Замеры.Комментарий КАК Комментарий, - | КлючевыеОперации.Наименование КАК КлючеваяОперацияСтрока, - | КлючевыеОперации.Приоритет КАК КлючеваяОперацияПриоритет, - | КлючевыеОперации.ЦелевоеВремя КАК КлючеваяОперацияЦелевоеВремя, - | КлючевыеОперации.МинимальноДопустимыйУровень КАК МинимальноДопустимыйУровень, - | КлючевыеОперации.ВыполненаСОшибкой КАК ВыполненаСОшибкой - |ИЗ - | РегистрСведений.ЗамерыВремени КАК Замеры - |ВНУТРЕННЕЕ СОЕДИНЕНИЕ - | Справочник.КлючевыеОперации КАК КлючевыеОперации - |ПО - | КлючевыеОперации.Ссылка = Замеры.КлючеваяОперация - |ГДЕ - | Замеры.ДатаЗаписи > &ДатаПоследнейВыгрузки - | И Замеры.ДатаЗаписи <= &ВерхняяГраньДатыЗамеров - |УПОРЯДОЧИТЬ ПО - | Замеры.КлючеваяОперация, - | Замеры.Комментарий - |"; - - Запрос.Текст = ТекстЗапроса; - Если ДопПараметры = Неопределено Тогда + ТекстЗапроса = ЗамерыВремениБезОтбораПоПрофилю(); Запрос.УстановитьПараметр("ДатаПоследнейВыгрузки", Константы.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC.Получить()); Запрос.УстановитьПараметр("ВерхняяГраньДатыЗамеров", ВерхняяГраньДатыЗамеров); Константы.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC.Установить(ВерхняяГраньДатыЗамеров); Иначе + Если ЗначениеЗаполнено(ДопПараметры.Профиль) Тогда + ТекстЗапроса = ЗамерыВремениСОтборомПоПрофилю(); + Запрос.УстановитьПараметр("Профиль", ДопПараметры.Профиль); + Иначе + ТекстЗапроса = ЗамерыВремениБезОтбораПоПрофилю(); + КонецЕсли; Запрос.УстановитьПараметр("ДатаПоследнейВыгрузки", ДопПараметры.ДатаНачала); Запрос.УстановитьПараметр("ВерхняяГраньДатыЗамеров", ДопПараметры.ДатаОкончания); КонецЕсли; + + Запрос.Текст = ТекстЗапроса; Результат = Запрос.Выполнить(); @@ -680,11 +834,13 @@ КлючеваяОперация = Новый Соответствие; КлючеваяОперация.Вставить("uid", Строка(Выборка.КлючеваяОперация.УникальныйИдентификатор())); КлючеваяОперация.Вставить("name", Выборка.КлючеваяОперацияСтрока); + КлючеваяОперация.Вставить("nameFull", Выборка.КлючеваяОперацияИмя); КлючеваяОперация.Вставить("comments", Новый Соответствие); КлючеваяОперация.Вставить("priority", Выборка.КлючеваяОперацияПриоритет); КлючеваяОперация.Вставить("targetValue", Выборка.КлючеваяОперация.ЦелевоеВремя); КлючеваяОперация.Вставить("minimalApdexValue", УровниПроизводительностиЧисло[Выборка.КлючеваяОперация.МинимальноДопустимыйУровень]); КлючеваяОперация.Вставить("runningError", Выборка.ВыполненаСОшибкой); + КлючеваяОперация.Вставить("long", Выборка.Длительная); ЗамерыСРазделением.Вставить(Выборка.КлючеваяОперация, КлючеваяОперация); КонецЕсли; @@ -731,7 +887,7 @@ // МассивыЗамеров - Структура со значением типа Массив. Процедура ВыгрузитьРезультаты(КаталогиЭкспорта, МассивыЗамеров, ТекДата, ПорядковыйНомерФайла) - ПространствоИмен = "www.v8.1c.ru/ssl/performace-assessment/apdexExport/1.0.0.2"; + ПространствоИмен = "www.v8.1c.ru/ssl/performace-assessment/apdexExport/1.0.0.3"; ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".xml"); ЗаписьXML = Новый ЗаписьXML; @@ -742,7 +898,7 @@ ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - ЗаписьXML.ЗаписатьАтрибут("version", ПространствоИмен, "1.0.0.2"); + ЗаписьXML.ЗаписатьАтрибут("version", ПространствоИмен, "1.0.0.3"); ЗаписьXML.ЗаписатьАтрибут("period", ПространствоИмен, Строка(Дата(1,1,1) + ТекДата/1000)); ТипКлючеваяОперация = ФабрикаXDTO.Тип(ПространствоИмен, "KeyOperation"); @@ -754,6 +910,8 @@ Для Каждого Комментарий Из КлючеваяОперацияЗамеры["comments"] Цикл КлючеваяОперация = ФабрикаXDTO.Создать(ТипКлючеваяОперация); КлючеваяОперация.name = КлючеваяОперацияЗамеры["name"]; + КлючеваяОперация.nameFull = КлючеваяОперацияЗамеры["nameFull"]; + КлючеваяОперация.long = КлючеваяОперацияЗамеры["long"]; КлючеваяОперация.comment = Комментарий.Ключ; КлючеваяОперация.priority = КлючеваяОперацияЗамеры["priority"]; КлючеваяОперация.targetValue = КлючеваяОперацияЗамеры["targetValue"]; @@ -797,6 +955,73 @@ УдалитьФайлы(ИмяВременногоФайла); КонецПроцедуры +Функция ЗамерыВремениБезОтбораПоПрофилю() + Возврат " + |ВЫБРАТЬ + | Замеры.КлючеваяОперация КАК КлючеваяОперация, + | Замеры.ДатаНачалаЗамера КАК ДатаНачалаЗамера, + | Замеры.ВремяВыполнения КАК ВремяВыполнения, + | Замеры.ВесЗамера КАК ВесЗамера, + | Замеры.Пользователь КАК Пользователь, + | Замеры.ДатаЗаписи КАК ДатаЗаписи, + | Замеры.НомерСеанса КАК НомерСеанса, + | Замеры.Комментарий КАК Комментарий, + | КлючевыеОперации.Наименование КАК КлючеваяОперацияСтрока, + | КлючевыеОперации.Имя КАК КлючеваяОперацияИмя, + | КлючевыеОперации.Приоритет КАК КлючеваяОперацияПриоритет, + | КлючевыеОперации.ЦелевоеВремя КАК КлючеваяОперацияЦелевоеВремя, + | КлючевыеОперации.МинимальноДопустимыйУровень КАК МинимальноДопустимыйУровень, + | КлючевыеОперации.ВыполненаСОшибкой КАК ВыполненаСОшибкой, + | КлючевыеОперации.Длительная КАК Длительная + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ПО + | КлючевыеОперации.Ссылка = Замеры.КлючеваяОперация + |ГДЕ + | Замеры.ДатаЗаписи > &ДатаПоследнейВыгрузки + | И Замеры.ДатаЗаписи <= &ВерхняяГраньДатыЗамеров + |УПОРЯДОЧИТЬ ПО + | Замеры.КлючеваяОперация, + | Замеры.Комментарий + |"; +КонецФункции + +Функция ЗамерыВремениСОтборомПоПрофилю() + Возврат " + |ВЫБРАТЬ + | Замеры.КлючеваяОперация КАК КлючеваяОперация, + | Замеры.ДатаНачалаЗамера КАК ДатаНачалаЗамера, + | Замеры.ВремяВыполнения КАК ВремяВыполнения, + | Замеры.ВесЗамера КАК ВесЗамера, + | Замеры.Пользователь КАК Пользователь, + | Замеры.ДатаЗаписи КАК ДатаЗаписи, + | Замеры.НомерСеанса КАК НомерСеанса, + | Замеры.Комментарий КАК Комментарий, + | КлючевыеОперации.КлючеваяОперация.Наименование КАК КлючеваяОперацияСтрока, + | КлючевыеОперации.КлючеваяОперация.Имя КАК КлючеваяОперацияИмя, + | КлючевыеОперации.Приоритет КАК КлючеваяОперацияПриоритет, + | КлючевыеОперации.ЦелевоеВремя КАК КлючеваяОперацияЦелевоеВремя, + | КлючевыеОперации.КлючеваяОперация.МинимальноДопустимыйУровень КАК МинимальноДопустимыйУровень, + | КлючевыеОперации.КлючеваяОперация.ВыполненаСОшибкой КАК ВыполненаСОшибкой, + | КлючевыеОперации.КлючеваяОперация.Длительная КАК Длительная + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.ПрофилиКлючевыхОпераций.КлючевыеОперацииПрофиля КАК КлючевыеОперации + |ПО + | КлючевыеОперации.КлючеваяОперация = Замеры.КлючеваяОперация + | И КлючевыеОперации.Ссылка = &Профиль + |ГДЕ + | Замеры.ДатаЗаписи > &ДатаПоследнейВыгрузки + | И Замеры.ДатаЗаписи <= &ВерхняяГраньДатыЗамеров + |УПОРЯДОЧИТЬ ПО + | Замеры.КлючеваяОперация, + | Замеры.Комментарий + |"; +КонецФункции + // Генерирует имя файла для экспорта // // Параметры: @@ -837,4 +1062,168 @@ КонецФункции +Процедура ЗагрузитьФайлОценкиПроизводительности(ИмяФайла, АдресХранилища) Экспорт + + ФайлХранилища = ПолучитьИмяВременногоФайла("zip"); + ДвоичныеДанныеАрхива = ПолучитьИзВременногоХранилища(АдресХранилища); + ДвоичныеДанныеАрхива.Записать(ФайлХранилища); + + КаталогФайлов = ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла()); + + Попытка + ЧтениеZIP = Новый ЧтениеZipФайла(ФайлХранилища); + ЧтениеZIP.ИзвлечьВсе(КаталогФайлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + ЧтениеZIP.Закрыть(); + Исключение + УдалитьФайлы(ФайлХранилища); + УдалитьФайлы(КаталогФайлов); + ОписаниеОшибки = ОписаниеОшибки(); + ШаблонСтроки = НСтр("ru = 'Не удалось распаковать архив %1 %2'"); + ОписаниеИсключения = ОценкаПроизводительностиКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ИмяФайла, ОписаниеОшибки); + ВызватьИсключение ОписаниеИсключения; + КонецПопытки; + + Попытка + СуществующиеКлючевыеОперации = СуществующиеКлючевыеОперации(); + + Для Каждого Файл Из НайтиФайлы(КаталогФайлов, "*.XML") Цикл + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя); + ЧтениеXML.ПерейтиКСодержимому(); + КлючевыеОперацииДляЗаписи = Новый Массив; + СырыеЗамерыДляЗаписи = Новый Массив; + ЗагрузитьФайлОценкиПроизводительностиApdexExport(ЧтениеXML, СуществующиеКлючевыеОперации, КлючевыеОперацииДляЗаписи, СырыеЗамерыДляЗаписи); + ЧтениеXML.Закрыть(); + КонецЦикла; + УдалитьФайлы(ФайлХранилища); + УдалитьФайлы(КаталогФайлов); + Исключение + ЧтениеXML.Закрыть(); + УдалитьФайлы(ФайлХранилища); + УдалитьФайлы(КаталогФайлов); + ВызватьИсключение; + КонецПопытки; + + НачатьТранзакцию(); + Попытка + Для Каждого СыройЗамерДляЗаписи Из СырыеЗамерыДляЗаписи Цикл + Запись = РегистрыСведений.ЗамерыВремени.СоздатьМенеджерЗаписи(); + Для Каждого КлючИЗначение Из СыройЗамерДляЗаписи Цикл + Запись[КлючИЗначение.Ключ] = КлючИЗначение.Значение; + КонецЦикла; + Запись.ДатаЗаписиНачалоЧаса = НачалоЧаса(Запись.ДатаЗаписи); + Запись.ДатаОкончания = Запись.ДатаНачалаЗамера + Запись.ВремяВыполнения*1000; + Запись.Записать(); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ЗагрузитьФайлОценкиПроизводительностиApdexExport(ЧтениеXML, СуществующиеКлючевыеОперации, КлючевыеОперацииДляЗаписи, СырыеЗамерыДляЗаписи) + + ПространствоИмен = ЧтениеXML.URIПространстваИмен; + + ДатаФормированияФайла = ЧтениеXML.ЗначениеАтрибута("period", ПространствоИмен); + + measurement = "measurement"; + ТипКлючеваяОперация = ФабрикаXDTO.Тип(ПространствоИмен, "KeyOperation"); + + ЧтениеXML.Прочитать(); + + ЭтотФайлПустой = Истина; + Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл + + ЭтотФайлПустой = Ложь; + + КлючеваяОперация = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипКлючеваяОперация); + + УникальныйИдентификаторКлючевойОперации = КлючеваяОперация.uid; + КлючеваяОперацияНаименование = КлючеваяОперация.name; + КлючеваяОперацияИмя = КлючеваяОперация.nameFull; + Приоритет = КлючеваяОперация.priority; + ЦелевоеВремя = КлючеваяОперация.targetValue; + Комментарий = КлючеваяОперация.comment; + ВыполненаСОшибкой = КлючеваяОперация.runningError; + Длительная = КлючеваяОперация.long; + + КлючеваяОперацияСсылка = СуществующиеКлючевыеОперации[КлючеваяОперацияИмя]; + Если КлючеваяОперацияСсылка = Неопределено Тогда + КлючеваяОперацияСсылка = СоздатьКлючевуюОперацию(КлючеваяОперацияИмя, ЦелевоеВремя, ВыполненаСОшибкой, Длительная); + СуществующиеКлючевыеОперации.Вставить(КлючеваяОперацияИмя, КлючеваяОперацияСсылка); + КонецЕсли; + + МаксимальнаяДатаЗамера = Неопределено; + ЧислоЗамеров = КлючеваяОперация[measurement].Количество(); + НомерЗамера = 0; + Пока НомерЗамера < ЧислоЗамеров Цикл + Замер = КлючеваяОперация[measurement].Получить(НомерЗамера); + ДатаЗамера = Замер.tUTC; + Если МаксимальнаяДатаЗамера = Неопределено ИЛИ МаксимальнаяДатаЗамера < ДатаЗамера Тогда + МаксимальнаяДатаЗамера = ДатаЗамера; + КонецЕсли; + + СыройЗамерДляЗаписи = Новый Соответствие; + СыройЗамерДляЗаписи.Вставить("КлючеваяОперация", КлючеваяОперацияСсылка); + СыройЗамерДляЗаписи.Вставить("ДатаНачалаЗамера", Замер.tUTC); + СыройЗамерДляЗаписи.Вставить("ВремяВыполнения", Замер.value); + СыройЗамерДляЗаписи.Вставить("ВесЗамера", Замер.weight); + СыройЗамерДляЗаписи.Вставить("Пользователь", Замер.userName); + СыройЗамерДляЗаписи.Вставить("ДатаЗаписи", Замер.tSaveUTC); + СыройЗамерДляЗаписи.Вставить("НомерСеанса", Замер.sessionNumber); + СыройЗамерДляЗаписи.Вставить("Комментарий", Комментарий); + + СырыеЗамерыДляЗаписи.Добавить(СыройЗамерДляЗаписи); + + НомерЗамера = НомерЗамера + 1; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Функция СуществующиеКлючевыеОперации() + СуществующиеКлючевыеОперации = Новый Соответствие; + Запрос = Новый Запрос("ВЫБРАТЬ + | КлючевыеОперации.Ссылка КАК Ссылка, + | КлючевыеОперации.Имя КАК Имя + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации"); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СуществующиеКлючевыеОперации.Вставить(Выборка.Имя, Выборка.Ссылка); + КонецЦикла; + Возврат СуществующиеКлючевыеОперации; +КонецФункции + +// Добавляет к переданному пути каталога конечный символ-разделитель, если он отсутствует. +// +// Параметры: +// ПутьКаталога - Строка - путь к каталогу. +// Платформа - ТипПлатформы - параметр устарел, больше не используется. +// +// Возвращаемое значение: +// Строка - путь к каталогу с конечным символом-разделителем. +// +// Пример: +// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\". +// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\". +// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%"); // возвращает "%APPDATA%\". +// +Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога, Знач Платформа = Неопределено) + Если ПустаяСтрока(ПутьКаталога) Тогда + Возврат ПутьКаталога; + КонецЕсли; + + ДобавляемыйСимвол = ПолучитьРазделительПути(); + + Если СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда + Возврат ПутьКаталога; + Иначе + Возврат ПутьКаталога + ДобавляемыйСимвол; + КонецЕсли; +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl index 8e15d4213..c682ece7c 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl @@ -88,6 +88,63 @@ НоваяЗапись.Пользователь = Пользователь; НоваяЗапись.ДатаЗаписиЛокальная = ДатаЗаписиЛокальная; НоваяЗапись.Комментарий = КомментарийПоУмолчаниюСтрока; + + // Запись вложенных замеров. + ВложенныеЗамеры = Замер.Значение["ВложенныеЗамеры"]; + Если ВложенныеЗамеры = Неопределено Тогда + Продолжить; + КонецЕсли; + + УдельноеВремяОбщее = 0; + + Для Каждого ВложенныйЗамер Из ВложенныеЗамеры Цикл + ДанныеЗамера = ВложенныйЗамер.Значение; + ВесВложенногоЗамера = ДанныеЗамера["ВесЗамера"]; + ДлительностьВложенногоЗамера = ДанныеЗамера["Длительность"]; + КомментарийВложенногоЗамера = ДанныеЗамера["Комментарий"]; + КлючеваяОперацияВложенногоШага = КлючеваяОперация + "." + ВложенныйЗамер.Ключ; + КлючеваяОперацияВложенногоШагаСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперацияВложенногоШага, ВыполненаСОшибкой, Истина); + УдельноеВремя = ?(ВесВложенногоЗамера = 0, ДлительностьВложенногоЗамера, ДлительностьВложенногоЗамера / ВесВложенногоЗамера); + УдельноеВремяОбщее = УдельноеВремяОбщее + УдельноеВремя; + + Если КомментарийВложенногоЗамера <> Неопределено Тогда + КомментарийПоУмолчанию.Вставить("ДопИнф", КомментарийВложенногоЗамера); + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет)); + ЗаписатьJSON(ЗаписьJSON, КомментарийПоУмолчанию); + КомментарийШагаСтрока = ЗаписьJSON.Закрыть(); + КонецЕсли; + + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.КлючеваяОперация = КлючеваяОперацияВложенногоШагаСсылка; + НоваяЗапись.ДатаНачалаЗамера = ДанныеЗамера["ВремяНачала"]; + НоваяЗапись.НомерСеанса = НомерСеанса; + НоваяЗапись.ВремяВыполнения = УдельноеВремя/1000; + НоваяЗапись.ВесЗамера = ВесВложенногоЗамера; + НоваяЗапись.ДатаОкончания = ДанныеЗамера["ВремяОкончания"]; + НоваяЗапись.ДатаЗаписи = ДатаЗаписи; + НоваяЗапись.ДатаЗаписиНачалоЧаса = ДатаЗаписиНачалоЧаса; + НоваяЗапись.Пользователь = Пользователь; + НоваяЗапись.ДатаЗаписиЛокальная = ДатаЗаписиЛокальная; + НоваяЗапись.Комментарий = КомментарийШагаСтрока; + КонецЦикла; + // Фиксация удельного времени ключевой операции. + Если ВложенныеЗамеры.Количество() > 0 Тогда + КлючеваяОперацияУдельная = КлючеваяОперация + ".Удельный"; + КлючеваяОперацияУдельнаяСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперацияУдельная, ВыполненаСОшибкой, Истина); + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.КлючеваяОперация = КлючеваяОперацияУдельнаяСсылка; + НоваяЗапись.ДатаНачалаЗамера = ПараметрыЗамера["ВремяНачала"]; + НоваяЗапись.НомерСеанса = НомерСеанса; + НоваяЗапись.ВремяВыполнения = УдельноеВремяОбщее/1000; + НоваяЗапись.ВесЗамера = ПараметрыЗамера["ВесЗамера"]; + НоваяЗапись.ДатаЗаписи = ДатаЗаписи; + НоваяЗапись.ДатаЗаписиНачалоЧаса = ДатаЗаписиНачалоЧаса; + НоваяЗапись.ДатаОкончания = ПараметрыЗамера["ВремяОкончания"]; + НоваяЗапись.Пользователь = Пользователь; + НоваяЗапись.ДатаЗаписиЛокальная = ДатаЗаписиЛокальная; + НоваяЗапись.Комментарий = КомментарийПоУмолчаниюСтрока; + КонецЕсли; КонецЦикла; Если НаборЗаписей.Количество() > 0 Тогда diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl index 7abcc64d4..8e5de96fa 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl @@ -2,6 +2,9 @@ // Начинает замер времени ключевой операции. // Результат замера будет записан в регистр сведений ЗамерыВремени. +// Поскольку клиентские замеры хранятся в клиентском буфере и записываются с периодичностью, +// указанной в константе ОценкаПроизводительностиПериодЗаписи (по умолчанию, каждую минуту), +// в случае завершения сеанса часть замеров может быть потеряна. // // Параметры: // АвтоЗавершение - Булево - признак автоматического завершения замера. @@ -91,7 +94,7 @@ ЗамерыЗавершенные.Вставить(УИДЗамера, Замер); Замеры.Удалить(УИДЗамера); КонецЕсли; - КонецЕсли; + КонецЕсли; КонецЕсли; @@ -209,6 +212,125 @@ КонецПроцедуры +// Начинает замер времени выполнения длительной ключевой операции. Закончить замер нужно явно вызовом +// процедуры ЗакончитьЗамерДлительнойОперации. +// Результат замера будет записан в регистр сведений ЗамерыВремени. +// +// Параметры: +// КлючеваяОперация - Строка - имя ключевой операции. +// +// Возвращаемое значение: +// ОписаниеЗамера - соответствие. +// КлючеваяОперация - имя ключевой операции. +// ВремяНачала - время начала ключевой операции в миллисекундах. +// ВремяПоследнегоЗамера - время последнего замера ключевой операции в миллисекундах. +// ВесЗамера - количество данных, обработанных в ходе выполнения действий. +// ВложенныеЗамеры - коллекция замеров вложенных шагов. +// +Функция НачатьЗамерДлительнойОперации(КлючеваяОперация) Экспорт + + УИДЗамера = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Замер = Новый Соответствие; + + Если ВыполнятьЗамерыПроизводительности() Тогда + УИДЗамера = Новый УникальныйИдентификатор(); + Параметры = Новый Структура; + Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); + Параметры.Вставить("УИДЗамера", УИДЗамера); + Параметры.Вставить("ВыполненаСОшибкой", Ложь); + Параметры.Вставить("АвтоЗавершение", Ложь); + + НачатьЗамерВремениНаКлиентеСлужебный(Параметры); + + ИмяПараметра = "СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"; + Замеры = ПараметрыПриложения[ИмяПараметра]["Замеры"]; + Замер = Замеры[УИДЗамера]; + Замер.Вставить("ВремяПоследнегоЗамера", Замер["ВремяНачала"]); + Замер.Вставить("УдельноеВремя", 0.0); + Замер.Вставить("ВесЗамера", 0); + Замер.Вставить("ВложенныеЗамеры", Новый Соответствие); + Замер.Вставить("УИДЗамера", УИДЗамера); + Замер.Вставить("Клиентский", Истина); + + КонецЕсли; + + Возврат Замер; + +КонецФункции + +// Фиксирует замер вложенного шага длительной операции. +// Параметры: +// ОписаниеЗамера - Соответствие - должно быть получено вызовом метода НачатьЗамерДлительнойОперации. +// КоличествоДанных - Число - количество данных, например, строк, обработанных в ходе выполнения вложенного шага. +// ИмяШага - Строка - произвольное имя вложенного шага. +// Комментарий - Строка - произвольное дополнительное описание замера. +// +Процедура ЗафиксироватьЗамерДлительнойОперации(ОписаниеЗамера, КоличествоДанных, ИмяШага, Комментарий = "") Экспорт + + Если НЕ ЗначениеЗаполнено(ОписаниеЗамера) Тогда + Возврат; + КонецЕсли; + + ТекущееВремя = ТекущаяУниверсальнаяДатаВМиллисекундах(); + КоличествоДанныхШага = ?(КоличествоДанных = 0, 1, КоличествоДанных); + + Длительность = ТекущееВремя - ОписаниеЗамера["ВремяПоследнегоЗамера"]; + // Если вложенный замер выполняется первый раз, то инициализируем его. + ВложенныеЗамеры = ОписаниеЗамера["ВложенныеЗамеры"]; + Если ВложенныеЗамеры[ИмяШага] = Неопределено Тогда + ВложенныеЗамеры.Вставить(ИмяШага, Новый Соответствие); + ШагВложенногоЗамера = ВложенныеЗамеры[ИмяШага]; + ШагВложенногоЗамера.Вставить("Комментарий", Комментарий); + ШагВложенногоЗамера.Вставить("ВремяНачала", ОписаниеЗамера["ВремяПоследнегоЗамера"]); + ШагВложенногоЗамера.Вставить("Длительность", 0.0); + ШагВложенногоЗамера.Вставить("ВесЗамера", 0); + КонецЕсли; + // Пишем данные вложенного замера. + ШагВложенногоЗамера = ВложенныеЗамеры[ИмяШага]; + ШагВложенногоЗамера.Вставить("ВремяОкончания", ТекущееВремя); + ШагВложенногоЗамера.Вставить("Длительность", Длительность + ШагВложенногоЗамера["Длительность"]); + ШагВложенногоЗамера.Вставить("ВесЗамера", КоличествоДанныхШага + ШагВложенногоЗамера["ВесЗамера"]); + + // Пишем данные длительного замера + ОписаниеЗамера.Вставить("ВремяПоследнегоЗамера", ТекущееВремя); + ОписаниеЗамера.Вставить("ВесЗамера", КоличествоДанныхШага + ОписаниеЗамера["ВесЗамера"]); + +КонецПроцедуры + +// Завершает замер длительной операции. +// Если указано имя шага, фиксирует его как отдельный вложенный шаг +// Параметры: +// ОписаниеЗамера - Соответствие - должно быть получено вызовом метода НачатьЗамерДлительнойОперации. +// КоличествоДанных - Число - количество данных, например, строк, обработанных в ходе выполнения вложенного шага. +// ИмяШага - Строка - произвольное имя вложенного шага. +// Комментарий - Строка - произвольное дополнительное описание замера. +// +Процедура ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, КоличествоДанных, ИмяШага = "", Комментарий = "") Экспорт + + Если ВыполнятьЗамерыПроизводительности() Тогда + + Если ОписаниеЗамера["ВложенныеЗамеры"].Количество() Тогда + КоличествоДанныхШага = ?(КоличествоДанных = 0, 1, КоличествоДанных); + ЗафиксироватьЗамерДлительнойОперации(ОписаниеЗамера, КоличествоДанныхШага, ?(ПустаяСтрока(ИмяШага), "ПоследнийШаг", ИмяШага), Комментарий); + КонецЕсли; + + УИДЗамера = ОписаниеЗамера["УИДЗамера"]; + ВремяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ЗавершитьЗамерВремениСлужебный(УИДЗамера, ВремяОкончания); + + Замеры = ПараметрыПриложения["СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"]["Замеры"]; + Замер = Замеры[УИДЗамера]; + + Если Замер <> Неопределено Тогда + ЗамерыЗавершенные = ПараметрыПриложения["СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"]["ЗамерыЗавершенные"]; + ОписаниеЗамера.Вставить("ВремяОкончания", Замер["ВремяОкончания"]); + ЗамерыЗавершенные.Вставить(УИДЗамера, ОписаниеЗамера); + Замеры.Удалить(УИДЗамера); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index d5ae80d04..3cff62e50 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -960,6 +960,99 @@ КонецФункции +// Подставляет параметры в строку. Максимально возможное число параметров - 9. +// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. +// +// Параметры: +// ШаблонСтроки - Строка - шаблон строки с параметрами (вхождениями вида "%<номер параметра>", +// например, "%1 пошел в %2"); +// Параметр - Строка - значение подставляемого параметра. +// +// Возвращаемое значение: +// Строка - текстовая строка с подставленными параметрами. +// +// Пример: +// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел +// в Зоопарк". +// +Функция ПодставитьПараметрыВСтроку(Знач ШаблонСтроки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт + + ЕстьПараметрыСПроцентом = СтрНайти(Параметр1, "%") + Или СтрНайти(Параметр2, "%") + Или СтрНайти(Параметр3, "%") + Или СтрНайти(Параметр4, "%") + Или СтрНайти(Параметр5, "%") + Или СтрНайти(Параметр6, "%") + Или СтрНайти(Параметр7, "%") + Или СтрНайти(Параметр8, "%") + Или СтрНайти(Параметр9, "%"); + + Если ЕстьПараметрыСПроцентом Тогда + Возврат ПодставитьПараметрыСПроцентом(ШаблонСтроки, Параметр1, + Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9); + КонецЕсли; + + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%1", Параметр1); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%2", Параметр2); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%3", Параметр3); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%4", Параметр4); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%5", Параметр5); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%6", Параметр6); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%7", Параметр7); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%8", Параметр8); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%9", Параметр9); + Возврат ШаблонСтроки; + +КонецФункции + +// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д. +Функция ПодставитьПараметрыСПроцентом(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) + + Результат = ""; + Позиция = СтрНайти(СтрокаПодстановки, "%"); + Пока Позиция > 0 Цикл + Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1); + СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1); + ПодставляемыйПараметр = Неопределено; + Если СимволПослеПроцента = "1" Тогда + ПодставляемыйПараметр = Параметр1; + ИначеЕсли СимволПослеПроцента = "2" Тогда + ПодставляемыйПараметр = Параметр2; + ИначеЕсли СимволПослеПроцента = "3" Тогда + ПодставляемыйПараметр = Параметр3; + ИначеЕсли СимволПослеПроцента = "4" Тогда + ПодставляемыйПараметр = Параметр4; + ИначеЕсли СимволПослеПроцента = "5" Тогда + ПодставляемыйПараметр = Параметр5; + ИначеЕсли СимволПослеПроцента = "6" Тогда + ПодставляемыйПараметр = Параметр6; + ИначеЕсли СимволПослеПроцента = "7" Тогда + ПодставляемыйПараметр = Параметр7 + ИначеЕсли СимволПослеПроцента = "8" Тогда + ПодставляемыйПараметр = Параметр8; + ИначеЕсли СимволПослеПроцента = "9" Тогда + ПодставляемыйПараметр = Параметр9; + КонецЕсли; + Если ПодставляемыйПараметр = Неопределено Тогда + Результат = Результат + "%"; + СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1); + Иначе + Результат = Результат + ПодставляемыйПараметр; + СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2); + КонецЕсли; + Позиция = СтрНайти(СтрокаПодстановки, "%"); + КонецЦикла; + Результат = Результат + СтрокаПодстановки; + + Возврат Результат; +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl index 310734dfc..4e18272b0 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl @@ -11,7 +11,7 @@ // Возвращаемое значение: // СправочникСсылка.КлючевыеОперации // -Функция ПолучитьКлючевуюОперациюПоИмени(ИмяКлючевойОперации, ВыполненаСОшибкой = Ложь) Экспорт +Функция ПолучитьКлючевуюОперациюПоИмени(ИмяКлючевойОперации, ВыполненаСОшибкой = Ложь, Длительная = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -34,7 +34,7 @@ Запрос.УстановитьПараметр("ИмяХеш", ИмяХеш); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда - КлючеваяОперацияСсылка = ОценкаПроизводительности.СоздатьКлючевуюОперацию(ИмяКлючевойОперации, 1, ВыполненаСОшибкой); + КлючеваяОперацияСсылка = ОценкаПроизводительности.СоздатьКлючевуюОперацию(ИмяКлючевойОперации, 1, ВыполненаСОшибкой, Длительная); Иначе Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl index 3e43ea008..11359ff8d 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl @@ -121,6 +121,12 @@ КонецПроцедуры +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + МодульВариантыОтчетов = ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ОценкаПроизводительности); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -405,7 +411,6 @@ Попытка Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Запрос = Новый Запрос; diff --git a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl index 993d98ed3..3b9865c7a 100644 --- a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl @@ -680,7 +680,7 @@ Шаблоны = Новый Массив; - ИнтеграцияСтандартныхПодсистем.ПриПолученииСпискаШаблонов(Шаблоны); + ИнтеграцияПодсистемБСП.ПриПолученииСпискаШаблонов(Шаблоны); ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов(Шаблоны); // Для совместимости с предыдущими версиями. ОчередьЗаданийПереопределяемый.ЗаполнитьСписокРазделенныхРегламентныхЗаданий(Шаблоны); diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl index 54f2e4e97..bebbd2cd5 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl @@ -524,8 +524,8 @@ РаботаВМоделиСервиса.ЗаписатьВспомогательныеДанные(Задание); ЗафиксироватьТранзакцию(); Исключение - РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); ОтменитьТранзакцию(); + РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); ВызватьИсключение; КонецПопытки; РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); @@ -1231,7 +1231,7 @@ НоваяСтрока.РегламентноеЗадание = "ПланированиеОбработкиЗаданий"; НоваяСтрока.Использование = Истина; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); + ИнтеграцияПодсистемБСП.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); ОчередьЗаданийПереопределяемый.ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования); Возврат ТаблицаИспользования; @@ -1612,8 +1612,8 @@ Исключение - РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); ОтменитьТранзакцию(); + РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); ВызватьИсключение; КонецПопытки; @@ -1698,8 +1698,8 @@ Исключение - РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); ОтменитьТранзакцию(); + РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); ВызватьИсключение; КонецПопытки; diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl index b3e12e34d..f24bfe0ef 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl @@ -21,7 +21,7 @@ МетодыКонфигурации = Новый Соответствие; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииПсевдонимовОбработчиков(МетодыКонфигурации); + ИнтеграцияПодсистемБСП.ПриОпределенииПсевдонимовОбработчиков(МетодыКонфигурации); // Определяем методы служебных процедур для обработки ошибок заданий. МетодыКонфигурации.Вставить("ОчередьЗаданийСлужебный.ОбработатьОшибку"); @@ -54,7 +54,7 @@ ОбработчикиОшибок.Вставить("ОчередьЗаданийСлужебный.ОбработатьОшибку","ОчередьЗаданийСлужебный.СнятьЗаданияОбработкиОшибок"); ОбработчикиОшибок.Вставить("ОчередьЗаданийСлужебный.СнятьЗаданияОбработкиОшибок","ОчередьЗаданийСлужебный.СнятьЗаданияОбработкиОшибок"); - ИнтеграцияСтандартныхПодсистем.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); + ИнтеграцияПодсистемБСП.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); ОчередьЗаданийПереопределяемый.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); Результат = Новый Соответствие; diff --git a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl index cba29d45a..d8b8b1f87 100644 --- a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl @@ -443,7 +443,7 @@ Настройка.ОписаниеТипов = Новый ОписаниеТипов("Массив"); Настройка.ВидыПодключаемыхОбъектов = "Отчет, Обработка"; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(Таблица); + ИнтеграцияПодсистемБСП.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(Таблица); ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(Таблица); @@ -542,7 +542,7 @@ Контекст.Вставить("ЭтоФормаОбъекта", ЭтоФормаОбъекта); Контекст.Вставить("ФункциональныеОпции", КэшФормы.ФункциональныеОпции); - ИнтеграцияСтандартныхПодсистем.ПриОпределенииКомандПодключенныхКОбъекту(Контекст, Источники, ПодключенныеОбъекты, Команды); + ИнтеграцияПодсистемБСП.ПриОпределенииКомандПодключенныхКОбъекту(Контекст, Источники, ПодключенныеОбъекты, Команды); ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту(Контекст, Источники, ПодключенныеОбъекты, Команды); // Фильтр команд по именам форм и функциональным опциям. @@ -636,7 +636,7 @@ Вид.ИмяПодменю = ""; Вид.Порядок = 90; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииВидовПодключаемыхКоманд(Виды); + ИнтеграцияПодсистемБСП.ПриОпределенииВидовПодключаемыхКоманд(Виды); ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд(Виды); @@ -729,7 +729,7 @@ КорневыеПодменюИКоманды = ПараметрыКлиента.КорневыеПодменюИКоманды; // Вывод команд. - Команды.Сортировать("Вид, Подменю, ПорядокВажности Возр, Порядок Возр, Представление Возр"); + Команды.Сортировать("Вид, ПорядокВажности Возр, Порядок Возр, Представление Возр"); СчетчикКомандСАвтогенерируемымИменем = 0; ВидыКоманд = ВидыКоманд(); Для Каждого ВидКоманд Из ВидыКоманд Цикл @@ -833,7 +833,7 @@ Если Не ЭтоКоманднаяПанель Тогда Если СведенияОПодменю.ВыведеноКоманд = 1 Тогда - // Превращение подменю в кнопку, когда выведена 1 команда с коротким заголовком. + // Превращение подменю в кнопку когда выведена 1 команда с коротким заголовком. Если Не ЗначениеЗаполнено(КомандаФормы.Картинка) И Подменю.Вид = ВидГруппыФормы.Подменю Тогда КомандаФормы.Картинка = Подменю.Картинка; КонецЕсли; @@ -892,7 +892,7 @@ Подменю = Элементы.Добавить(ИмяПодменю, Тип("ГруппаФормы"), КоманднаяПанель); Подменю.Вид = ?(ЗначениеЗаполнено(ШаблонНового.ВидГруппыФормы), ШаблонНового.ВидГруппыФормы, ВидГруппыФормы.Подменю); Подменю.Заголовок = ШаблонНового.Заголовок; - Если ШаблонНового.ВидГруппыФормы = ВидГруппыФормы.Подменю Тогда + Если Подменю.Вид = ВидГруппыФормы.Подменю Тогда Подменю.Картинка = ШаблонНового.Картинка; Подменю.Отображение = ШаблонНового.Отображение; КонецЕсли; @@ -961,16 +961,14 @@ КонецФункции Функция ИмяСоответствуетТребованиямИменованияСвойств(Имя) - Если ПустаяСтрока(Имя) Или СтрНайти(Имя, " ") > 0 Или СтрНайти(Имя, ",") > 0 Или СтрНайти(Имя, "(") > 0 Тогда + Буквы = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ"; + Цифры = "1234567890"; + + Если Имя = "" Или СтрНайти(Буквы + "_", ВРег(Лев(Имя, 1))) = 0 Тогда Возврат Ложь; КонецЕсли; - Попытка - Структура = Новый Структура(Имя, Неопределено); - Результат = Истина; - Исключение - Результат = Ложь; - КонецПопытки; - Возврат Результат; + + Возврат СтрРазделить(ВРег(Имя), Буквы + Цифры + "_", Ложь).Количество() = 0; КонецФункции //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl index 6032a3534..97c4e744a 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl @@ -8,76 +8,8 @@ // Проводит анализ массива документов на предмет проведенности и наличия прав на их проведение. Функция ИнформацияОДокументах(МассивСсылок) Экспорт Результат = Новый Структура; - Результат.Вставить("ПроведенныеИСправочники", Новый Массив); - Результат.Вставить("НеПроведенные", Новый Массив); - Результат.Вставить("КоличествоНеПроведенных", 0); - Результат.Вставить("ЕстьПравоПроведенияХотяБыОдногоНепроведенного", Ложь); - - Запрос = Новый Запрос; - - ШаблонЗапроса = - "ВЫБРАТЬ - | Таблица.Ссылка КАК Ссылка - |ИЗ - | &ПолноеИмяДокумента КАК Таблица - |ГДЕ - | Таблица.Ссылка В(&МассивДокументов) - | И НЕ Таблица.Проведен"; - - МассивЗапросов = Новый Массив; - ИнформацияОТипах = Новый Соответствие; - КоличествоПараметров = 0; - - Для Каждого Ссылка Из МассивСсылок Цикл - Тип = ТипЗнч(Ссылка); - ИнформацияОТипе = ИнформацияОТипах[Тип]; - Если ИнформацияОТипе = Неопределено Тогда - ИнформацияОТипе = Новый Структура; - ИнформацияОТипе.Вставить("Метаданные", Ссылка.Метаданные()); - ИнформацияОТипе.Вставить("ПолноеИмя", ИнформацияОТипе.Метаданные.ПолноеИмя()); - ИнформацияОТипе.Вставить("ЭтоДокумент", ВРег(СтрРазделить(ИнформацияОТипе.ПолноеИмя, ".")[0]) = "ДОКУМЕНТ" - И ИнформацияОТипе.Метаданные.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить); - ИнформацияОТипе.Вставить("ПравоПроведения", Неопределено); - ИнформацияОТипе.Вставить("МассивСсылок", Новый Массив); - Если ИнформацияОТипе.ЭтоДокумент Тогда - ИнформацияОТипе.ПравоПроведения = ПравоДоступа("Проведение", ИнформацияОТипе.Метаданные); - КоличествоПараметров = КоличествоПараметров + 1; - ИмяПараметра = "Массив" + Формат(КоличествоПараметров, "ЧН=; ЧГ="); - ТекстЗапроса = ШаблонЗапроса; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяДокумента", ИнформацияОТипе.ПолноеИмя); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "МассивДокументов", ИмяПараметра); - МассивЗапросов.Добавить(ТекстЗапроса); - Запрос.УстановитьПараметр(ИмяПараметра, ИнформацияОТипе.МассивСсылок); - КонецЕсли; - ИнформацияОТипах.Вставить(Тип, ИнформацияОТипе); - КонецЕсли; - Если ИнформацияОТипе.ЭтоДокумент Тогда - ИнформацияОТипе.МассивСсылок.Добавить(Ссылка); - Иначе - Результат.ПроведенныеИСправочники.Добавить(Ссылка); - КонецЕсли; - КонецЦикла; - - Запрос.Текст = СтрСоединить(МассивЗапросов, Символы.ПС + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС); - Результат.НеПроведенные = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - Для Каждого КлючИЗначение Из ИнформацияОТипах Цикл - ИнформацияОТипе = КлючИЗначение.Значение; - Если Не ИнформацияОТипе.ЭтоДокумент Тогда - Продолжить; - КонецЕсли; - Для Каждого Ссылка Из ИнформацияОТипе.МассивСсылок Цикл - Если Результат.НеПроведенные.Найти(Ссылка) = Неопределено Тогда - Результат.ПроведенныеИСправочники.Добавить(Ссылка); - Иначе - Если ИнформацияОТипе.ПравоПроведения Тогда - Результат.ЕстьПравоПроведенияХотяБыОдногоНепроведенного = Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЦикла; - Результат.КоличествоНеПроведенных = Результат.НеПроведенные.Количество(); - + Результат.Вставить("Непроведенные", ОбщегоНазначения.ПроверитьПроведенностьДокументов(МассивСсылок)); + Результат.Вставить("ДоступноПравоПроведения", СтандартныеПодсистемыСервер.ДоступноПравоПроведения(Результат.Непроведенные)); Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl index 8f93b95a7..fd386d00c 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl @@ -92,21 +92,21 @@ Если Контекст.ТребуетсяПроведение Тогда Контекст.ТребуетсяПроведение = Ложь; ИнформацияОДокументах = ПодключаемыеКомандыВызовСервера.ИнформацияОДокументах(Контекст.МассивСсылок); - Если ИнформацияОДокументах.КоличествоНеПроведенных > 0 Тогда - Если ИнформацияОДокументах.ЕстьПравоПроведенияХотяБыОдногоНепроведенного Тогда - Если ИнформацияОДокументах.КоличествоНеПроведенных = 1 Тогда + Если ИнформацияОДокументах.Непроведенные.Количество() > 0 Тогда + Если ИнформацияОДокументах.ДоступноПравоПроведения Тогда + Если ИнформацияОДокументах.Непроведенные.Количество() = 1 Тогда ТекстВопроса = НСтр("ru = 'Для выполнения команды необходимо предварительно провести документ. Выполнить проведение документа и продолжить?'"); Иначе ТекстВопроса = НСтр("ru = 'Для выполнения команды необходимо предварительно провести документы. Выполнить проведение документов и продолжить?'"); КонецЕсли; - Контекст.Вставить("НепроведенныеДокументы", ИнформацияОДокументах.НеПроведенные); + Контекст.Вставить("НепроведенныеДокументы", ИнформацияОДокументах.Непроведенные); Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеПодтверждениеПроведения", ЭтотОбъект, Контекст); Кнопки = Новый СписокЗначений; Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Продолжить'")); Кнопки.Добавить(КодВозвратаДиалога.Отмена); ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки); Иначе - Если ИнформацияОДокументах.КоличествоНеПроведенных = 1 Тогда + Если ИнформацияОДокументах.Непроведенные.Количество() = 1 Тогда ТекстПредупреждения = НСтр("ru = 'Для выполнения команды необходимо предварительно провести документ. Недостаточно прав для проведения документа.'"); Иначе ТекстПредупреждения = НСтр("ru = 'Для выполнения команды необходимо предварительно провести документы. Недостаточно прав для проведения документов.'"); diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index ef080dc37..ab6932c87 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -26,9 +26,9 @@ // Операции не разрешены, // или индекс полностью соответствует текущему состоянию информационной базы, // или индекс обновлялся менее 5 минут назад. - НЕ ОперацииРазрешены() - ИЛИ ПолнотекстовыйПоиск.ИндексАктуален() - ИЛИ ТекущаяДата() < ПолнотекстовыйПоиск.ДатаАктуальности() + 300); // Исключение из правила ТекущаяДатаСеанса(). + Не ОперацииРазрешены() + Или ПолнотекстовыйПоиск.ИндексАктуален() + Или ТекущаяДата() < (ПолнотекстовыйПоиск.ДатаАктуальности() + 300)); // Исключение из правила ТекущаяДатаСеанса(). КонецФункции @@ -51,7 +51,7 @@ // Возвращает разрешены ли операции полнотекстового поиска: обновление индексов, очистка индексов, поиск. Функция ОперацииРазрешены() Экспорт - Возврат ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить; + Возврат (ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить); КонецФункции @@ -81,13 +81,13 @@ Иначе Интервал = ОбщегоНазначения.ИнтервалВремениСтрокой(ДатаАктуальностиИндекса, ТекущаяДата); КонецЕсли; - ДнейСПоследнегоОбновления = Цел((ТекущаяДата - ДатаАктуальностиИндекса)/60/60/24); + ДнейСПоследнегоОбновления = Цел((ТекущаяДата - ДатаАктуальностиИндекса) / 60 / 60 / 24); Раздел = Метаданные.Подсистемы.Найти("Администрирование"); Если Раздел <> Неопределено Тогда Разделы = Новый Массив; Разделы.Добавить(Раздел); - Иначе + Иначе Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Обработки.ПолнотекстовыйПоискВДанных.ПолноеИмя()); КонецЕсли; @@ -102,7 +102,7 @@ НСтр("ru = 'Последнее обновление %1 назад'"), Интервал); Дело.Владелец = Раздел; КонецЦикла; - + КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. @@ -118,6 +118,7 @@ // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПолнотекстовыйПоиск; @@ -125,6 +126,7 @@ Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СлияниеИндексаППД; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПолнотекстовыйПоиск; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl index 85c39b4a7..b35c63e87 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl @@ -1,31 +1,37 @@ #Область ПрограммныйИнтерфейс -// Позволяет внести изменения в дерево с разделами полнотекстового поиска. -// По умолчанию, дерево разделов формируется на основании командного интерфейса конфигурации. +// Позволяет внести изменения в дерево с разделами полнотекстового поиска, отображаемого при выборе области поиска. +// По умолчанию дерево разделов формируется на основании состава подсистем конфигурации. +// Структура дерева описана в форме Обработка.ПолнотекстовыйПоискВДанных.Форма.ВыборОбластиПоиска. +// Все колонки, неуказанные в параметрах, будут автоматически рассчитаны. +// При необходимости построить дерево разделов самостоятельно требуется сохранить состав колонок. // // Параметры: // РазделыПоиска - ДеревоЗначений - области поиска. Содержит колонки: -// ** Раздел - Строка - Представление раздела: подсистемы или объекта метаданных. -// ** Пометка - Булево, флаг выбора объекта пользователем. Если установить флаг в значение -// Истина, то раздел по умолчанию будет отмечен в настройках. -// ** ЭтоОбъектМетаданных - Булево - Устанавливается в значение Истина, если это дочерний узел дерева, -// который не является подсистемой. -// ** ПутьКДанным - Строка - Предназначена для определения точного адреса строки в дереве. -// ** ОбъектМД - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Задается только для объектов метаданных, -// для подсистем остается пустым. +// ** Раздел - Строка - Представление раздела: подсистемы или объекта метаданных. +// ** Картинка - Картинка - Картинка раздела, рекомендуется только для корневых разделов. +// ** ОбъектМД - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Задается только для объектов метаданных, +// для разделов остается пустым. // Пример: -// НовыйРазделПоиска = ДеревоРазделов.Строки.Добавить(); -// НовыйРазделПоиска.Раздел = "МояРазделПоиска"; // -// МетаданныеПодраздела = НовыйРазделПоиска.Строки.Добавить(); -// МетаданныеПодраздела.Раздел = "Валюты"; -// МетаданныеПодраздела.ЭтоОбъектМетаданных = Истина; -// МетаданныеПодраздела.ПутьКДанным = НоваяОбластьПоиска.Раздел + "," + МетаданныеПодраздела.Раздел; -// МетаданныеПодраздела.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Справочники.Валюты); +// НовыйРаздел = РазделыПоиска.Строки.Добавить(); +// НовыйРаздел.Раздел = "Главное"; +// НовыйРаздел.Картинка = БиблиотекаКартинок._ДемоРазделГлавное; +// +// ОбъектМетаданных = Метаданные.Документы._ДемоСчетНаОплатуПокупателю; +// +// Если ПравоДоступа("Просмотр", ОбъектМетаданных) +// И ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда +// +// НовыйОбъектРаздела = НовыйРаздел.Строки.Добавить(); +// НовыйОбъектРаздела.Раздел = ОбъектМетаданных.ПредставлениеСписка; +// НовыйОбъектРаздела.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); +// КонецЕсли; // Процедура ПриПолученииРазделовПолнотекстовогоПоиска(РазделыПоиска) Экспорт + + КонецПроцедуры -#КонецОбласти - +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index 2d8af6c6c..4b4076677 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -885,38 +885,43 @@ Знач СоздатьНового = Ложь, Знач ЭтоВнешнийПользователь = Ложь) Экспорт ИмяПроцедуры = "Пользователи.УстановитьСвойстваПользователяИБ"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИмяИлиИдентификатор", ИмяИлиИдентификатор, Новый ОписаниеТипов("Строка, УникальныйИдентификатор")); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ОбновляемыеСвойства", ОбновляемыеСвойства, Тип("Структура")); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "СоздатьНового", СоздатьНового, Тип("Булево")); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ЭтоВнешнийПользователь", ЭтоВнешнийПользователь, Тип("Булево")); - + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ОбновляемыеСвойства", + ОбновляемыеСвойства, Тип("Структура")); + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "СоздатьНового", + СоздатьНового, Тип("Булево")); + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ЭтоВнешнийПользователь", + ЭтоВнешнийПользователь, Тип("Булево")); + СтарыеСвойства = СвойстваПользователяИБ(ИмяИлиИдентификатор); ПользовательСуществует = СтарыеСвойства <> Неопределено; Если ПользовательСуществует Тогда ПользовательИБ = СтарыеСвойства.ПользовательИБ; - Иначе + Иначе ПользовательИБ = Неопределено; СтарыеСвойства = НовоеОписаниеПользователяИБ(); - КонецЕсли; + КонецЕсли; Если Не ПользовательСуществует Тогда - Если Не СоздатьНового Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пользователь информационной базы ""%1"" не существует.'"), ИмяИлиИдентификатор); КонецЕсли; ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - Иначе - Если СоздатьНового Тогда ВызватьИсключение ОписаниеОшибкиПриЗаписиПользователяИБ( НСтр("ru = 'Невозможно создать пользователя информационной базы ""%1"", так как он уже существует.'"), СтарыеСвойства.Имя, СтарыеСвойства.УникальныйИдентификатор); КонецЕсли; + Если ОбновляемыеСвойства.Свойство("СтарыйПароль") И ТипЗнч(ОбновляемыеСвойства.СтарыйПароль) = Тип("Строка") Тогда @@ -934,7 +939,6 @@ СтарыеСвойства.УникальныйИдентификатор); КонецЕсли; КонецЕсли; - КонецЕсли; // Подготовка новых значений свойств. @@ -965,7 +969,7 @@ КонецПопытки; Если ЗначениеЗаполнено(СтарыеСвойства.Имя) И СтарыеСвойства.Имя <> НовыеСвойства.Имя Тогда - // Перемещение настроек пользователя + // Перемещение настроек пользователя. ПользователиСлужебный.СкопироватьНастройкиПользователя(СтарыеСвойства.Имя, НовыеСвойства.Имя, Истина); КонецЕсли; @@ -1506,7 +1510,7 @@ НазначениеРолей.Вставить("СовместноДляПользователейИВнешнихПользователей", Новый Массив); ПользователиПереопределяемый.ПриОпределенииНазначенияРолей(НазначениеРолей); - ИнтеграцияСтандартныхПодсистем.ПриОпределенииНазначенияРолей(НазначениеРолей); + ИнтеграцияПодсистемБСП.ПриОпределенииНазначенияРолей(НазначениеРолей); Возврат НазначениеРолей; diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index 5a008dba2..72a40796d 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -58,7 +58,7 @@ // ПользовательИБ найден в справочнике. Если ПриНачалеРаботыСистемы И РолиАдминистратораДоступны() Тогда - ИнтеграцияСтандартныхПодсистем.ПриСозданииАдминистратора(НайденныйПользователь, + ИнтеграцияПодсистемБСП.ПриСозданииАдминистратора(НайденныйПользователь, НСтр("ru = 'При авторизации у пользователя найдены роли администратора.'")); КонецЕсли; Возврат РезультатУстановкиПараметровСеанса(РегистрироватьВЖурнале); @@ -109,7 +109,7 @@ |Для ведения списка и настройки прав пользователей предназначен список Пользователи, |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); - ИнтеграцияСтандартныхПодсистем.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); + ИнтеграцияПодсистемБСП.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'", @@ -130,6 +130,15 @@ КонецФункции +// Проверяет, что определяемый тип ВнешнийПользователь +// содержит ссылки на объекты авторизации, а не тип Строка. +// +Функция ВнешниеПользователиВнедрены() Экспорт + + Возврат ПользователиСлужебныйПовтИсп.ПустыеСсылкиТиповОбъектовАвторизации().Количество() > 0; + +КонецФункции + // Устанавливает начальные настройки для пользователя информационной базы. // // Параметры: @@ -447,14 +456,11 @@ Если ДобавлятьПользователей И Назначение.Количество() = 0 Тогда Если ТолькоВнешниеПользователи Тогда - Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл - ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); - Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); - + ПустыеСсылки = ПользователиСлужебныйПовтИсп.ПустыеСсылкиТиповОбъектовАвторизации(); + Для Каждого ПустаяСсылка Из ПустыеСсылки Цикл НоваяСтрока = Назначение.Добавить(); - НоваяСтрока.ТипПользователей = Значение; + НоваяСтрока.ТипПользователей = ПустаяСсылка; КонецЦикла; - Иначе НоваяСтрока = Назначение.Добавить(); НоваяСтрока.ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); @@ -816,8 +822,8 @@ КонецПроцедуры -// См. СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. -Процедура СобратьСтатистикуКонфигурации() Экспорт +// См. ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации. +Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда Возврат; @@ -864,8 +870,10 @@ Или ЗначениеЗаполнено(Настройки.ЗапретитьПовторениеПароляСредиПоследних) Или ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Или ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДатаВключения); - - МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.Пользователи.ИспользованиеРасширенныхНастроекВхода", ИспользованиеРасширенныхНастроекВхода); + + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации( + "Справочник.Пользователи.ИспользованиеРасширенныхНастроекВхода", + ИспользованиеРасширенныхНастроекВхода); ТекстЗапроса = "ВЫБРАТЬ @@ -1126,7 +1134,7 @@ // См. процедуру ИзменитьДействияВФорме в общем модуле ПользователиПереопределяемый. Процедура ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме) Экспорт - ИнтеграцияСтандартныхПодсистем.ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме); + ИнтеграцияПодсистемБСП.ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме); ПользователиПереопределяемый.ИзменитьДействияВФорме(Ссылка, ДействияВФорме); КонецПроцедуры @@ -1920,8 +1928,8 @@ ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); Если ВызовИзФормыСменаПароля Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Ошибка смены пароля'", @@ -2099,14 +2107,13 @@ ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); Если ТекущаяМинимальнаяДлина <> ПолучитьМинимальнуюДлинуПаролейПользователей() Тогда УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); КонецЕсли; Если ТекущаяПроверкаСложности <> ПолучитьПроверкуСложностиПаролейПользователей() Тогда УстановитьПроверкуСложностиПаролейПользователей(ТекущаяПроверкаСложности); КонецЕсли; - - ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецЕсли; @@ -2508,7 +2515,7 @@ Если ПараметрыОбработки.Свойство("СозданиеАдминистратора") Тогда УстановитьПривилегированныйРежим(Истина); - ИнтеграцияСтандартныхПодсистем.ПриСозданииАдминистратора(СсылкаОбъекта(ПользовательОбъект), + ИнтеграцияПодсистемБСП.ПриСозданииАдминистратора(СсылкаОбъекта(ПользовательОбъект), ПараметрыОбработки.СозданиеАдминистратора); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; @@ -2545,7 +2552,7 @@ ПарольПользователяСервиса = ПользовательОбъект.ДополнительныеСвойства.ПарольПользователяСервиса; КонецЕсли; - ИнтеграцияСтандартныхПодсистем.ПослеУстановкиПользователяИБ(ПользовательОбъект.Ссылка, + ИнтеграцияПодсистемБСП.ПослеУстановкиПользователяИБ(ПользовательОбъект.Ссылка, ПарольПользователяСервиса); КонецЕсли; @@ -2553,7 +2560,9 @@ И Пользователи.ВходВПрограммуРазрешен(ПараметрыОбработки.ОписаниеНовогоПользователяИБ) Тогда УстановитьПривилегированныйРежим(Истина); - СброситьРесурсДатаАвтоматическогоЗапрещенияВхода(ПользовательОбъект.Ссылка); + ОбновитьСведенияОПользователеСРазрешеннымВходом(ПользовательОбъект.Ссылка, + Не ПараметрыОбработки.СтарыйПользовательИБСуществует + Или Не Пользователи.ВходВПрограммуРазрешен(ПараметрыОбработки.ОписаниеСтарогоПользователяИБ)); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; @@ -2658,7 +2667,7 @@ Возврат Истина; КонецЕсли; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(Текст); + ИнтеграцияПодсистемБСП.ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(Текст); Возврат Истина; КонецЕсли; @@ -3005,7 +3014,7 @@ ИзмененныеГруппыМассив.Добавить(КлючИЗначение.Ключ); КонецЦикла; - ИнтеграцияСтандартныхПодсистем.ПослеОбновленияСоставовГруппПользователей(УчастникиИзмененийМассив, + ИнтеграцияПодсистемБСП.ПослеОбновленияСоставовГруппПользователей(УчастникиИзмененийМассив, ИзмененныеГруппыМассив); КонецПроцедуры @@ -3128,7 +3137,7 @@ ИзмененныеГруппыМассив.Добавить(КлючИЗначение.Ключ); КонецЦикла; - ИнтеграцияСтандартныхПодсистем.ПослеОбновленияСоставовГруппПользователей(УчастникиИзмененийМассив, + ИнтеграцияПодсистемБСП.ПослеОбновленияСоставовГруппПользователей(УчастникиИзмененийМассив, ИзмененныеГруппыМассив); КонецПроцедуры @@ -4176,14 +4185,10 @@ Если ГруппаОбъект.Предопределенный Или ГруппаОбъект.УдалитьТипОбъектовАвторизации = Неопределено Тогда // любые пользователи - Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл - - ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); - Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); - + ПустыеСсылки = ПользователиСлужебныйПовтИсп.ПустыеСсылкиТиповОбъектовАвторизации(); + Для Каждого ПустаяСсылка Из ПустыеСсылки Цикл НоваяСтрока = ГруппаОбъект.Назначение.Добавить(); - НоваяСтрока.ТипПользователей = Значение; - + НоваяСтрока.ТипПользователей = ПустаяСсылка; КонецЦикла; Иначе @@ -4329,21 +4334,21 @@ Процедура ПриПолученииПрочихНастроекПользователя(СведенияОПользователе, Настройки) Экспорт - ИнтеграцияСтандартныхПодсистем.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки); + ИнтеграцияПодсистемБСП.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки); ПользователиПереопределяемый.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки); КонецПроцедуры Процедура ПриСохраненииПрочихНастроекПользователя(СведенияОПользователе, Настройки) Экспорт - ИнтеграцияСтандартныхПодсистем.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки); + ИнтеграцияПодсистемБСП.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки); ПользователиПереопределяемый.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки); КонецПроцедуры Процедура ПриУдаленииПрочихНастроекПользователя(СведенияОПользователе, Настройки) Экспорт - ИнтеграцияСтандартныхПодсистем.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки); + ИнтеграцияПодсистемБСП.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки); ПользователиПереопределяемый.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки); КонецПроцедуры @@ -5844,8 +5849,8 @@ КонецЕсли; ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); ШаблонТекстаОшибки = НСтр("ru = 'Не удалось записать сведения о текущем пользователе по причине: |%1 @@ -6016,6 +6021,7 @@ ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); ИнформацияОбОшибке = ИнформацияОбОшибке(); Если ТекущаяМинимальнаяДлина <> ПолучитьМинимальнуюДлинуПаролейПользователей() Тогда @@ -6025,7 +6031,6 @@ УстановитьПроверкуСложностиПаролейПользователей(ТекущаяПроверкаСложности); КонецЕсли; - ОтменитьТранзакцию(); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось проверить отвечает ли пароль требованиям сложности по причине: |%1'"), @@ -6376,19 +6381,34 @@ КонецПроцедуры -Процедура СброситьРесурсДатаАвтоматическогоЗапрещенияВхода(Пользователь) +Процедура ОбновитьСведенияОПользователеСРазрешеннымВходом(Пользователь, ВходВПрограммуВключен) Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях"); ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); + + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); - НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); НаборЗаписей.Прочитать(); - Если НаборЗаписей.Количество() > 0 Тогда + Если НаборЗаписей.Количество() = 0 Тогда + НаборЗаписей.Добавить(); + НаборЗаписей[0].Пользователь = Пользователь; + КонецЕсли; + Записать = Ложь; + Если ЗначениеЗаполнено(НаборЗаписей[0].ДатаАвтоматическогоЗапрещенияВхода) Тогда + Записать = Истина; НаборЗаписей[0].ДатаАвтоматическогоЗапрещенияВхода = Неопределено; + КонецЕсли; + Если ВходВПрограммуВключен + И НаборЗаписей[0].ДатаРазрешенияВходаВПрограмму <> НачалоДня(ТекущаяДатаСеанса()) Тогда + Записать = Истина; + НаборЗаписей[0].ДатаРазрешенияВходаВПрограмму = НачалоДня(ТекущаяДатаСеанса()); + КонецЕсли; + Если Записать Тогда НаборЗаписей.Записать(); КонецЕсли; ЗафиксироватьТранзакцию(); @@ -6441,7 +6461,11 @@ | КОГДА ЕСТЬNULL(СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода, 0) <> 0 | ТОГДА ВЫБОР | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата) = &ПустаяДата - | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиПользователей, ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | ТОГДА ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаРазрешенияВходаВПрограмму, &ПустаяДата) = &ПустаяДата + | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиПользователей, ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | ИНАЧЕ &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(СведенияОПользователях.ДатаРазрешенияВходаВПрограмму, ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | КОНЕЦ | КОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата), ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ @@ -6450,7 +6474,11 @@ | КОГДА &ПросрочкаРаботыПользователей = 0 | ТОГДА ЛОЖЬ | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата) = &ПустаяДата - | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиПользователей, ДЕНЬ, &ПросрочкаРаботыПользователей) + | ТОГДА ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаРазрешенияВходаВПрограмму, &ПустаяДата) = &ПустаяДата + | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиПользователей, ДЕНЬ, &ПросрочкаРаботыПользователей) + | ИНАЧЕ &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(СведенияОПользователях.ДатаРазрешенияВходаВПрограмму, ДЕНЬ, &ПросрочкаРаботыПользователей) + | КОНЕЦ | КОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата), ДЕНЬ, &ПросрочкаРаботыПользователей) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ @@ -6479,7 +6507,11 @@ | КОГДА ЕСТЬNULL(СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода, 0) <> 0 | ТОГДА ВЫБОР | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата) = &ПустаяДата - | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиПользователей, ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | ТОГДА ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаРазрешенияВходаВПрограмму, &ПустаяДата) = &ПустаяДата + | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиВнешнихПользователей, ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | ИНАЧЕ &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(СведенияОПользователях.ДатаРазрешенияВходаВПрограмму, ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | КОНЕЦ | КОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата), ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ @@ -6488,7 +6520,11 @@ | КОГДА &ПросрочкаРаботыВнешнихПользователей = 0 | ТОГДА ЛОЖЬ | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата) = &ПустаяДата - | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиВнешнихПользователей, ДЕНЬ, &ПросрочкаРаботыВнешнихПользователей) + | ТОГДА ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаРазрешенияВходаВПрограмму, &ПустаяДата) = &ПустаяДата + | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиВнешнихПользователей, ДЕНЬ, &ПросрочкаРаботыВнешнихПользователей) + | ИНАЧЕ &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(СведенияОПользователях.ДатаРазрешенияВходаВПрограмму, ДЕНЬ, &ПросрочкаРаботыВнешнихПользователей) + | КОНЕЦ | КОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата), ДЕНЬ, &ПросрочкаРаботыВнешнихПользователей) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ @@ -6542,8 +6578,8 @@ НаборЗаписей.Записать(); ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); Если Выборка.СрокДействияИстек Тогда ШаблонКомментария = НСтр("ru = 'Не удалось снять пользователю ""%1"" признак diff --git a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index 20ba8bd91..ae86b31d4 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -224,7 +224,7 @@ Настройки.Вставить("ОбщиеНастройкиВхода", Истина); Настройки.Вставить("РедактированиеРолей", Истина); - ИнтеграцияСтандартныхПодсистем.ПриОпределенииНастроек(Настройки); + ИнтеграцияПодсистемБСП.ПриОпределенииНастроек(Настройки); ПользователиПереопределяемый.ПриОпределенииНастроек(Настройки); Если ОбщегоНазначения.РазделениеВключено() @@ -320,6 +320,32 @@ КонецФункции +// Возвращает пустые ссылки типов объектов авторизации, +// указанных в определяемом типе ВнешнийПользователь. +// +// Если в определяемом типе указан тип Строка или +// другой нессылочный тип, то он пропускается. +// +// Возвращаемое значение: +// ФиксированныйМассив - со значениями: +// * Значение - Ссылка - пустая ссылка типа объекта авторизации. +// +Функция ПустыеСсылкиТиповОбъектовАвторизации() Экспорт + + ПустыеСсылки = Новый Массив; + + Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл + Если Не ОбщегоНазначения.ЭтоСсылка(Тип) Тогда + Продолжить; + КонецЕсли; + ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); + ПустыеСсылки.Добавить(ОписаниеТипаСсылки.ПривестиЗначение(Неопределено)); + КонецЦикла; + + Возврат Новый ФиксированныйМассив(ПустыеСсылки); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl index 7cc14a80a..173e7a113 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl @@ -338,7 +338,6 @@ // Устанавливаем исключительную блокировку на читаемые и впоследствии изменяемые виды данных. БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(ОписаниеОбъекта.ПолноеИмя); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); КонецЕсли; diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl index dcda5683b..94657c6c5 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl @@ -64,7 +64,7 @@ // Процедура ПодписатьФайл(ПрисоединенныйФайл, ИдентификаторФормы, ДополнительныеПараметры = Неопределено) Экспорт - РаботаСФайламиКлиент.ПодписатьФайл(ПрисоединенныйФайл, ИдентификаторФормы, ДополнительныеПараметры = Неопределено); + РаботаСФайламиКлиент.ПодписатьФайл(ПрисоединенныйФайл, ИдентификаторФормы, ДополнительныеПараметры); КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl index 7f534b6ff..9ec807cb5 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -520,7 +520,7 @@ Результат.Добавить(ЗапросСозданияПрофиляБезопасности(Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка())); КонецЕсли; - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(Результат); + ИнтеграцияПодсистемБСП.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(Результат); РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(Результат); ЗафиксироватьТранзакцию(); @@ -621,7 +621,7 @@ Менеджеры = Новый Массив; - ИнтеграцияСтандартныхПодсистем.ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры); + ИнтеграцияПодсистемБСП.ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры); Возврат Менеджеры; diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl index 19ed01d87..0ddfdbabe 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -1658,7 +1658,7 @@ СтрокаПараметра.ЗапретЗаписи = Истина; СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная)); - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииТаблицыПараметровИБ(ТаблицаПараметров); + ИнтеграцияПодсистемБСП.ПриЗаполненииТаблицыПараметровИБ(ТаблицаПараметров); КонецПроцедуры @@ -4201,6 +4201,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда Исключения.Добавить(Метаданные.Справочники.Найти("КлючевыеОперации")); + Исключения.Добавить(Метаданные.Справочники.Найти("ПрофилиКлючевыхОпераций")); Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ЗамерыВремени")); Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ЗамерыВремениТехнологические")); КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl index c792ff732..ec25816c9 100644 --- a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl @@ -262,7 +262,6 @@ // Генерируем по виду Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураКонтактнойИнформацииПоТипу( ВидКонтактнойИнформации.Тип); - КонецЕсли; Если ВидКонтактнойИнформации <> Неопределено diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl index f564d0bd3..c6492acfe 100644 --- a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl @@ -63,10 +63,15 @@ Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); - Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2070", НСтр("ru = 'А/я'"), 3, 7)); + Результат.Добавить(СтрокаОбъектаАдресации("2080", НСтр("ru = 'В/ч'"), 3, 8)); + Результат.Добавить(СтрокаОбъектаАдресации("2090", НСтр("ru = 'П/о'"), 3, 9)); // Наши сокращения для поддержки обратной совместимости при парсинге. Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); + // Ввод помещения вручную. + Результат.Добавить(СтрокаОбъектаАдресации("2000", НСтр("ru = ''"), 3, 0)); // Уточняющие объекты Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); @@ -251,6 +256,9 @@ Результат.Вставить(НСтр("ru = 'Помещение'"), НСтр("ru = 'Пом.'")); Результат.Вставить(НСтр("ru = 'Комната'"), НСтр("ru = 'Ком.'")); Результат.Вставить(НСтр("ru = 'Этаж'"), НСтр("ru = 'Этаж'")); + Результат.Вставить(НСтр("ru = 'А/я'"), НСтр("ru = 'а/я'")); + Результат.Вставить(НСтр("ru = 'П/о'"), НСтр("ru = 'п/о'")); + Результат.Вставить(НСтр("ru = 'В/ч'"), НСтр("ru = 'в/ч'")); Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index 328568d52..38080de73 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -24,21 +24,10 @@ ФайлОбъект = РаботаСФайламиСлужебный.ФайлОбъект(ПрисоединенныйФайл); Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДвоичныеДанныеФайлов.Файл, - | ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла - |ИЗ - | РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов - |ГДЕ - | ДвоичныеДанныеФайлов.Файл = &ПрисоединенныйФайл"; - - Запрос.УстановитьПараметр("ПрисоединенныйФайл", ФайлОбъект.Ссылка); - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - Возврат Выборка.ДвоичныеДанныеФайла.Получить(); + + Результат = ХранилищеФайлаИзИнформационнойБазы(ФайлОбъект.Ссылка); + Если Результат <> Неопределено Тогда + Возврат Результат.Получить(); КонецЕсли; // Запись в журнал регистрации. @@ -126,6 +115,8 @@ Знач ПолучатьСсылкуНаДвоичныеДанные = Истина, Знач ДляРедактирования = Ложь) Экспорт + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ПрисоединенныйФайл); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДанныеФайла", "ПрисоединенныйФайл", ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); @@ -143,8 +134,10 @@ СсылкаНаДвоичныеДанныеФайла = Неопределено; + ПоддерживаетсяХранениеВерсий = (ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.Файлы")); + Если ПолучатьСсылкуНаДвоичныеДанные Тогда - Если ПрисоединенныйФайл.ХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда + Если ПоддерживаетсяХранениеВерсий И ПрисоединенныйФайл.ХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда ДвоичныеДанные = ДвоичныеДанныеФайла(ПрисоединенныйФайл.ТекущаяВерсия); Иначе ДвоичныеДанные = ДвоичныеДанныеФайла(ПрисоединенныйФайл); @@ -251,8 +244,8 @@ КонецФункции -// Обновляет свойства файла - двоичные данные, текст, дату изменения, -// а также другие необязательные свойства. +// Обновляет свойства файла без учета версий- двоичные данные, текст, дату изменения, +// а также другие необязательные свойства. Использовать только для файлов, которые не хранят версии. // // Параметры: // ПрисоединенныйФайл - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы". @@ -272,55 +265,7 @@ // Процедура ОбновитьФайл(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДвоичныеДанныеФайла", "ПрисоединенныйФайл", - ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); - - РеквизитыЗначения = Новый Структура; - - Если ИнформацияОФайле.Свойство("ИмяБезРасширения") И ЗначениеЗаполнено(ИнформацияОФайле.ИмяБезРасширения) Тогда - РеквизитыЗначения.Вставить("Наименование", ИнформацияОФайле.ИмяБезРасширения); - КонецЕсли; - - Если НЕ ИнформацияОФайле.Свойство("ДатаМодификацииУниверсальная") - ИЛИ НЕ ЗначениеЗаполнено(ИнформацияОФайле.ДатаМодификацииУниверсальная) - ИЛИ ИнформацияОФайле.ДатаМодификацииУниверсальная > ТекущаяУниверсальнаяДата() Тогда - - // Заполнение текущей даты в формате универсального времени. - РеквизитыЗначения.Вставить("ДатаМодификацииУниверсальная", ТекущаяУниверсальнаяДата()); - Иначе - РеквизитыЗначения.Вставить("ДатаМодификацииУниверсальная", ИнформацияОФайле.ДатаМодификацииУниверсальная); - КонецЕсли; - - Если ИнформацияОФайле.Свойство("Редактирует") Тогда - РеквизитыЗначения.Вставить("Редактирует", ИнформацияОФайле.Редактирует); - КонецЕсли; - - Если ИнформацияОФайле.Свойство("Расширение") Тогда - РеквизитыЗначения.Вставить("Расширение", ИнформацияОФайле.Расширение); - КонецЕсли; - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ИнформацияОФайле.АдресФайлаВоВременномХранилище); - - РеквизитыЗначения.Вставить("СтатусИзвлеченияТекста", Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен); - ИзвлеченныйТекст = ""; - - Если ЭтоАдресВременногоХранилища(ИнформацияОФайле.АдресВременногоХранилищаТекста) Тогда - - ИзвлеченныйТекст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища( - ИнформацияОФайле.АдресВременногоХранилищаТекста); - - РеквизитыЗначения.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - - ИначеЕсли НЕ РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда - // Тексты извлекаются сразу, а не в фоновом задании. - РеквизитыЗначения.СтатусИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст( - ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); - КонецЕсли; - - РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения(ИзвлеченныйТекст)); - - РаботаСФайламиСлужебный.ОбновитьДвоичныеДанныеФайлаНаСервере( - ПрисоединенныйФайл, ДвоичныеДанные, РеквизитыЗначения); + РаботаСФайламиСлужебный.ОбновитьФайл(ИнформацияОФайле, ПрисоединенныйФайл); КонецПроцедуры @@ -537,7 +482,7 @@ ГруппаФайлов = Неопределено; Если ПараметрыФайла.Свойство("ГруппаФайлов") И ЗначениеЗаполнено(ПараметрыФайла.ГруппаФайлов) - И ТипЗнч(ВладелецФайлов) <> Тип("СправочникСсылка.ПапкиФайлов") Тогда + И Не РаботаСФайламиСлужебный.ЭтоПапкаФайлов(ВладелецФайлов) Тогда ГруппаФайлов = ПараметрыФайла.ГруппаФайлов; КонецЕсли; ВремяИзмененияУниверсальное = ПараметрыФайла.ВремяИзмененияУниверсальное; @@ -623,9 +568,8 @@ ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОтменитьТранзакцию(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); ШаблонСообщения = НСтр("ru = 'Ошибка при добавлении присоединенного файла ""%1"": |%2'"); @@ -651,7 +595,7 @@ Попытка // Добавление в один из томов (где есть свободное место). СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, ВремяИзмененияУниверсальное, - ИмяБезРасширения, РасширениеБезТочки, , ПрисоединенныйФайл.Зашифрован); + ИмяБезРасширения, РасширениеБезТочки, , ПрисоединенныйФайл.Зашифрован); ПрисоединенныйФайл.Том = СведенияОФайле.Том; ПрисоединенныйФайл.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; @@ -758,7 +702,6 @@ Если НЕ ЗначениеЗаполнено(МаксимальныйРазмерФайла) Тогда МаксимальныйРазмерФайла = 52428800; // 50*1024*1024 = 50 Мб - Константы[ИмяКонстанты].Установить(МаксимальныйРазмерФайла); КонецЕсли; Если РазделениеВключеноИДоступноИспользование Тогда @@ -787,7 +730,6 @@ ИЛИ МаксимальныйРазмерФайла = 0 Тогда МаксимальныйРазмерФайла = 50*1024*1024; // 50 мб - Константы.МаксимальныйРазмерФайла.Установить(МаксимальныйРазмерФайла); КонецЕсли; Возврат МаксимальныйРазмерФайла; @@ -880,11 +822,9 @@ УстановитьПривилегированныйРежим(Истина); ФайлыИсточник = РаботаСФайламиСлужебныйВызовСервера.ПолучитьВсеПодчиненныеФайлы(ВладелецФайлов); - МенеджерПрисоединенныхФайлов = Справочники[ИмяСправочника]; НачатьТранзакцию(); - Попытка Для Каждого ФайлИсточник Из ФайлыИсточник Цикл @@ -894,7 +834,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.Файлы.ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИсточникОбъект.Ссылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда @@ -904,7 +843,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.ВерсииФайлов.ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ТекущаяВерсияОбъект.Ссылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); Иначе ТекущаяВерсияОбъект = ФайлИсточникОбъект; @@ -952,14 +890,13 @@ ПрисоединенныйФайл.Записать(); Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ХранилищеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы(ТекущаяВерсияОбъект.Ссылка); - ДвоичныеДанные = ХранилищеФайла.Получить(); + ХранилищеФайла = ХранилищеФайлаИзИнформационнойБазы(ТекущаяВерсияОбъект.Ссылка); МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Файл = СсылкаНового; МенеджерЗаписи.Прочитать(); МенеджерЗаписи.Файл = СсылкаНового; - МенеджерЗаписи.ДвоичныеДанныеФайла = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); + МенеджерЗаписи.ДвоичныеДанныеФайла = Новый ХранилищеЗначения(ХранилищеФайла.Получить(), Новый СжатиеДанных(9)); МенеджерЗаписи.Записать(); КонецЕсли; @@ -990,9 +927,8 @@ ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -1236,6 +1172,35 @@ КонецФункции +// Возвращает двоичные данные файла из информационной базы. +// +// Параметры: +// ФайлСсылка - ссылка на файл или его версию. +// +// Возвращаемое значение: +// ХранилищеЗначения - двоичные данные файла. +// +Функция ХранилищеФайлаИзИнформационнойБазы(ФайлСсылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДвоичныеДанныеФайлов.Файл, + | ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла + |ИЗ + | РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов + |ГДЕ + | ДвоичныеДанныеФайлов.Файл = &ФайлСсылка"; + + Запрос.УстановитьПараметр("ФайлСсылка", ФайлСсылка); + Выборка = Запрос.Выполнить().Выбрать(); + + Возврат ?(Выборка.Следующий(), Выборка.ДвоичныеДанныеФайла, Неопределено); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -1251,7 +1216,7 @@ Возврат; КонецЕсли; - Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Если ТипЗнч(Источник) = Тип("СправочникОбъект.ВерсииФайлов") Тогда Возврат; КонецЕсли; @@ -1341,7 +1306,6 @@ Метаданные.НайтиПоТипу(ТипЗнч(Источник.ТекущаяВерсия)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Источник.ТекущаяВерсия); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); Объект = Источник.ТекущаяВерсия.ПолучитьОбъект(); @@ -1406,7 +1370,7 @@ Возврат; КонецЕсли; - Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Если ТипЗнч(Источник) = Тип("СправочникОбъект.ВерсииФайлов") Тогда Возврат; КонецЕсли; @@ -1432,7 +1396,7 @@ Возврат; КонецЕсли; - Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Если ТипЗнч(Источник) = Тип("СправочникОбъект.ВерсииФайлов") Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 2720a8653..41bcdb984 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -5,38 +5,6 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функция для работы со сканером. - -// Открывает форму настройки сканирования. -Процедура ОткрытьФормуНастройкиСканирования() Экспорт - - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - ТекстСообщения = НСтр("ru = 'Сканирование поддерживается только в клиенте под управлением ОС Windows.'"); - ПоказатьПредупреждение(, ТекстСообщения); - Возврат; - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - ТекстСообщения = НСтр("ru = 'Сканирование не поддерживается в веб-клиенте.'"); - ПоказатьПредупреждение(, ТекстСообщения); - Возврат; - КонецЕсли; - - КомпонентаУстановлена = РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту(); - - Если Не КомпонентаУстановлена Тогда - ТекстВопроса = НСтр("ru = 'Для продолжения работы необходимо установить компоненту сканирования. - |Установить компоненту?'"); - Обработчик = Новый ОписаниеОповещения("ПоказатьВопросУстановкиКомпонентыСканирования", ЭтотОбъект, КомпонентаУстановлена); - ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Возврат; - КонецЕсли; - - ОткрытьФормуНастройкиСканированияЗавершение(КомпонентаУстановлена, Неопределено); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Команды работы с файлами @@ -47,7 +15,7 @@ // получает его с сервера. // // Параметры: -// ДанныеФайла - Структура - данные файла. +// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. // ДляРедактирования - Булево - Истина, если файл открывается для редактирования, иначе Ложь. // Процедура ОткрытьФайл(Знач ДанныеФайла, Знач ДляРедактирования = Ложь) Экспорт @@ -55,7 +23,7 @@ Если ДляРедактирования Тогда РаботаСФайламиСлужебныйКлиент.РедактироватьФайл(Неопределено, ДанныеФайла); Иначе - РаботаСФайламиСлужебныйКлиент.ОткрытьФайлСОповещением(Неопределено, ДанныеФайла); + РаботаСФайламиСлужебныйКлиент.ОткрытьФайлСОповещением(Неопределено, ДанныеФайла, , ДляРедактирования); КонецЕсли; КонецПроцедуры @@ -63,7 +31,7 @@ // Открывает каталог на локальном компьютере в котором размещен этот файл. // // Параметры: -// ДанныеФайла - Структура - структура с данными файла. +// ДанныеФайла - Структура - структура с данными файла. Описание см. РаботаСФайлами.ДанныеФайла. // Процедура ОткрытьКаталогФайла(ДанныеФайла) Экспорт @@ -127,10 +95,7 @@ // * Ложь - Значение по умолчанию. Открывать карточку файла после создания. // * Истина - Не открывать карточку файла после создания. // -Процедура ДобавитьФайл(ОбработчикРезультата, - ВладелецФайла, - ФормаВладелец, - РежимСоздания = Неопределено, +Процедура ДобавитьФайл(ОбработчикРезультата, ВладелецФайла, ФормаВладелец, РежимСоздания = Неопределено, НеОткрыватьКарточку = Ложь) Экспорт Если РежимСоздания = Неопределено Тогда @@ -209,19 +174,40 @@ КонецПроцедуры -// Копирует существующий файл. +// Открывает форму нового элемента для копирования существующего файла. // // Параметры: // ВладелецФайла - ЛюбаяСсылка - владелец файла. -// ФайлОснование - СправочникСсылка - откуда копируется Файл. +// ФайлОснование - ОпределяемыйТип.ПрисоединенныйФайл - откуда копируется Файл. +// ДополнительныеПараметры - Структура - параметры открытия формы. +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана при закрытии формы +// со следующими параметрами: +// <РезультатЗакрытия> - значение, переданное при вызове Закрыть() открываемой формы, +// <ДополнительныеПараметры> - значение, указанное при создании +// ОписаниеОповещенияОЗакрытии. +// Если параметр не указан, то по завершению никакая процедура вызвана не будет. // -Процедура СкопироватьФайл(ВладелецФайла, ФайлОснование) Экспорт +Процедура СкопироватьФайл(ВладелецФайла, ФайлОснование, ДополнительныеПараметры = Неопределено, + ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт + + ЭтоФайлы = ТипЗнч(ФайлОснование) = Тип("СправочникСсылка.Файлы"); ПараметрыФормы = Новый Структура; + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ПараметрыФормы = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ДополнительныеПараметры); + ИмяСправочникаХранилищаФайлов = Неопределено; + Если ДополнительныеПараметры.Свойство("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов) Тогда + ЭтоФайлы = (ИмяСправочникаХранилищаФайлов = "Файлы"); + КонецЕсли; + КонецЕсли; + ПараметрыФормы.Вставить("ЗначениеКопирования", ФайлОснование); ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайла); - - ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыФормы); + Если ЭтоФайлы Тогда + ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыФормы,,,,, ОписаниеОповещенияОЗакрытии); + Иначе + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл", ПараметрыФормы,,,,, ОписаниеОповещенияОЗакрытии); + КонецЕсли; КонецПроцедуры @@ -249,11 +235,7 @@ ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файл'")); ОписаниеДанных.Вставить("ПоказатьКомментарий", Истина); ОписаниеДанных.Вставить("Представление", ПараметрыВыполнения.ДанныеФайла.Ссылка); - Если ЗначениеЗаполнено(ПараметрыВыполнения.ДанныеФайла.ТекущаяВерсия) Тогда - ОписаниеДанных.Вставить("Объект", ПараметрыВыполнения.ДанныеФайла.ТекущаяВерсия); - Иначе - ОписаниеДанных.Вставить("Объект", ПрисоединенныйФайл); - КонецЕсли; + ОписаниеДанных.Вставить("Объект", ПрисоединенныйФайл); ОписаниеДанных.Вставить("Данные", Новый ОписаниеОповещения("ПриСохраненииДанныхФайла", РаботаСФайламиСлужебныйКлиент, ПараметрыВыполнения)); @@ -267,7 +249,7 @@ // Так же используется, как вспомогательная функция при сохранении файла с ЭП. // // Параметры: -// ДанныеФайла - Структура - данные файла. +// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. // // Возвращаемое значение: // Строка - имя сохраненного файла. @@ -344,39 +326,57 @@ // Может использоваться как обработчик открытия файла. // // Параметры: -// ПрисоединенныйФайл - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы". -// СтандартнаяОбработка - Булево - (возвращаемое значение), всегда устанавливается в Ложь. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на справочник с именем *ПрисоединенныеФайлы. +// СтандартнаяОбработка - Булево - (возвращаемое значение), всегда устанавливается в Ложь. +// ДополнительныеПараметры - Структура - параметры открытия формы. +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана при закрытии формы +// со следующими параметрами: +// <РезультатЗакрытия> - значение, переданное при вызове Закрыть() открываемой формы, +// <ДополнительныеПараметры> - значение, указанное при создании +// ОписаниеОповещенияОЗакрытии. +// Если параметр не указан, то по завершению никакая процедура вызвана не будет. // -Процедура ОткрытьФормуФайла(Знач ПрисоединенныйФайл, СтандартнаяОбработка = Ложь) Экспорт +Процедура ОткрытьФормуФайла(Знач ПрисоединенныйФайл, СтандартнаяОбработка = Ложь, ДополнительныеПараметры = Неопределено, + ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт СтандартнаяОбработка = Ложь; - Если ЗначениеЗаполнено(ПрисоединенныйФайл) Тогда - - ПараметрыФормы = Новый Структура; + Если Не ЗначениеЗаполнено(ПрисоединенныйФайл) Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ПараметрыФормы = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ДополнительныеПараметры); + КонецЕсли; + Если ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.Файлы") Тогда + ПараметрыФормы.Вставить("Ключ", ПрисоединенныйФайл); + ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыФормы,,,,, ОписаниеОповещенияОЗакрытии); + Иначе ПараметрыФормы.Вставить("ПрисоединенныйФайл", ПрисоединенныйФайл); - - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); - + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл", ПараметрыФормы,, ПрисоединенныйФайл,,, ОписаниеОповещенияОЗакрытии); КонецЕсли; КонецПроцедуры -// Выполняет печать файлов. +// Выполняет печать файлов на принтер. // // Параметры: -// ДанныеФайлов - Массив - массив структур с данными файлов. +// Файлы - ОпределяемыйТип.ПрисоединенныйФайл, Массив - Ссылка или массив ссылок на объекты с файлами. // ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. // -Процедура НапечататьФайлы(ДанныеФайлов, ИдентификаторФормы = Неопределено) Экспорт +Процедура НапечататьФайлы(Знач Файлы, ИдентификаторФормы = Неопределено) Экспорт + + Если ТипЗнч(Файлы) <> Тип("Массив") Тогда + Файлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Файлы); + КонецЕсли; ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("НомерФайла", 0); - ПараметрыВыполнения.Вставить("ДанныеФайлов", ДанныеФайлов); - ПараметрыВыполнения.Вставить("ДанныеФайла", ДанныеФайлов); + ПараметрыВыполнения.Вставить("ДанныеФайлов", Файлы); + ПараметрыВыполнения.Вставить("ДанныеФайла", Файлы); ПараметрыВыполнения.Вставить("УникальныйИдентификатор", ИдентификаторФормы); - Обработчик = Новый ОписаниеОповещения("НапечататьФайлыВыполнение", ЭтотОбъект, ПараметрыВыполнения); - ВыполнитьОбработкуОповещения(Обработчик); + НапечататьФайлыВыполнение(Неопределено, ПараметрыВыполнения); КонецПроцедуры @@ -419,7 +419,7 @@ Если Не ДополнительныеПараметры.Свойство("ДанныеФайла") Тогда ДополнительныеПараметры.Вставить("ДанныеФайла", РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла( - ПрисоединенныйФайл, ИдентификаторФормы)); + ПрисоединенныйФайл,, ИдентификаторФормы)); КонецЕсли; ОбработкаРезультата = Неопределено; @@ -497,6 +497,35 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Работа со сканером. + +// Открывает форму настройки сканирования. +Процедура ОткрытьФормуНастройкиСканирования() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Если СистемнаяИнформация.ТипПлатформы <> ТипПлатформы.Windows_x86 + Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + + ТекстСообщения = НСтр("ru = 'Для сканирования необходимо использовать 32-битную версию программы для ОС Windows.'"); + ПоказатьПредупреждение(, ТекстСообщения); + Возврат; + КонецЕсли; + + КомпонентаУстановлена = РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту(); + + Если Не КомпонентаУстановлена Тогда + ТекстВопроса = НСтр("ru = 'Для продолжения работы необходимо установить компоненту сканирования. + |Установить компоненту?'"); + Обработчик = Новый ОписаниеОповещения("ПоказатьВопросУстановкиКомпонентыСканирования", ЭтотОбъект, КомпонентаУстановлена); + ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Возврат; + КонецЕсли; + + ОткрытьФормуНастройкиСканированияЗавершение(КомпонентаУстановлена, Неопределено); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -504,7 +533,7 @@ // Процедура предназначена для печати файла соответствующим приложением // // Параметры -// ДанныеФайла - Структура - данные файла. +// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. // ИмяОткрываемогоФайла - Строка - полное имя файла. // Процедура НапечататьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла) @@ -575,6 +604,16 @@ ПараметрыВыполнения.ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляПечати(ПараметрыВыполнения.ДанныеФайлов[ПараметрыВыполнения.НомерФайла]); +#Если ВебКлиент Тогда + Если ПараметрыВыполнения.ДанныеФайла.Расширение <> "mxl" Тогда + Текст = НСтр("ru = 'Необходимо сохранить файл на компьютер, после чего выполнить + |печать при помощи приложения, предназначенного + |для работы с данным файлом.'"); + ПоказатьПредупреждение(, Текст); + Возврат; + КонецЕсли; +#КонецЕсли + Если ПараметрыВыполнения.ДанныеФайла.Свойство("ТабличныйДокумент") Тогда ПараметрыВыполнения.ДанныеФайла.ТабличныйДокумент.Напечатать(); // переходим к печати следующего файла. @@ -583,13 +622,18 @@ ВыполнитьОбработкуОповещения(Обработчик); Возврат КонецЕсли; - Обработчик = Новый ОписаниеОповещения("НапечататьФайлПослеПолученияВерсииВРабочийКаталог", ЭтотОбъект, ПараметрыВыполнения); - РаботаСФайламиСлужебныйКлиент.ПолучитьФайлВерсииВРабочийКаталог( - Обработчик, - ПараметрыВыполнения.ДанныеФайла, - "", - ПараметрыВыполнения.УникальныйИдентификатор); + Если РаботаСФайламиСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда + Обработчик = Новый ОписаниеОповещения("НапечататьФайлПослеПолученияВерсииВРабочийКаталог", ЭтотОбъект, ПараметрыВыполнения); + РаботаСФайламиСлужебныйКлиент.ПолучитьФайлВерсииВРабочийКаталог( + Обработчик, + ПараметрыВыполнения.ДанныеФайла, + "", + ПараметрыВыполнения.УникальныйИдентификатор); + Иначе + ПараметрыВыполнения.ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ПараметрыВыполнения.ДанныеФайлов[ПараметрыВыполнения.НомерФайла], Неопределено); + ОткрытьФайл(ПараметрыВыполнения.ДанныеФайла, Ложь); + КонецЕсли; КонецПроцедуры // Процедура печати Файла после получения на диск diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index 9cb1545d2..cfd4591d8 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -72,32 +72,34 @@ Результат.Вставить("ИмяБезРасширения"); Результат.Вставить("Комментарий", ""); Результат.Вставить("АдресВременногоХранилищаТекста"); - Результат.Вставить("ХранитьВерсии", Истина); Результат.Вставить("Автор"); Результат.Вставить("ИмяСправочникаХранилищаФайлов", "Файлы"); + Результат.Вставить("АдресВременногоХранилищаФайла"); + Результат.Вставить("РасширениеБезТочки"); + Результат.Вставить("ВремяИзменения", Дата('00010101')); + Результат.Вставить("ВремяИзмененияУниверсальное", Дата('00010101')); + Результат.Вставить("Размер", 0); + Результат.Вставить("Зашифрован"); + Результат.Вставить("ЗаписатьВИсторию", Ложь); + Результат.Вставить("Кодировка"); + Результат.Вставить("НовыйСтатусИзвлеченияТекста"); Если Режим = "ФайлСВерсией" Тогда - Результат.Вставить("РасширениеБезТочки"); - Результат.Вставить("ВремяИзменения", Дата('00010101')); - Результат.Вставить("ВремяИзмененияУниверсальное", Дата('00010101')); - Результат.Вставить("Размер", 0); - Результат.Вставить("Зашифрован"); - Результат.Вставить("АдресВременногоХранилищаФайла"); - Результат.Вставить("ЗаписатьВИсторию", Ложь); - Результат.Вставить("Кодировка"); + Результат.Вставить("ХранитьВерсии", Истина); Результат.Вставить("СсылкаНаВерсиюИсточник"); - Результат.Вставить("НоваяВерсияДатаСоздания"); - Результат.Вставить("НоваяВерсияАвтор"); - Результат.Вставить("НоваяВерсияКомментарий"); - Результат.Вставить("НоваяВерсияНомерВерсии"); - Результат.Вставить("НовыйСтатусИзвлеченияТекста"); + Результат.Вставить("НоваяВерсияДатаСоздания"); + Результат.Вставить("НоваяВерсияАвтор"); + Результат.Вставить("НоваяВерсияКомментарий"); + Результат.Вставить("НоваяВерсияНомерВерсии"); + Иначе + Результат.Вставить("ХранитьВерсии", Ложь); КонецЕсли; Если ИсходныйФайл <> Неопределено Тогда - Результат.ИмяБезРасширения = ИсходныйФайл.ИмяБезРасширения; - Результат.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ИсходныйФайл.Расширение); - Результат.ВремяИзменения = ИсходныйФайл.ПолучитьВремяИзменения(); + Результат.ИмяБезРасширения = ИсходныйФайл.ИмяБезРасширения; + Результат.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ИсходныйФайл.Расширение); + Результат.ВремяИзменения = ИсходныйФайл.ПолучитьВремяИзменения(); Результат.ВремяИзмененияУниверсальное = ИсходныйФайл.ПолучитьУниверсальноеВремяИзменения(); - Результат.Размер = ИсходныйФайл.Размер(); + Результат.Размер = ИсходныйФайл.Размер(); КонецЕсли; Возврат Результат; @@ -129,14 +131,18 @@ КонецЕсли; Результат = Не ЗначениеЗаполнено(ДанныеФайла.Редактирует) Или ДанныеФайла.ФайлРедактируетТекущийПользователь; + Если Не Результат Тогда + + ДатаЗаема = ?(ЗначениеЗаполнено(ДанныеФайла.ДатаЗаема), + " " + НСтр("ru='с'") + " " + Формат(ДанныеФайла.ДатаЗаема, "ДЛФ=ДВ"), ""); + СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файл ""%1"" |уже занят для редактирования пользователем - |""%2"" с %3.'"), - Строка(ДанныеФайла.Ссылка), - Строка(ДанныеФайла.Редактирует), - Формат(ДанныеФайла.ДатаЗаема, "ДЛФ=ДВ")); + |""%2""%3.'"), + Строка(ДанныеФайла.Ссылка), Строка(ДанныеФайла.Редактирует), ДатаЗаема); + КонецЕсли; Возврат Результат; @@ -154,4 +160,10 @@ КонецФункции +Функция СобытиеЖурналаРегистрацииСинхронизация() Экспорт + + Возврат НСтр("ru = 'Синхронизация файлов с облачным сервисом'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl index 6cce1db35..a4d6d1b4b 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -78,7 +78,7 @@ // // Параметры: // ДанныеФайла - Структура - содержащая сведения о файле -// см. функцию РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайла(). +// см. функцию РаботаСФайлами.ДанныеФайла. // // УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. // @@ -90,9 +90,9 @@ // // Параметры: // ДанныеФайла - Структура - содержащая сведения о файле -// см. функцию РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайла(). +// см. функцию РаботаСФайлами.ДанныеФайла. // -// УникальныйИдентификатор - - УникальныйИдентификатор - уникальный идентификатор формы. +// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. // Процедура ПриОсвобожденииФайла(ДанныеФайла, УникальныйИдентификатор) Экспорт @@ -113,7 +113,7 @@ #Область УстаревшиеПроцедурыИФункции -// Устарела. Следует использовать РаботаСФайламиПереопределяемый.ПриОпределенииНастроек(). +// Устарела. Следует использовать РаботаСФайламиПереопределяемый.ПриОпределенииНастроек. // // Формирует массив метаданных, которые не должны выводиться в настройках очистки файлов. // @@ -127,7 +127,7 @@ КонецПроцедуры -// Устарела. Следует использовать РаботаСФайламиПереопределяемый.ПриОпределенииНастроек(). +// Устарела. Следует использовать РаботаСФайламиПереопределяемый.ПриОпределенииНастроек. // // Формирует массив метаданных, которые не должны выводиться в настройках синхронизации файлов. // diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index 5eaa2865d..3de2df594 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -5,6 +5,11 @@ #Область СлужебныйПрограммныйИнтерфейс +// См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. +Процедура ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты) Экспорт + Объекты.Вставить(Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов.ПолноеИмя(), ""); +КонецПроцедуры + // Используется при выгрузке файлов для перехода в сервис (БТС). // Процедура ВыгрузитьФайл(Знач ОбъектФайла, Знач ИмяНовогоФайла) Экспорт @@ -91,9 +96,7 @@ ИменаСправочниковХраненияФайлов = ИменаСправочниковХраненияФайлов(ПустаяСсылка, Истина); Для Каждого ИмяСправочникаХраненияФайлов Из ИменаСправочниковХраненияФайлов Цикл - Результат.Добавить(Метаданные.Справочники[ИмяСправочникаХраненияФайлов.Ключ]); - КонецЦикла; КонецЦикла; @@ -243,8 +246,8 @@ // Запись Если ЗначениеЗаполнено(Вложение.ФайлСсылка) Тогда - ВерсияСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьВерсию(Вложение.ФайлСсылка, СведенияОФайле); - РаботаСФайламиСлужебныйВызовСервера.ОбновитьВерсиюВФайле(Вложение.ФайлСсылка, ВерсияСсылка, СведенияОФайле.АдресВременногоХранилищаТекста); + ВерсияСсылка = СоздатьВерсию(Вложение.ФайлСсылка, СведенияОФайле); + ОбновитьВерсиюВФайле(Вложение.ФайлСсылка, ВерсияСсылка, СведенияОФайле.АдресВременногоХранилищаТекста); Иначе Вложение.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ПараметрыДоставки.Папка, СведенияОФайле); КонецЕсли; @@ -324,7 +327,10 @@ МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельцаФайлов); ИменаСправочников = Новый Соответствие; - ИмяСтандартногоОсновногоСправочника = МетаданныеВладельца.Имя + "ПрисоединенныеФайлы"; + + ИмяСтандартногоОсновногоСправочника = МетаданныеВладельца.Имя + + ?(СтрЗаканчиваетсяНа(МетаданныеВладельца.Имя, "ПрисоединенныеФайлы"), "", "ПрисоединенныеФайлы"); + Если Метаданные.Справочники.Найти(ИмяСтандартногоОсновногоСправочника) <> Неопределено Тогда ИменаСправочников.Вставить(ИмяСтандартногоОсновногоСправочника, Истина); ИначеЕсли Метаданные.ОпределяемыеТипы.ВладелецФайлов.Тип.СодержитТип(ТипВладельцаФайлов) Тогда @@ -413,11 +419,9 @@ ДоступнаЭлектроннаяПодпись = (МодульЭлектроннаяПодписьСлужебный <> Неопределено) И (МодульЭлектроннаяПодписьСлужебный.ДоступнаЭлектроннаяПодпись(ТипЗнч(КопируемыйФайл))); КонецЕсли; - Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КопируемыйФайл, "ПометкаУдаления") Тогда Продолжить; КонецЕсли; - НачатьТранзакцию(); Попытка МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(КопируемыйФайл); @@ -843,50 +847,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Поддержка обмена файлами - -// Служебная функции. Используется для удаления файла на сервере. -// -Процедура УдалитьФайлыНаСервере(ПрежнийПутьНаТоме) - - // Удаляем файл. - ФайлВременный = Новый Файл(ПрежнийПутьНаТоме); - Если ФайлВременный.Существует() Тогда - - Попытка - ФайлВременный.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПрежнийПутьНаТоме); - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Удаление файлов в томе при обмене'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ИнформацияОбОшибке()); - КонецПопытки; - - КонецЕсли; - - // Удаляем каталог файла, если после удаления файла каталог стал пустым. - Попытка - МассивФайловВКаталоге = НайтиФайлы(ФайлВременный.Путь, "*.*"); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ФайлВременный.Путь); - КонецЕсли; - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Удаление файлов в томе при обмене'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ИнформацияОбОшибке() ); - КонецПопытки; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Работа с томами файлов @@ -1193,14 +1153,22 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") И Пользователи.РолиДоступны("ДобавлениеИзменениеЭлектронныхПодписейИШифрование") И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиентПодMacOS() Тогда - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ЭлектронноеПодписание = МодульЭлектроннаяПодпись.ИспользоватьЭлектронныеПодписи(); Шифрование = МодульЭлектроннаяПодпись.ИспользоватьШифрование(); КонецЕсли; - Используется = ЭлектронноеПодписание Или Шифрование; + Если ЭтоФормаСписка Тогда + Если ОбщегоНазначения.ЭтоСправочник(Метаданные.НайтиПоПолномуИмени(Форма.Список.ОсновнаяТаблица)) Тогда + ТаблицаФайлов = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Форма.Список.ОсновнаяТаблица); + Доступна = ДоступнаЭлектроннаяПодпись(ТипЗнч(ТаблицаФайлов.ПустаяСсылка())); + Иначе + Доступна = Истина; + КонецЕсли; + Иначе + Доступна = ДоступнаЭлектроннаяПодпись(ТипЗнч(Форма.Объект.Ссылка)); + КонецЕсли; + Используется = (ЭлектронноеПодписание Или Шифрование) И Доступна; Если ЭтоФормаСписка Тогда Элементы.СписокНомерКартинкиПодписанЗашифрован.Видимость = Используется; @@ -1264,62 +1232,225 @@ КонецЕсли; КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); - МодульЭлектроннаяПодписьСлужебный.ОформитьСписокПодписей(Форма, "ЭлектронныеПодписи"); - КонецЕсли; + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + МодульЭлектроннаяПодписьСлужебный.ОформитьСписокПодписей(Форма, "ЭлектронныеПодписи"); КонецПроцедуры // Только для внутреннего использования. Процедура ПеренестиРезультатыПроверкиПодписей(ПодписиВФорме, ПодписанныйФайл) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + Возврат; + КонецЕсли; - ПодписиВОбъекте = МодульЭлектроннаяПодпись.УстановленныеПодписи(ПодписанныйФайл); + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + Если Не МодульЭлектроннаяПодписьСлужебный.ДоступнаЭлектроннаяПодпись(ПодписанныйФайл) Тогда + Возврат; + КонецЕсли; - Если ПодписиВФорме.Количество() <> ПодписиВОбъекте.Количество() Тогда - Возврат; // Если объект был изменен, результаты проверки не переносятся. - КонецЕсли; - - Если ПодписиВФорме.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Свойства = Новый Структура("ДатаПроверкиПодписи, ПодписьВерна", Null, Null); - ЗаполнитьЗначенияСвойств(Свойства, ПодписиВОбъекте[0]); - Если Свойства.ДатаПроверкиПодписи = Null - Или Свойства.ПодписьВерна = Null Тогда - Возврат; // Если в объекте нет реквизитов проверки, результаты проверки не переносятся. - КонецЕсли; - - Для Каждого Строка Из ПодписиВФорме Цикл - СтрокаВОбъекте = ПодписиВОбъекте.Получить(ПодписиВФорме.Индекс(Строка)); - Если Строка.ДатаПодписи <> СтрокаВОбъекте.ДатаПодписи - Или Строка.Комментарий <> СтрокаВОбъекте.Комментарий - Или Строка.КомуВыданСертификат <> СтрокаВОбъекте.КомуВыданСертификат - Или Строка.Отпечаток <> СтрокаВОбъекте.Отпечаток - Или Строка.УстановившийПодпись <> СтрокаВОбъекте.УстановившийПодпись Тогда - Возврат; // Если объект был изменен, результаты проверки не переносятся. - КонецЕсли; - КонецЦикла; - - Для Каждого Строка Из ПодписиВФорме Цикл - СтрокаВОбъекте = ПодписиВОбъекте.Получить(ПодписиВФорме.Индекс(Строка)); - ЗаполнитьЗначенияСвойств(Свойства, СтрокаВОбъекте); - Если Строка.ДатаПроверкиПодписи = Свойства.ДатаПроверкиПодписи - И Строка.ПодписьВерна = Свойства.ПодписьВерна Тогда - Продолжить; // Не нужно устанавливать модифицированность, если результаты проверки совпадают. - КонецЕсли; - ЗаполнитьЗначенияСвойств(Свойства, Строка); - ЗаполнитьЗначенияСвойств(СтрокаВОбъекте, Свойства); - МодульЭлектроннаяПодпись.ОбновитьПодпись(ПодписанныйФайл, СтрокаВОбъекте); - КонецЦикла; + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + ПодписиВОбъекте = МодульЭлектроннаяПодпись.УстановленныеПодписи(ПодписанныйФайл); + + Если ПодписиВФорме.Количество() <> ПодписиВОбъекте.Количество() Тогда + Возврат; // Если объект был изменен, результаты проверки не переносятся. КонецЕсли; + Если ПодписиВФорме.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Свойства = Новый Структура("ДатаПроверкиПодписи, ПодписьВерна", Null, Null); + ЗаполнитьЗначенияСвойств(Свойства, ПодписиВОбъекте[0]); + Если Свойства.ДатаПроверкиПодписи = Null + Или Свойства.ПодписьВерна = Null Тогда + Возврат; // Если в объекте нет реквизитов проверки, результаты проверки не переносятся. + КонецЕсли; + + Для Каждого Строка Из ПодписиВФорме Цикл + СтрокаВОбъекте = ПодписиВОбъекте.Получить(ПодписиВФорме.Индекс(Строка)); + Если Строка.ДатаПодписи <> СтрокаВОбъекте.ДатаПодписи + Или Строка.Комментарий <> СтрокаВОбъекте.Комментарий + Или Строка.КомуВыданСертификат <> СтрокаВОбъекте.КомуВыданСертификат + Или Строка.Отпечаток <> СтрокаВОбъекте.Отпечаток + Или Строка.УстановившийПодпись <> СтрокаВОбъекте.УстановившийПодпись Тогда + Возврат; // Если объект был изменен, результаты проверки не переносятся. + КонецЕсли; + КонецЦикла; + + Для Каждого Строка Из ПодписиВФорме Цикл + СтрокаВОбъекте = ПодписиВОбъекте.Получить(ПодписиВФорме.Индекс(Строка)); + ЗаполнитьЗначенияСвойств(Свойства, СтрокаВОбъекте); + Если Строка.ДатаПроверкиПодписи = Свойства.ДатаПроверкиПодписи + И Строка.ПодписьВерна = Свойства.ПодписьВерна Тогда + Продолжить; // Не нужно устанавливать модифицированность, если результаты проверки совпадают. + КонецЕсли; + ЗаполнитьЗначенияСвойств(Свойства, Строка); + ЗаполнитьЗначенияСвойств(СтрокаВОбъекте, Свойства); + МодульЭлектроннаяПодпись.ОбновитьПодпись(ПодписанныйФайл, СтрокаВОбъекте); + КонецЦикла; + КонецПроцедуры +// Помещает шифрованные файлы в базу и ставит признак Зашифрован файлу и всем версиям. +// +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - файл. +// Зашифровать - Булево - зашифровать файл, если Истина - иначе расшифровать. +// МассивДанныхДляЗанесенияВБазу - массив структур. +// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. +// ИмяРабочегоКаталога - Строка - рабочий каталог. +// МассивФайловВРабочемКаталогеДляУдаления - Массив - файлы, которые надо удалить из регистра. +// МассивОтпечатков - Массив - массив отпечатков сертификатов, использованных для шифрования. +// +Процедура ЗаписатьИнформациюОШифровании(ФайлСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, УникальныйИдентификатор, + ИмяРабочегоКаталога, МассивФайловВРабочемКаталогеДляУдаления, МассивОтпечатков) Экспорт + + НачатьТранзакцию(); + Попытка + АдресВременногоХранилищаТекстаТекущейВерсии = ""; + АдресВременногоХранилищаОсновногоФайла = ""; + Для Каждого ДанныеДляЗаписиНаСервере Из МассивДанныхДляЗанесенияВБазу Цикл + + Если ТипЗнч(ДанныеДляЗаписиНаСервере.ВерсияСсылка) <> Тип("СправочникСсылка.ВерсииФайлов") Тогда + АдресВременногоХранилищаОсновногоФайла = ДанныеДляЗаписиНаСервере.АдресВременногоХранилища; + Продолжить; + КонецЕсли; + + АдресВременногоХранилища = ДанныеДляЗаписиНаСервере.АдресВременногоХранилища; + ВерсияСсылка = ДанныеДляЗаписиНаСервере.ВерсияСсылка; + АдресВременногоХранилищаТекста = ДанныеДляЗаписиНаСервере.АдресВременногоХранилищаТекста; + + Если ВерсияСсылка = ФайлСсылка.ТекущаяВерсия Тогда + АдресВременногоХранилищаТекстаТекущейВерсии = АдресВременногоХранилищаТекста; + КонецЕсли; + + ПолноеИмяФайлаВРабочемКаталоге = ""; + ВРабочемКаталогеНаЧтение = Истина; // не используется + ВРабочемКаталогеВладельца = Истина; + ПолноеИмяФайлаВРабочемКаталоге = РаботаСФайламиСлужебныйВызовСервера.ПолучитьПолноеИмяФайлаИзРегистра(ВерсияСсылка, + ИмяРабочегоКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); + Если НЕ ПустаяСтрока(ПолноеИмяФайлаВРабочемКаталоге) Тогда + МассивФайловВРабочемКаталогеДляУдаления.Добавить(ПолноеИмяФайлаВРабочемКаталоге); + КонецЕсли; + + РаботаСФайламиСлужебныйВызовСервера.УдалитьИзРегистра(ВерсияСсылка); + + СтатусИзвлеченияТекста = Неопределено; + Если Зашифровать = Ложь Тогда + СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + КонецЕсли; + + СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); + СведенияОФайле.ИмяБезРасширения = ВерсияСсылка.ПолноеНаименование; + СведенияОФайле.Комментарий = ВерсияСсылка.Комментарий; + СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилища; + СведенияОФайле.РасширениеБезТочки = ВерсияСсылка.Расширение; + СведенияОФайле.ВремяИзменения = ВерсияСсылка.ДатаСоздания; + СведенияОФайле.ВремяИзмененияУниверсальное = ВерсияСсылка.ДатаМодификацииУниверсальная; + СведенияОФайле.Размер = ВерсияСсылка.Размер; + СведенияОФайле.ВремяИзмененияУниверсальное = ВерсияСсылка.ДатаМодификацииУниверсальная; + СведенияОФайле.НовыйСтатусИзвлеченияТекста = СтатусИзвлеченияТекста; + СведенияОФайле.Зашифрован = Зашифровать; + СведенияОФайле.ХранитьВерсии = Ложь; + ОбновитьВерсиюФайла(ФайлСсылка, СведенияОФайле, ВерсияСсылка, УникальныйИдентификатор); + + // Для варианта с хранением файлов на диске (на сервере) удаляем Файл из временного хранилища после получения. + Если НЕ ПустаяСтрока(ДанныеДляЗаписиНаСервере.АдресФайла) И ЭтоАдресВременногоХранилища(ДанныеДляЗаписиНаСервере.АдресФайла) Тогда + УдалитьИзВременногоХранилища(ДанныеДляЗаписиНаСервере.АдресФайла); + КонецЕсли; + + КонецЦикла; + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); + БлокировкаДанных.Заблокировать(); + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор); + + ФайлОбъект.Зашифрован = Зашифровать; + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); // очистим извлеченный текст + // Чтобы прошла запись ранее подписанного объекта. + ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); + + Если Зашифровать Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + МодульЭлектроннаяПодписьСлужебный.ДобавитьСертификатыШифрования(ФайлСсылка, МассивОтпечатков); + КонецЕсли; + Иначе + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + МодульЭлектроннаяПодписьСлужебный.ОчиститьСертификатыШифрования(ФайлСсылка); + КонецЕсли; + КонецЕсли; + + Если АдресВременногоХранилищаТекстаТекущейВерсии <> "" Тогда + Текст = ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекстаТекущейВерсии); + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + КонецЕсли; + + МетаданныеФайла = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); + ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеФайла); + Если Не ФайлОбъект.ХранитьВерсии Или (ВозможностьХранитьВерсии И Не ЗначениеЗаполнено(ФайлОбъект.ТекущаяВерсия)) Тогда + ОбновитьДвоичныеДанныеФайлаНаСервере(ФайлОбъект, АдресВременногоХранилищаОсновногоФайла); + КонецЕсли; + + ФайлОбъект.Записать(); + + РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Контроль ведения учета. + +#Область ПроверкаНаличияСсылокНаНесуществующиеФайлыВТоме + +Процедура ПроверкаСсылокНаНесуществующиеФайлыВТоме(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + Возврат; + КонецЕсли; + + МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + + МассивВидовОбъектовМетаданных = Новый Массив; + МассивВидовОбъектовМетаданных.Добавить(Метаданные.Справочники); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.Документы); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + МассивВидовОбъектовМетаданных.Добавить(Метаданные.Задачи); + + Для Каждого ВидМетаданных Из МассивВидовОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если МодульКонтрольВеденияУчетаСлужебный.ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; + Если Не ПроверитьОбъектПрисоединенныхФайлов(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + ПоискСсылокНаНесуществующиеФайлыВТоме(ОбъектМетаданных, ПараметрыПроверки); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Прочие функции @@ -1397,20 +1528,6 @@ КонецПроцедуры -// Получает кодировку текстового файла, указанную пользователем (если есть). -// -// Параметры: -// ВерсияФайла - ссылка на версию файла. -// -// Возвращаемое значение: -// Строка - идентификатор кодировки текста или пустая строка. -// -Функция ПолучитьКодировкуВерсииФайла(ВерсияФайла) Экспорт - - Возврат РаботаСФайламиСлужебныйВызовСервера.ПолучитьКодировкуВерсииФайла(ВерсияФайла); - -КонецФункции - Функция СписокРасширенийДляПредпросмотра() Экспорт // См. также перечисление ФорматКартинки. @@ -1874,62 +1991,78 @@ , НСтр("ru = 'Начато регламентное извлечения текста'")); - Запрос = Новый Запрос; + Запрос = Новый Запрос; Запрос.Текст = РаботаСФайламиСлужебныйВызовСервера.ТекстЗапросаДляИзвлеченияТекста(); - Результат = Запрос.Выполнить(); + Результат = Запрос.Выполнить(); ТаблицаВыгрузки = Результат.Выгрузить(); Для Каждого Строка Из ТаблицаВыгрузки Цикл - ФайлОбъект = Строка.Ссылка.ПолучитьОбъект(); + НачатьТранзакцию(); Попытка - ФайлОбъект.Заблокировать(); - Исключение - // Заблокированные файлы будут обработаны в следующий раз. - Продолжить; - КонецПопытки; - - ИмяСРасширениемФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; - - Если ЭтоЭлементРаботаСФайлами(ФайлОбъект.Ссылка) Тогда - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлОбъект.Ссылка)); - ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); - Если ВозможностьХранитьВерсии И ЗначениеЗаполнено(ФайлОбъект.ТекущаяВерсия.Ссылка) Тогда - ИмяФайлаСПутем = РаботаСФайламиСлужебныйВызовСервера.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлОбъект.ТекущаяВерсия.Ссылка, Истина); - Иначе - ИмяФайлаСПутем = РаботаСФайламиСлужебныйВызовСервера.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлОбъект.Ссылка, Истина); + + // упр. блокировка + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Строка.Ссылка)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Строка.Ссылка); + БлокировкаДанных.Заблокировать(); + + ФайлОбъект = Строка.Ссылка.ПолучитьОбъект(); + + Если ФайлОбъект = Неопределено Тогда + ОтменитьТранзакцию(); + Продолжить; КонецЕсли; - КонецЕсли; - - Кодировка = ПолучитьКодировкуВерсииФайла(Строка.Ссылка); - - Отказ = Ложь; - Если ПустаяСтрока(ИмяФайлаСПутем) Тогда - Отказ = Истина; - Текст = ""; - Иначе - Текст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Кодировка); - КонецЕсли; - - Если Отказ = Ложь Тогда - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - Иначе - // Если текст некому извлечь это не ошибка, а нормальный случай. - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; - КонецЕсли; + + Попытка + ФайлОбъект.Заблокировать(); + Исключение + // Заблокированные файлы будут обработаны в следующий раз. + ОтменитьТранзакцию(); + Продолжить; + КонецПопытки; - Если Строка.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе - И Не ПустаяСтрока(ИмяФайлаСПутем) Тогда + ИмяСРасширениемФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; + + Если ЭтоЭлементРаботаСФайлами(ФайлОбъект.Ссылка) Тогда + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлОбъект.Ссылка)); + ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); + Если ВозможностьХранитьВерсии И ЗначениеЗаполнено(ФайлОбъект.ТекущаяВерсия.Ссылка) Тогда + ИмяФайлаСПутем = РаботаСФайламиСлужебныйВызовСервера.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлОбъект.ТекущаяВерсия.Ссылка, Истина); + Иначе + ИмяФайлаСПутем = РаботаСФайламиСлужебныйВызовСервера.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлОбъект.Ссылка, Истина); + КонецЕсли; + КонецЕсли; + + Отказ = Ложь; + Если ПустаяСтрока(ИмяФайлаСПутем) Тогда + Отказ = Истина; + Текст = ""; + Иначе + Текст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Строка.Кодировка); + КонецЕсли; + + Если Отказ = Ложь Тогда + ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + Иначе + // Если текст некому извлечь это не ошибка, а нормальный случай. + ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + КонецЕсли; + + Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе + И Не ПустаяСтрока(ИмяФайлаСПутем) Тогда + + УдалитьФайлы(ИмяФайлаСПутем); + КонецЕсли; + + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст, Новый СжатиеДанных); - УдалитьФайлы(ИмяФайлаСПутем); - КонецЕсли; - - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст, Новый СжатиеДанных); - - Попытка ПриЗаписиИзвлеченногоТекста(ФайлОбъект); + + ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), @@ -1937,9 +2070,9 @@ , , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время регламентного извлечения текста из файла + НСтр("ru = 'Не удалось выполнить регламентное извлечение текста из файла |""%1"" - |произошла ошибка: + |по причине: |""%2"".'"), ИмяСРасширениемФайла, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) )); @@ -2082,10 +2215,7 @@ Функция ОбъектыИсключенияПриОчисткеФайлов() Экспорт - НастройкиФайлов = НастройкиФайлов(); - РаботаСФайламиПереопределяемый.ПриОпределенииНастроек(НастройкиФайлов); - - Возврат НастройкиФайлов.НеОчищатьФайлы; + Возврат НастройкиФайлов().НеОчищатьФайлы; КонецФункции @@ -2109,7 +2239,7 @@ // См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного. Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); + ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента, Отправитель); КонецПроцедуры @@ -2137,7 +2267,7 @@ Возврат; КонецЕсли; - КоличествоЗанятыхФайлов = КоличествоЗанятыхФайлов(ПользователиКлиентСервер.АвторизованныйПользователь()); + КоличествоЗанятыхФайлов = КоличествоЗанятыхФайлов(); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. @@ -2366,7 +2496,7 @@ Обработчик.ПроцедураЗаполненияДанныхОбновления = "РаботаСФайламиСлужебныйВызовСервера.ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейИСертификатовШифрования"; Обработчик.ЧитаемыеОбъекты = СтрСоединить(РаботаСФайламиСлужебныйВызовСервера.ПолныеИменаСправочниковПрисоединенныхФайлов(), ", "); Обработчик.ИзменяемыеОбъекты = РаботаСФайламиСлужебныйВызовСервера.ИзменяемыеОбъектыПриПереносеЭлектронныхПодписейИСертификатовШифрования(); - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РегистрыСведений.ДвоичныеДанныеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -2395,7 +2525,7 @@ Обработчик.ПроцедураЗаполненияДанныхОбновления = "РаботаСФайламиСлужебныйВызовСервера.ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейСВерсийФайловНаФайлы"; Обработчик.ЧитаемыеОбъекты = РаботаСФайламиСлужебныйВызовСервера.ОбъектыПриПереносеЭлектронныхПодписейСВерсийФайловНаФайлы(Истина); Обработчик.ИзменяемыеОбъекты = РаботаСФайламиСлужебныйВызовСервера.ОбъектыПриПереносеЭлектронныхПодписейСВерсийФайловНаФайлы(Ложь); - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РегистрыСведений.ДвоичныеДанныеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -2419,7 +2549,8 @@ Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.ДвоичныеДанныеФайлов.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; Обработчик.ЧитаемыеОбъекты = "Справочник.ВерсииФайлов"; Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ДвоичныеДанныеФайлов"; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена"; + Обработчик.БлокируемыеОбъекты = "Справочник.Файлы, Справочник.ВерсииФайлов"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; @@ -2441,8 +2572,9 @@ Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.НаличиеФайлов.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; Обработчик.ЧитаемыеОбъекты = "Справочник.Файлы"; Обработчик.ИзменяемыеОбъекты = "РегистрСведений.НаличиеФайлов"; + Обработчик.БлокируемыеОбъекты = "Справочник.Файлы, Справочник.ВерсииФайлов"; Обработчик.ОчередьОтложеннойОбработки = 3; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; @@ -2461,11 +2593,12 @@ Обработчик.Идентификатор = Новый УникальныйИдентификатор("5137a43e-75aa-4a68-ba2f-525a3a646af8"); Обработчик.Процедура = "РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.ЧитаемыеОбъекты = РегистрыСведений.СведенияОФайлах.ЧитаемыеОбъектыПриОбновленииИБ(); + Обработчик.ЧитаемыеОбъекты = РегистрыСведений.СведенияОФайлах.ОбновляемыеОбъекты(); Обработчик.ИзменяемыеОбъекты = "РегистрСведений.СведенияОФайлах"; + Обработчик.БлокируемыеОбъекты = РегистрыСведений.СведенияОФайлах.ОбновляемыеОбъекты(); Обработчик.ОчередьОтложеннойОбработки = 4; Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.СведенияОФайлах.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; @@ -2484,17 +2617,18 @@ Приоритет.Порядок = "Любой"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.1.1"; + Обработчик.Версия = "2.4.3.56"; Обработчик.Комментарий = - НСтр("ru = 'Обновление универсальной даты обновления элементов справочника Файлы.'"); + НСтр("ru = 'Обновление универсальной даты и типа хранения элементов справочника Файлы.'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("8b417c47-dd46-45ce-b59b-c675059c9020"); Обработчик.Процедура = "Справочники.Файлы.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЧитаемыеОбъекты = "Справочник.Файлы"; Обработчик.ИзменяемыеОбъекты = "Справочник.Файлы"; + Обработчик.БлокируемыеОбъекты = "Справочник.Файлы, Справочник.ВерсииФайлов"; Обработчик.ОчередьОтложеннойОбработки = 5; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.Файлы.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; @@ -2515,6 +2649,12 @@ Обработчик.Процедура = "РаботаСФайламиСлужебный.ОбновитьПутьТомаLinux"; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.4.1.1"; + Обработчик.ОбщиеДанные = Ложь; + Обработчик.Процедура = "РаботаСФайламиСлужебный.УдалитьУстаревшиеОбработчикиОбновления"; + Обработчик.РежимВыполнения = "Оперативно"; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. @@ -2561,7 +2701,7 @@ Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Пользователь = ПользователиКлиентСервер.АвторизованныйПользователь(); Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда - КоличествоЗанятыхФайлов = РаботаСФайламиСлужебныйВызовСервера.ПолучитьКоличествоЗанятыхФайлов(, Пользователь); + КоличествоЗанятыхФайлов = КоличествоЗанятыхФайлов(); КонецЕсли; КонецЕсли; @@ -2596,8 +2736,8 @@ МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ПроверкаЦелостностиТома); КонецПроцедуры -// См. СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. -Процедура СобратьСтатистикуКонфигурации() Экспорт +// См. ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации. +Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда Возврат; @@ -2646,7 +2786,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.РегистрыСведений.НаличиеФайлов.ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("ОбъектСФайлами", ВладелецФайлов); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); МенеджерЗаписи = РегистрыСведений.НаличиеФайлов.СоздатьМенеджерЗаписи(); @@ -2690,9 +2829,8 @@ КонецЕсли; ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -2738,7 +2876,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); @@ -2803,7 +2940,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); @@ -2883,7 +3019,7 @@ // Для обменов не РИБ используется алгоритм обычного сеанса обмена, а не создания начального образа, // т.к. параметра СозданиеНачальногоОбраза равный Истина означает начальную выгрузку данных. Если СозданиеНачальногоОбраза И Получатель <> Неопределено - И Не ОбщегоНазначения.ЭтоУзелРаспределеннойИнформационнойБазы(Получатель.Ссылка) Тогда + И Не ЭтоУзелРаспределеннойИнформационнойБазы(Получатель.Ссылка) Тогда СозданиеНачальногоОбраза = Ложь; КонецЕсли; @@ -2950,7 +3086,7 @@ // Только для внутреннего использования. // -Процедура ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента) +Процедура ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента, Отправитель = Неопределено) ОбработатьПолученныеФайлы = Ложь; Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда @@ -2980,6 +3116,13 @@ КонецЕсли; Если ОбработатьПолученныеФайлы Тогда + + Если Отправитель <> Неопределено И ПланыОбмена.ИзменениеЗарегистрировано(Отправитель.Ссылка, ЭлементДанных) Тогда + // Коллизия объекта (изменения зарегистрированы и на главном узле и на подчиненном). + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + // Для существующих файлов, размещенных в томах, выполняем их удаление из томов, // т.к. при получении нового файла он будет заново размещен в томе или информационной базе. Если НЕ ЭлементДанных.ЭтоНовый() Тогда @@ -2990,7 +3133,7 @@ ПрежнийПутьНаТоме = ПолныйПутьТома(ВерсияФайла.Том) + ВерсияФайла.ПутьКФайлу; - УдалитьФайлыНаСервере(ПрежнийПутьНаТоме); + УдалитьФайлВТоме(ПрежнийПутьНаТоме); КонецЕсли; @@ -3057,7 +3200,6 @@ КонецФункции - // Возвращает Истина, если это элемент данных, относящийся к подсистеме РаботаСФайлами. // Функция ЭтоЭлементРаботаСФайлами(ЭлементДанных) @@ -3085,8 +3227,8 @@ УстановитьПривилегированныйРежим(Истина); - МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Файл = ПрисоединенныйФайл; + МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Файл = ПрисоединенныйФайл; МенеджерЗаписи.ДвоичныеДанныеФайла = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); МенеджерЗаписи.Записать(Истина); @@ -3433,10 +3575,9 @@ Попытка Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)).ПолноеИмя()); + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ПрисоединенныйФайл); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); Иначе @@ -3447,15 +3588,45 @@ ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); ФайлОбъект.Записать(); КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецПроцедуры +Функция КоличествоЗанятыхФайлов(Знач ВладелецФайла = Неопределено, Знач Редактирует = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ КОЛИЧЕСТВО(1) КАК Количество + |ИЗ + | РегистрСведений.СведенияОФайлах КАК СведенияОФайлах + |ГДЕ + | СведенияОФайлах.Редактирует <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; + + Если Редактирует = Неопределено Тогда + Редактирует = Пользователи.АвторизованныйПользователь(); + КонецЕсли; + + Запрос.Текст = Запрос.Текст + " И СведенияОФайлах.Редактирует = &Редактирует "; + Запрос.УстановитьПараметр("Редактирует", Редактирует); + + Если ВладелецФайла <> Неопределено Тогда + Запрос.Текст = Запрос.Текст + " И СведенияОФайлах.ВладелецФайла = &ВладелецФайла "; + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + КонецЕсли; + + Выборка = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Количество"); + Возврат Выборка[0]; + +КонецФункции + // Помещает зашифрованные данные файла в хранилище и устанавливает файлу признак Зашифрован. // // Параметры: @@ -3472,7 +3643,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ПрисоединенныйФайл); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); Иначе @@ -3494,9 +3664,8 @@ КонецЕсли; ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -3518,7 +3687,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ПрисоединенныйФайл); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); Иначе ПрисоединенныйФайлОбъект = ПрисоединенныйФайл; @@ -3556,9 +3724,52 @@ КонецЕсли; ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Поддержка обмена файлами + +// Служебная функции. Используется для удаления файла на сервере. +// +Процедура УдалитьФайлВТоме(ИмяУдаляемогоФайла) + + // Удаляем файл. + ФайлВременный = Новый Файл(ИмяУдаляемогоФайла); + Если ФайлВременный.Существует() Тогда + + Попытка + ФайлВременный.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ИмяУдаляемогоФайла); + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Удаление файлов в томе'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецЕсли; + + // Удаляем каталог файла, если после удаления файла каталог стал пустым. + Попытка + МассивФайловВКаталоге = НайтиФайлы(ФайлВременный.Путь, "*.*"); + Если МассивФайловВКаталоге.Количество() = 0 Тогда + УдалитьФайлы(ФайлВременный.Путь); + КонецЕсли; + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Удаление файлов в томе'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -3601,6 +3812,20 @@ КонецФункции +// Получает кодировку текстового файла, указанную пользователем (если есть). +// +// Параметры: +// ВерсияФайла - ссылка на версию файла. +// +// Возвращаемое значение: +// Строка - идентификатор кодировки текста или пустая строка. +// +Функция ПолучитьКодировкуВерсииФайла(ВерсияФайла) + + Возврат РаботаСФайламиСлужебныйВызовСервера.ПолучитьКодировкуВерсииФайла(ВерсияФайла); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -3642,13 +3867,12 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); // Сменим индекс картинки, возможно, появилась версия или сменился индекс картинки у версии. ФайлОбъект.ИндексКартинки = ТекущаяВерсия.ИндексКартинки; - // Копируем реквизиты для ускорения работы RLS. + // Копируем реквизиты для ускорения работы ограничения на уровне записей. ФайлОбъект.Размер = ТекущаяВерсия.Размер; ФайлОбъект.ДатаСоздания = ТекущаяВерсия.ДатаСоздания; ФайлОбъект.Изменил = ТекущаяВерсия.Автор; @@ -3666,9 +3890,8 @@ ФайлОбъект.Записать(); ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецЕсли; @@ -3687,14 +3910,13 @@ УстановитьПривилегированныйРежим(Истина); - Если НЕ ОбъектИмеетФайлы(ВладелецФайлов, Ссылка) Тогда + Если ВладелецФайлов <> Неопределено И Не ЕстьФайлыУВладельца(ВладелецФайлов, Ссылка) Тогда НачатьТранзакцию(); Попытка БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.РегистрыСведений.НаличиеФайлов.ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("ОбъектСФайлами", ВладелецФайлов); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); МенеджерЗаписи = РегистрыСведений.НаличиеФайлов.СоздатьМенеджерЗаписи(); @@ -3706,34 +3928,20 @@ КонецЕсли; ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецЕсли; - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ Том.Пустая() Тогда - ПолныйПуть = ПолныйПутьТома(Том) + ПутьКФайлу; - Попытка - Файл = Новый Файл(ПолныйПуть); - Файл.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); - ПутьСПодкаталогом = Файл.Путь; - МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, "*.*"); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ПутьСПодкаталогом); - КонецЕсли; - Исключение - // Если файл не удален - ошибки не было. - КонецПопытки; - КонецЕсли; + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И НЕ Том.Пустая() Тогда + ПолныйПуть = ПолныйПутьТома(Том) + ПутьКФайлу; + УдалитьФайлВТоме(ПолныйПуть); КонецЕсли; КонецПроцедуры -Функция ОбъектИмеетФайлы(Знач ВладелецФайлов, Знач ФайлИсключение = Неопределено) +Функция ЕстьФайлыУВладельца(Знач ВладелецФайлов, Знач ФайлИсключение = Неопределено) УстановитьПривилегированныйРежим(Истина); @@ -3780,8 +3988,8 @@ // Функция ЕстьПраво(Право, ВладелецПрав) Экспорт - Если ТипЗнч(ВладелецПрав) <> Тип("СправочникСсылка.ПапкиФайлов") Тогда - Возврат Истина; + Если Не ЭтоПапкаФайлов(ВладелецПрав) Тогда + Возврат Истина; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда @@ -3812,7 +4020,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ПрисоединенныйФайл); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); @@ -3829,9 +4036,8 @@ ФайлОбъект.Записать(); ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -3963,37 +4169,6 @@ КонецФункции - -// Возвращает количество занятых файлов у переданного пользователя. -// -// Параметры: -// Редактирует - СправочникСсылка.Пользователи - ссылка на пользователя, занявшего файл. -// -// Возвращаемое значение: -// Число - число занятых файлов. -// -Функция КоличествоЗанятыхФайлов(Пользователь) - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | СведенияОФайлах.Файл - |ИЗ - | РегистрСведений.СведенияОФайлах КАК СведенияОФайлах - |ГДЕ - | СведенияОФайлах.Редактирует <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - | И СведенияОФайлах.Редактирует = &Пользователь"; - - Запрос.УстановитьПараметр("Пользователь", Пользователь); - - Результат = Запрос.Выполнить().Выгрузить(); - - Возврат Результат.Количество(); - -КонецФункции - // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: @@ -4044,7 +4219,7 @@ // Заменяет двоичные данные файла в ИБ на данные во временном хранилище. Процедура ОбновитьДвоичныеДанныеФайлаНаСервере(Знач ПрисоединенныйФайл, Знач АдресФайлаВоВременномХранилищеДвоичныеДанные, - Знач РеквизитыЗначения = Неопределено) Экспорт + Знач РеквизитыЗначения = Неопределено) УстановитьПривилегированныйРежим(Истина); ЭтоСсылка = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)); @@ -4054,7 +4229,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ПрисоединенныйФайл); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); @@ -4106,7 +4280,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.РегистрыСведений.ДвоичныеДанныеФайлов.ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Файл", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); @@ -4141,7 +4314,7 @@ УдалитьФайлы(ПолныйПуть); СведенияОФайле = ДобавитьФайлВТом(ДвоичныеДанные, ФайлОбъект.ДатаМодификацииУниверсальная, - ФайлОбъект.Наименование, ФайлОбъект.Расширение,, ФайлОбъект.Зашифрован); + ФайлОбъект.Наименование, ФайлОбъект.Расширение,, ФайлОбъект.Зашифрован); ФайлОбъект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; ФайлОбъект.Том = СведенияОФайле.Том; ФайлОбъект.Размер = ДвоичныеДанные.Размер(); @@ -4160,6 +4333,551 @@ КонецПроцедуры +// Создает версию сохраняемого файла для сохранения в ИБ. +// +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - файл, для которого создается новая версия. +// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". +// +// Возвращаемое значение: +// СправочникСсылка.ВерсииФайлов - созданная версия. +// +Функция СоздатьВерсию(ФайлСсылка, СведенияОФайле) Экспорт + + ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, "Ссылка", Истина); + Если ЕстьПраваНаОбъект = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ХранилищеФайла = Неопределено; + + УстановитьПривилегированныйРежим(Истина); + + Если Не ЗначениеЗаполнено(СведенияОФайле.ВремяИзмененияУниверсальное) + Или СведенияОФайле.ВремяИзмененияУниверсальное > ТекущаяУниверсальнаяДата() Тогда + + СведенияОФайле.ВремяИзмененияУниверсальное = ТекущаяУниверсальнаяДата(); + КонецЕсли; + + Если Не ЗначениеЗаполнено(СведенияОФайле.ВремяИзменения) + Или УниверсальноеВремя(СведенияОФайле.ВремяИзменения) > СведенияОФайле.ВремяИзмененияУниверсальное Тогда + + СведенияОФайле.ВремяИзменения = ТекущаяДатаСеанса(); + КонецЕсли; + + РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); + + Версия = Справочники.ВерсииФайлов.СоздатьЭлемент(); + + Если СведенияОФайле.НоваяВерсияНомерВерсии = Неопределено Тогда + Версия.НомерВерсии = НайтиМаксимальныйНомерВерсии(ФайлСсылка) + 1; + Иначе + Версия.НомерВерсии = СведенияОФайле.НоваяВерсияНомерВерсии; + КонецЕсли; + + Версия.Владелец = ФайлСсылка; + Версия.ДатаМодификацииУниверсальная = СведенияОФайле.ВремяИзмененияУниверсальное; + Версия.ДатаМодификацииФайла = СведенияОФайле.ВремяИзменения; + + Версия.Комментарий = СведенияОФайле.НоваяВерсияКомментарий; + + Если СведенияОФайле.НоваяВерсияАвтор = Неопределено Тогда + Версия.Автор = Пользователи.ТекущийПользователь(); + Иначе + Версия.Автор = СведенияОФайле.НоваяВерсияАвтор; + КонецЕсли; + + Если СведенияОФайле.НоваяВерсияДатаСоздания = Неопределено Тогда + Версия.ДатаСоздания = ТекущаяДатаСеанса(); + Иначе + Версия.ДатаСоздания = СведенияОФайле.НоваяВерсияДатаСоздания; + КонецЕсли; + + Версия.ПолноеНаименование = СведенияОФайле.ИмяБезРасширения; + Версия.Размер = СведенияОФайле.Размер; + Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки); + + ТипХраненияФайлов = ТипХраненияФайлов(); + Версия.ТипХраненияФайла = ТипХраненияФайлов; + + Если СведенияОФайле.СсылкаНаВерсиюИсточник <> Неопределено Тогда // создание Файла из шаблона + + ТипХраненияФайловШаблона = СведенияОФайле.СсылкаНаВерсиюИсточник.ТипХраненияФайла; + + Если ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + // И шаблон, и новый Файл - в базе. + // При создании Файла из шаблона хранилище значения копируется напрямую. + ДвоичныеДанные = СведенияОФайле.АдресВременногоХранилищаФайла.Получить(); + + ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + // И шаблон, и новый Файл - на диске - просто копируем файл. + + Если Не СведенияОФайле.СсылкаНаВерсиюИсточник.Том.Пустая() Тогда + ПолныйПутьФайлаШаблона = ПолныйПутьТома(СведенияОФайле.СсылкаНаВерсиюИсточник.Том) + + СведенияОФайле.СсылкаНаВерсиюИсточник.ПутьКФайлу; + + Сведения = ДобавитьФайлВТом(ПолныйПутьФайлаШаблона, СведенияОФайле.ВремяИзмененияУниверсальное, + СведенияОФайле.ИмяБезРасширения, СведенияОФайле.РасширениеБезТочки, Версия.НомерВерсии, СведенияОФайле.Зашифрован); + Версия.Том = Сведения.Том; + Версия.ПутьКФайлу = Сведения.ПутьКФайлу; + КонецЕсли; + + ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + // Шаблон в базе, новый Файл - на диске. + // В этом случае в АдресВременногоХранилищаФайла находится ХранилищеЗначения с файлом. + Сведения = ДобавитьФайлВТом(СведенияОФайле.АдресВременногоХранилищаФайла.Получить(), + СведенияОФайле.ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, СведенияОФайле.РасширениеБезТочки, + Версия.НомерВерсии, СведенияОФайле.Зашифрован); + Версия.Том = Сведения.Том; + Версия.ПутьКФайлу = Сведения.ПутьКФайлу; + + ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + // Шаблон на диске, новый Файл - в базе. + Если Не СведенияОФайле.СсылкаНаВерсиюИсточник.Том.Пустая() Тогда + ПолныйПутьФайлаШаблона = ПолныйПутьТома(СведенияОФайле.СсылкаНаВерсиюИсточник.Том) + СведенияОФайле.СсылкаНаВерсиюИсточник.ПутьКФайлу; + ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаШаблона); + КонецЕсли; + + КонецЕсли; + Иначе // Создание объекта Файл на основе выбранного файла с диска. + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); + + Если Версия.Размер = 0 Тогда + Версия.Размер = ДвоичныеДанные.Размер(); + РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); + КонецЕсли; + + Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + Сведения = ДобавитьФайлВТом(ДвоичныеДанные, + СведенияОФайле.ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, СведенияОФайле.РасширениеБезТочки, + Версия.НомерВерсии); + Версия.Том = Сведения.Том; + Версия.ПутьКФайлу = Сведения.ПутьКФайлу; + + КонецЕсли; + + КонецЕсли; + + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + + Если ТипЗнч(СведенияОФайле.АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда + // При создании Файла из шаблона хранилище значения копируется напрямую. + Версия.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда + Текст = ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); + Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + КонецЕсли; + + Версия.Заполнить(Неопределено); + Версия.Записать(); + + Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ДвоичныеДанные); + КонецЕсли; + + Возврат Версия.Ссылка; + +КонецФункции + +// Для справочника ВерсииФайлов переименует файл на диске, если ТипХраненияФайла = ВТомахНаДиске. +Процедура ПереименоватьФайлВерсииНаДиске(Версия, СтароеНаименование, НовоеНаименование, + УникальныйИдентификатор = Неопределено) Экспорт + + Если Версия.Том.Пустая() Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Версия)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Версия); + БлокировкаДанных.Заблокировать(); + + ВерсияОбъект = Версия.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(Версия, , УникальныйИдентификатор); + + СтарыйПолныйПуть = ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; + + ФайлНаДиске = Новый Файл(СтарыйПолныйПуть); + ПолныйПуть = ФайлНаДиске.Путь; + ИмяБезРасширения = ФайлНаДиске.ИмяБезРасширения; + Расширение = ФайлНаДиске.Расширение; + НовоеИмяБезРасширения = СтрЗаменить(ИмяБезРасширения, СтароеНаименование, НовоеНаименование); + + НовыйПолныйПуть = ПолныйПуть + НовоеИмяБезРасширения + Расширение; + ПолныйПутьКТому = ПолныйПутьТома(Версия.Том); + НовыйЧастичныйПуть = Прав(НовыйПолныйПуть, СтрДлина(НовыйПолныйПуть) - СтрДлина(ПолныйПутьКТому)); + + ПереместитьФайл(СтарыйПолныйПуть, НовыйПолныйПуть); + ВерсияОбъект.ПутьКФайлу = НовыйЧастичныйПуть; + ВерсияОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(Версия, УникальныйИдентификатор); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + РазблокироватьДанныеДляРедактирования(Версия, УникальныйИдентификатор); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Обновляет свойства файла БЕЗ учета версий - двоичные данные, текст, дату изменения, +// а также другие необязательные свойства. +// +Процедура ОбновитьФайл(ИнформацияОФайле, ПрисоединенныйФайл) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДвоичныеДанныеФайла", "ПрисоединенныйФайл", + ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); + + РеквизитыЗначения = Новый Структура; + + Если ИнформацияОФайле.Свойство("ИмяБезРасширения") И ЗначениеЗаполнено(ИнформацияОФайле.ИмяБезРасширения) Тогда + РеквизитыЗначения.Вставить("Наименование", ИнформацияОФайле.ИмяБезРасширения); + КонецЕсли; + + Если НЕ ИнформацияОФайле.Свойство("ДатаМодификацииУниверсальная") + ИЛИ НЕ ЗначениеЗаполнено(ИнформацияОФайле.ДатаМодификацииУниверсальная) + ИЛИ ИнформацияОФайле.ДатаМодификацииУниверсальная > ТекущаяУниверсальнаяДата() Тогда + + // Заполнение текущей даты в формате универсального времени. + РеквизитыЗначения.Вставить("ДатаМодификацииУниверсальная", ТекущаяУниверсальнаяДата()); + Иначе + РеквизитыЗначения.Вставить("ДатаМодификацииУниверсальная", ИнформацияОФайле.ДатаМодификацииУниверсальная); + КонецЕсли; + + Если ИнформацияОФайле.Свойство("Редактирует") Тогда + РеквизитыЗначения.Вставить("Редактирует", ИнформацияОФайле.Редактирует); + КонецЕсли; + + Если ИнформацияОФайле.Свойство("Расширение") Тогда + РеквизитыЗначения.Вставить("Расширение", ИнформацияОФайле.Расширение); + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ИнформацияОФайле.АдресФайлаВоВременномХранилище); + + РеквизитыЗначения.Вставить("СтатусИзвлеченияТекста", Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен); + ИзвлеченныйТекст = ""; + + Если ЭтоАдресВременногоХранилища(ИнформацияОФайле.АдресВременногоХранилищаТекста) Тогда + + ИзвлеченныйТекст = ПолучитьСтрокуИзВременногоХранилища(ИнформацияОФайле.АдресВременногоХранилищаТекста); + + РеквизитыЗначения.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + + ИначеЕсли НЕ ИзвлекатьТекстыФайловНаСервере() Тогда + // Тексты извлекаются сразу, а не в фоновом задании. + РеквизитыЗначения.СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); + КонецЕсли; + + РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения(ИзвлеченныйТекст)); + + ОбновитьДвоичныеДанныеФайлаНаСервере(ПрисоединенныйФайл, ДвоичныеДанные, РеквизитыЗначения); + +КонецПроцедуры + +// Обновляет или создает версию Файла и возвращает ссылку на обновленную версию (или Ложь, если файл бинарно не +// изменен). +// +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - файл, для которого создается новая версия. +// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме +// "ФайлСВерсией". +// ВерсияСсылка - СправочникСсылка.ВерсииФайлов - версия файла, которую надо обновить. +// УникальныйИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, +// в контексте которой выполняется операция. +// +// Возвращаемое значение: +// СправочникСсылка.ВерсииФайлов - созданная или измененная версия; Неопределено, если файл бинарно не был изменен. +// +Функция ОбновитьВерсиюФайла(ФайлСсылка, + СведенияОФайле, + ВерсияСсылка = Неопределено, + УникальныйИдентификаторФормы = Неопределено, + Пользователь = Неопределено) Экспорт + + ЕстьПравоСохранения = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); + ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, "Ссылка", Истина); + Если ЕстьПраваНаОбъект = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ВремяИзмененияУниверсальное = СведенияОФайле.ВремяИзмененияУниверсальное; + Если НЕ ЗначениеЗаполнено(ВремяИзмененияУниверсальное) + ИЛИ ВремяИзмененияУниверсальное > ТекущаяУниверсальнаяДата() Тогда + ВремяИзмененияУниверсальное = ТекущаяУниверсальнаяДата(); + КонецЕсли; + + ВремяИзменения = СведенияОФайле.ВремяИзменения; + Если НЕ ЗначениеЗаполнено(ВремяИзменения) + ИЛИ УниверсальноеВремя(ВремяИзменения) > ВремяИзмененияУниверсальное Тогда + ВремяИзменения = ТекущаяДатаСеанса(); + КонецЕсли; + + РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); + + ТекущаяВерсияРазмер = 0; + ДвоичныеДанные = Неопределено; + ТекущаяВерсияТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + ТекущаяВерсияТом = Неопределено; + ТекущаяВерсияПутьКФайлу = Неопределено; + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); + ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); + + ВерсияСсылкаДляСравненияРазмера = ВерсияСсылка; + Если ВерсияСсылка <> Неопределено Тогда + ВерсияСсылкаДляСравненияРазмера = ВерсияСсылка; + ИначеЕсли ВозможностьХранитьВерсии И ЗначениеЗаполнено(ФайлСсылка.ТекущаяВерсия)Тогда + ВерсияСсылкаДляСравненияРазмера = ФайлСсылка.ТекущаяВерсия; + Иначе + ВерсияСсылкаДляСравненияРазмера = ФайлСсылка; + КонецЕсли; + + КодировкаПредВерсии = ПолучитьКодировкуВерсииФайла(ВерсияСсылкаДляСравненияРазмера); + + СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВерсияСсылкаДляСравненияРазмера, + "Размер, ТипХраненияФайла, Том, ПутьКФайлу"); + ТекущаяВерсияРазмер = СтруктураРеквизитов.Размер; + ТекущаяВерсияТипХраненияФайла = СтруктураРеквизитов.ТипХраненияФайла; + ТекущаяВерсияТом = СтруктураРеквизитов.Том; + ТекущаяВерсияПутьКФайлу = СтруктураРеквизитов.ПутьКФайлу; + + ХранилищеФайла = Неопределено; + Если СведенияОФайле.Размер = ТекущаяВерсияРазмер Тогда + ДвоичныеДанныеПредыдущейВерсии = Неопределено; + + Если ТекущаяВерсияТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + Если НЕ ТекущаяВерсияТом.Пустая() Тогда + ПолныйПуть = ПолныйПутьТома(ТекущаяВерсияТом) + ТекущаяВерсияПутьКФайлу; + ДвоичныеДанныеПредыдущейВерсии = Новый ДвоичныеДанные(ПолныйПуть); + КонецЕсли; + Иначе + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылкаДляСравненияРазмера); + ДвоичныеДанныеПредыдущейВерсии = ХранилищеФайла.Получить(); + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); + + Если ДвоичныеДанныеПредыдущейВерсии = ДвоичныеДанные Тогда + Возврат Неопределено; // Файл бинарно не изменен - вернем Ложь. + КонецЕсли; + КонецЕсли; + + СтарыйТипХранения = Неопределено; + ВерсияЗаблокирована = Ложь; + Версия = Неопределено; + + Если СведенияОФайле.ХранитьВерсии Тогда + ЗаголовокОшибки = НСтр("ru = 'Ошибка при записи новой версии присоединенных файлов.'"); + ОкончаниеОшибки = НСтр("ru = 'В этом случае запись версии файла невозможна.'"); + + ИмяСправочникаХранилищаВерсийФайлов = ИмяСправочникаХраненияВерсийФайлов( + ТипЗнч(ФайлСсылка.ВладелецФайла), "", ЗаголовокОшибки, ОкончаниеОшибки); + + Версия = Справочники[ИмяСправочникаХранилищаВерсийФайлов].СоздатьЭлемент(); + Версия.РодительскаяВерсия = ФайлСсылка.ТекущаяВерсия; + Версия.НомерВерсии = НайтиМаксимальныйНомерВерсии(ФайлСсылка) + 1; + Иначе + + Если ВерсияСсылка = Неопределено Тогда + Версия = ФайлСсылка.ТекущаяВерсия.ПолучитьОбъект(); + Иначе + Версия = ВерсияСсылка.ПолучитьОбъект(); + КонецЕсли; + + ЗаблокироватьДанныеДляРедактирования(Версия.Ссылка, , УникальныйИдентификаторФормы); + ВерсияЗаблокирована = Истина; + + // Удалим файл с диска - мы заместим его новым. + Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + Если НЕ Версия.Том.Пустая() Тогда + ПолныйПуть = ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; + ФайлНаДиске = Новый Файл(ПолныйПуть); + Если ФайлНаДиске.Существует() Тогда + ФайлНаДиске.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ПолныйПуть); + КонецЕсли; + ПутьСПодкаталогом = ФайлНаДиске.Путь; + МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, "*.*"); + Если МассивФайловВКаталоге.Количество() = 0 Тогда + УдалитьФайлы(ПутьСПодкаталогом); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Версия.Владелец = ФайлСсылка; + Если Пользователь = Неопределено Тогда + Версия.Автор = Пользователи.ТекущийПользователь(); + Иначе + Версия.Автор = Пользователь; + КонецЕсли; + Версия.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; + Версия.ДатаМодификацииФайла = ВремяИзменения; + Версия.ДатаСоздания = ТекущаяДатаСеанса(); + Версия.Размер = СведенияОФайле.Размер; + Версия.ПолноеНаименование = СведенияОФайле.ИмяБезРасширения; + Версия.Наименование = СведенияОФайле.ИмяБезРасширения; + Версия.Комментарий = СведенияОФайле.Комментарий; + Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки); + + ТипХраненияФайлов = ТипХраненияФайлов(); + Версия.ТипХраненияФайла = ТипХраненияФайлов; + + Если ДвоичныеДанные = Неопределено Тогда + ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); + КонецЕсли; + + Если Версия.Размер = 0 Тогда + Версия.Размер = ДвоичныеДанные.Размер(); + РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); + КонецЕсли; + + Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + // очистим поля + Версия.ПутьКФайлу = ""; + Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + Иначе // хранение на диске + + ФайлЗашифрован = Ложь; + Если СведенияОФайле.Зашифрован <> Неопределено Тогда + ФайлЗашифрован = СведенияОФайле.Зашифрован; + КонецЕсли; + + Сведения = ДобавитьФайлВТом(ДвоичныеДанные, + ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, Версия.Расширение, + Версия.НомерВерсии, ФайлЗашифрован); + Версия.Том = Сведения.Том; + Версия.ПутьКФайлу = Сведения.ПутьКФайлу; + + КонецЕсли; + + Если СведенияОФайле.АдресВременногоХранилищаТекста <> Неопределено Тогда + Если ИзвлекатьТекстыФайловНаСервере() Тогда + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + Иначе + Текст = ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); + Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + КонецЕсли; + Иначе + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + КонецЕсли; + + Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда + Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; + КонецЕсли; + + Версия.Заполнить(Неопределено); + Версия.Записать(); + + Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ДвоичныеДанные); + КонецЕсли; + + Если ВерсияЗаблокирована Тогда + РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификаторФормы); + КонецЕсли; + + РаботаСФайламиСлужебныйВызовСервера.ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии); + + Если ЕстьПравоСохранения Тогда + НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(ФайлСсылка); + ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла); + КонецЕсли; + + Возврат Версия.Ссылка; + +КонецФункции + +// Подставляет ссылку на версию в карточку Файла. +// +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. +// Версия - СправочникСсылка.ВерсииФайлов - версия файла. +// АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с +// файлом текста или ХранилищеЗначения - непосредственно содержит двоичные +// данные с файлом текста. +// УникальныйИдентификатор - уникальный идентификатор формы. +// +Процедура ОбновитьВерсиюВФайле(ФайлСсылка, + Версия, + Знач АдресВременногоХранилищаТекста, + УникальныйИдентификатор = Неопределено) Экспорт + + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); + БлокировкаДанных.Заблокировать(); + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + + ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); + + ФайлОбъект.ТекущаяВерсия = Версия.Ссылка; + + Если ТипЗнч(АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда + // При создании Файла из шаблона хранилище значения копируется напрямую. + ФайлОбъект.ТекстХранилище = АдресВременногоХранилищаТекста; + Иначе + Текст = ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + КонецЕсли; + + ФайлОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Находит максимальный номер версии для данного объекта Файл. Если нет версий - то 0. +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - ссылка на файл. +// +// Возвращаемое значение: +// Число - максимальный номер версии. +// +Функция НайтиМаксимальныйНомерВерсии(ФайлСсылка) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(МАКСИМУМ(Версии.НомерВерсии), 0) КАК МаксимальныйНомер + |ИЗ + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.Владелец = &Файл"; + + Запрос.Параметры.Вставить("Файл", ФайлСсылка); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + + Если Выборка.МаксимальныйНомер = Null Тогда + Возврат 0; + КонецЕсли; + + Возврат Число(Выборка.МаксимальныйНомер); + КонецЕсли; + + Возврат 0; +КонецФункции + // Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент // справочника хранимого файла. // @@ -4193,6 +4911,7 @@ ТекущийПользователь = Пользователи.АвторизованныйПользователь(); Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Параметры.ЗначениеКопирования); Если Параметры.РежимСоздания = "ИзШаблона" Тогда ОбъектЗначение = ЗаполнитьДанныеФайлаПоШаблону(Контекст, ОбъектЗначение, Параметры, НастраиватьОбъектФормы) Иначе @@ -4204,7 +4923,9 @@ Иначе ОбъектЗначение = Параметры.Ключ.ПолучитьОбъект(); КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ОбъектЗначение, Контекст); КонецЕсли; + ОбъектЗначение.Заполнить(Неопределено); Контекст.ИмяСправочника = ОбъектЗначение.Метаданные().Имя; @@ -4285,7 +5006,7 @@ Функция ЗаполнитьДанныеФайлаПоШаблону(Контекст, ОбъектЗначение, Параметры, НастраиватьОбъектФормы) - КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); + КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); Контекст.ЗначениеКопирования = Параметры.ЗначениеКопирования; ОбъектЗначение = Справочники[Параметры.ИмяСправочникаХранилищаФайлов].СоздатьЭлемент(); @@ -4303,14 +5024,16 @@ |ВладелецФайла, |ТекстХранилище, |ПометкаУдаления"); - ОбъектЗначение.ВладелецФайла = Параметры.ВладелецФайла; - ДатаСоздания = ТекущаяДатаСеанса(); - ОбъектЗначение.ДатаСоздания = ДатаСоздания; - ОбъектЗначение.ДатаМодификацииУниверсальная = ДатаСоздания; - - ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); + + ОбъектЗначение.ВладелецФайла = Параметры.ВладелецФайла; + ДатаСоздания = ТекущаяДатаСеанса(); + ОбъектЗначение.ДатаСоздания = ДатаСоздания; + ОбъектЗначение.ДатаМодификацииУниверсальная = УниверсальноеВремя(ДатаСоздания); + ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); + ОбъектЗначение.ТипХраненияФайла = ТипХраненияФайлов(); Возврат ОбъектЗначение; + КонецФункции Функция ЗаполнитьДанныеФайлаИзКопии(Контекст, ОбъектЗначение, Параметры, НастраиватьОбъектФормы) @@ -4327,7 +5050,8 @@ КонецЕсли; ЗаполнитьЗначенияСвойств(ОбъектЗначение,КопируемыйОбъект, , ИсключаемыеРеквизиты); - ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); + ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); + ОбъектЗначение.ТипХраненияФайла = ТипХраненияФайлов(); Возврат ОбъектЗначение; @@ -4374,9 +5098,7 @@ Если Не НовыйОбъект.ЭтоНовый() Тогда Контекст.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(НовыйОбъект); КонецЕсли; - МассивИсключений = Новый Массив; - МассивИсключений.Добавить("РегистрСведений.ПрисоединенныеФайлы"); - + КонецПроцедуры Процедура ЗаполнитьСписокШифрования(Контекст, Знач Источник = Неопределено) Экспорт @@ -4427,34 +5149,22 @@ Контекст.ЭлектронныеПодписи.Очистить(); - Если Источник.ПодписанЭП Тогда + ЭлектронныеПодписи = СписокЭлектронныхПодписей(Источник, Контекст.УникальныйИдентификатор); + + Для Каждого ЭлектроннаяПодписьФайла Из ЭлектронныеПодписи Цикл - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ЭлектронныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(Источник.Ссылка); - - Для Каждого ЭлектроннаяПодписьФайла Из ЭлектронныеПодписи Цикл - - НоваяСтрока = Контекст.ЭлектронныеПодписи.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлектроннаяПодписьФайла); - НоваяСтрока.Объект = Источник.Ссылка; - НоваяСтрока.АдресПодписи = ПоместитьВоВременноеХранилище( - ЭлектроннаяПодписьФайла.Подпись, Контекст.УникальныйИдентификатор); - - РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(НоваяСтрока); - - ДвоичныеДанныеСертификата = ЭлектроннаяПодписьФайла.Сертификат.Получить(); - Если ДвоичныеДанныеСертификата <> Неопределено Тогда - НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище( - ДвоичныеДанныеСертификата, Контекст.УникальныйИдентификатор); - КонецЕсли; - - КонецЦикла; - + НоваяСтрока = Контекст.ЭлектронныеПодписи.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлектроннаяПодписьФайла); + + РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(НоваяСтрока); + + ДвоичныеДанныеСертификата = ЭлектроннаяПодписьФайла.Сертификат.Получить(); + Если ДвоичныеДанныеСертификата <> Неопределено Тогда + НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище( + ДвоичныеДанныеСертификата, Контекст.УникальныйИдентификатор); КонецЕсли; - КонецЕсли; + КонецЦикла; ТекстЗаголовка = НСтр("ru = 'Электронные подписи'"); @@ -4466,6 +5176,65 @@ КонецПроцедуры +Функция СписокЭлектронныхПодписей(Источник, УникальныйИдентификатор) + + ЭлектронныеПодписи = Новый Массив; + + Если Источник.ПодписанЭП Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + ЭлектронныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(Источник.Ссылка); + + Для Каждого ЭлектроннаяПодписьФайла Из ЭлектронныеПодписи Цикл + + ЭлектроннаяПодписьФайла.Вставить("Объект", Источник.Ссылка); + АдресПодписи = ПоместитьВоВременноеХранилище(ЭлектроннаяПодписьФайла.Подпись, УникальныйИдентификатор); + ЭлектроннаяПодписьФайла.Вставить("АдресПодписи", АдресПодписи); + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + Возврат ЭлектронныеПодписи; + +КонецФункции + +Функция СписокПодписейДляОтправки(Источник, УникальныйИдентификатор, ИмяФайла) + + ЭлектронныеПодписи = Новый Массив; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + + ЭлектронныеПодписи = СписокЭлектронныхПодписей(Источник, УникальныйИдентификатор); + СоставИмениФайлаДанных = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайла); + + МодульЭлектроннаяПодписьСлужебныйКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйКлиентСервер"); + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + + Для Каждого ЭлектроннаяПодписьФайла Из ЭлектронныеПодписи Цикл + + ИмяФайлаПодписи = МодульЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаПодписи(СоставИмениФайлаДанных.ИмяБезРасширения, + Строка(ЭлектроннаяПодписьФайла.КомуВыданСертификат)); + ЭлектроннаяПодписьФайла.Вставить("ИмяФайла", ИмяФайлаПодписи); + + ДанныеПоСертификату = МодульЭлектроннаяПодписьСлужебный.ДанныеПоСертификату(ЭлектроннаяПодписьФайла, УникальныйИдентификатор); + ЭлектроннаяПодписьФайла.Вставить("АдресСертификата", ДанныеПоСертификату.АдресСертификата); + + ИмяФайлаСертификата = МодульЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаСертификата(СоставИмениФайлаДанных.ИмяБезРасширения, + Строка(ЭлектроннаяПодписьФайла.КомуВыданСертификат), ДанныеПоСертификату.РасширениеСертификата); + + ЭлектроннаяПодписьФайла.Вставить("ИмяФайлаСертификата", ИмяФайлаСертификата); + + КонецЦикла; + КонецЕсли; + + Возврат ЭлектронныеПодписи; + +КонецФункции + Процедура УстановитьКнопкиИзмененияНевидимыми(Элементы) ИменаКоманд = ПолучитьИменаКомандИзмененияОбъекта(); @@ -4513,16 +5282,52 @@ Функция НастройкиФайлов() Экспорт НастройкиФайлов = Новый Структура; - НастройкиФайлов.Вставить("НеОчищатьФайлы", Новый Массив); - НастройкиФайлов.Вставить("НеСинхронизироватьФайлы", Новый Массив); - НастройкиФайлов.Вставить("НеВыводитьВИнтерфейс", Новый Массив); - НастройкиФайлов.Вставить("НеСоздаватьФайлыПоШаблону", Новый Массив); - НастройкиФайлов.Вставить("ФайлыБезПапок", Новый Массив); + НастройкиФайлов.Вставить("НеОчищатьФайлы", Новый Массив); + НастройкиФайлов.Вставить("НеСинхронизироватьФайлы", Новый Массив); + НастройкиФайлов.Вставить("НеВыводитьВИнтерфейс", Новый Массив); + НастройкиФайлов.Вставить("НеСоздаватьФайлыПоШаблону", Новый Массив); + НастройкиФайлов.Вставить("ФайлыБезПапок", Новый Массив); + + ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(НастройкиФайлов.НеСинхронизироватьФайлы); + РаботаСФайламиПереопределяемый.ПриОпределенииНастроек(НастройкиФайлов); Возврат НастройкиФайлов; КонецФункции +Процедура СформироватьСписокФайловДляОтправкиПоПочте(Результат, ФайлВложение, ИдентификаторФормы) Экспорт + + ДанныеФайлаИДвоичныеДанные = РаботаСФайлами.ДанныеФайла(ФайлВложение, ИдентификаторФормы); + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайлаИДвоичныеДанные.Наименование, ДанныеФайлаИДвоичныеДанные.Расширение); + ОписаниеФайла = ОписаниеФайла(ИмяФайла, ДанныеФайлаИДвоичныеДанные.СсылкаНаДвоичныеДанныеФайла); + Результат.Добавить(ОписаниеФайла); + + Если ФайлВложение.ПодписанЭП Тогда + СписокПодписей = СписокПодписейДляОтправки(ФайлВложение, ИдентификаторФормы, ИмяФайла); + Для каждого ЭлектроннаяПодписьФайла Из СписокПодписей Цикл + ОписаниеФайла = ОписаниеФайла(ЭлектроннаяПодписьФайла.ИмяФайла, ЭлектроннаяПодписьФайла.АдресПодписи); + Результат.Добавить(ОписаниеФайла); + + Если ЗначениеЗаполнено(ЭлектроннаяПодписьФайла.АдресСертификата) Тогда + ОписаниеФайла = ОписаниеФайла(ЭлектроннаяПодписьФайла.ИмяФайлаСертификата, ЭлектроннаяПодписьФайла.АдресСертификата); + Результат.Добавить(ОписаниеФайла); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Функция ОписаниеФайла(ИмяФайла, АдресВоВременномХранилище) + + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Представление", ИмяФайла); + ОписаниеФайла.Вставить("АдресВоВременномХранилище", АдресВоВременномХранилище); + + Возврат ОписаниеФайла; + +КонецФункции + + ///////////////////////////////////////////////////////////////////////////////////// // Очистка ненужных файлов. @@ -4674,13 +5479,9 @@ //////////////////////////////////////////////////////////////////////////////// // Синхронизация файлов -Функция ВозможностьСозданияПапки(ОбъектВладелец) +Функция ЭтоПапкаФайлов(ОбъектВладелец) Экспорт - Если ОбъектВладелец = Неопределено Тогда - Возврат Ложь; - Иначе - Возврат ТипЗнч(ОбъектВладелец) = Тип("СправочникСсылка.ПапкиФайлов"); - КонецЕсли; + Возврат ТипЗнч(ОбъектВладелец) = Тип("СправочникСсылка.ПапкиФайлов"); КонецФункции @@ -4711,11 +5512,7 @@ Функция ПриОпределенииОбъектовИсключенияСинхронизацииФайлов() Экспорт - НастройкиФайлов = НастройкиФайлов(); - - РаботаСФайламиПереопределяемый.ПриОпределенииНастроек(НастройкиФайлов()); - - Возврат НастройкиФайлов.НеСинхронизироватьФайлы; + Возврат НастройкиФайлов().НеСинхронизироватьФайлы; КонецФункции @@ -4732,6 +5529,7 @@ СправочникФайлов = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(НастройкаСинхронизации.ТипВладельцаФайла); ВозможностьСоздаватьГруппы = СправочникФайлов.Иерархический; + Если ТипЗнч(ВладелецФайла) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда СправочникПапок = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(НастройкаСинхронизации.ИдентификаторВладельца); Иначе @@ -4744,6 +5542,7 @@ |ОБЪЕДИНИТЬ ВСЕ |"; КонецЕсли; + ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ | СправочникПапок.Ссылка,"; @@ -4751,7 +5550,9 @@ ТекстЗапроса = ТекстЗапроса + " | СправочникФайлов.Ссылка КАК ФайлСсылка,"; + Если ВозможностьСоздаватьГруппы Тогда + ТекстЗапроса = ТекстЗапроса + " | ВЫБОР Когда СправочникФайлов.ЭтоГруппа Тогда | СправочникФайлов.Наименование @@ -4762,13 +5563,21 @@ | СправочникФайлов.ВладелецФайла КАК Родитель, | ЛОЖЬ КАК ЭтоПапка,"; + ОтборПоПапкам = "СправочникФайлов.ЭтоГруппа + | ИЛИ (НЕ СправочникФайлов.ЭтоГруппа И СправочникФайлов.ПодписанЭП = ЛОЖЬ И СправочникФайлов.Зашифрован = ЛОЖЬ) "; + Иначе + ТекстЗапроса = ТекстЗапроса + " | СправочникФайлов.Наименование + ""."" + СправочникФайлов.Расширение КАК Наименование, | СправочникФайлов.ПометкаУдаления КАК ПометкаУдаления, | СправочникФайлов.ВладелецФайла КАК Родитель, | ЛОЖЬ КАК ЭтоПапка,"; + + ОтборПоПапкам = " СправочникФайлов.ПодписанЭП = ЛОЖЬ И СправочникФайлов.Зашифрован = ЛОЖЬ "; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " | ИСТИНА КАК ЕстьВБазе, | ЛОЖЬ КАК ЕстьНаСервере, @@ -4776,6 +5585,7 @@ | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Href, """") КАК Href, | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Etag, """") КАК Etag, | ЛОЖЬ КАК Обработан, + | ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаСинхронизации, | ВЫРАЗИТЬ("""" КАК СТРОКА(36)) КАК UID1C, | """" КАК ToHref, | """" КАК ToEtag, @@ -4784,7 +5594,7 @@ | ЛОЖЬ КАК ИзмененНаСервере, | НЕОПРЕДЕЛЕНО КАК Уровень, | """" КАК РодительСортировка, - | " + ?(ЕстьВозможностьХранитьВерсии,"ИСТИНА", "ЛОЖЬ") + " КАК ЭтоФайл + | " + ?(ЕстьВозможностьХранитьВерсии, "ИСТИНА", "ЛОЖЬ") + " КАК ЭтоФайл |ИЗ | Справочник." + СправочникФайлов.Имя + " КАК СправочникФайлов | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом @@ -4792,12 +5602,13 @@ | ЛЕВОЕ СОЕДИНЕНИЕ " + ПредставлениеТипаВладельца+ "." + СправочникПапок.Имя + " КАК СправочникПапок | ПО (СправочникФайлов.ВладелецФайла = СправочникПапок.Ссылка) |ГДЕ - | ТИПЗНАЧЕНИЯ(СправочникФайлов.ВладелецФайла) = &ТипВладельца"; + | " + ОтборПоПапкам + " И ТИПЗНАЧЕНИЯ(СправочникФайлов.ВладелецФайла) = &ТипВладельца"; Если МассивИсключений.Количество() > 0 Тогда ТекстЗапроса = ТекстЗапроса + " | И НЕ СправочникПапок.Ссылка В ИЕРАРХИИ (&МассивИсключений)"; КонецЕсли; + Если ЭлементИсключение <> Неопределено Тогда ТекстЗапроса = ТекстЗапроса + " | И СправочникПапок.Ссылка В ИЕРАРХИИ (&ЭлементИсключение)"; @@ -4816,6 +5627,7 @@ | " + ?(ПредставлениеТипаВладельца = "Документ", "СправочникПапок.Представление", "СправочникПапок.Наименование") + ", | СправочникПапок.ПометкаУдаления,"; + Если ОбщегоНазначения.ЭтоСправочник(СправочникПапок) И СправочникПапок.Иерархический Тогда ТекстЗапроса = ТекстЗапроса + " | ВЫБОР @@ -4826,14 +5638,16 @@ Иначе ТекстЗапроса = ТекстЗапроса + "Неопределено,"; КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " | ИСТИНА, | ИСТИНА, | ЛОЖЬ, - | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Href, """"), | """", | ЛОЖЬ, + | ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0), | """", | """", | """", @@ -4842,7 +5656,7 @@ | ЛОЖЬ, | НЕОПРЕДЕЛЕНО, | """", - | " + ?(ЕстьВозможностьХранитьВерсии,"ИСТИНА", "ЛОЖЬ") + " + | " + ?(ЕстьВозможностьХранитьВерсии, "ИСТИНА", "ЛОЖЬ") + " |ИЗ | " + ПредставлениеТипаВладельца + "." + СправочникПапок.Имя + " КАК СправочникПапок | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом @@ -4855,17 +5669,18 @@ ТекстЗапроса = ТекстЗапроса + " | И НЕ СправочникПапок.Ссылка В ИЕРАРХИИ (&МассивИсключений)"; КонецЕсли; + Если ЭлементИсключение <> Неопределено Тогда ТекстЗапроса = ТекстЗапроса + " | И СправочникПапок.Ссылка В ИЕРАРХИИ (&ЭлементИсключение)"; - + КонецЕсли; Возврат ТекстЗапроса; КонецФункции -Функция ОбъектЯвляетсяФайлом(ОбъектВладелец) +Функция ЭтоВладелецФайлов(ОбъектВладелец) МассивТиповФайлов = Метаданные.ОпределяемыеТипы.ВладелецПрисоединенныхФайлов.Тип.Типы(); Возврат МассивТиповФайлов.Найти(ТипЗнч(ОбъектВладелец)) <> Неопределено; @@ -4895,15 +5710,27 @@ КонецПроцедуры // Проверяет, была ли ошибка при выполнении HTTP запроса, и вызывает соответствующее исключение. -Процедура ПроверитьИсключениеHTTP1С(Ответ, АдресСервера) +Функция ПроверитьИсключениеHTTP1С(Ответ, АдресСервера) + Результат = Новый Структура("Успешно, ТекстОшибки"); + Если (Ответ.КодСостояния >= 400) И (Ответ.КодСостояния <= 599) Тогда - ШаблонОшибки = НСтр("ru = 'Ошибка HTTP 1С : %1 в %2'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Ответ.КодСостояния, РаскодироватьСтроку(АдресСервера, СпособКодированияСтроки.URLВКодировкеURL)); + + ШаблонОшибки = НСтр("ru = 'Не удалось синхронизировать файл по адресу %2, т.к. сервер вернул HTTP код: %1.'"); + + Результат.Успешно = Ложь; + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Ответ.КодСостояния, РаскодироватьСтроку(АдресСервера, СпособКодированияСтроки.URLВКодировкеURL)); + + Возврат Результат; + КонецЕсли; -КонецПроцедуры + + Результат.Успешно = Истина; + Возврат Результат; + +КонецФункции // Выполняет метод протокола webdav. -Процедура ВыполнитьМетодWebdav(ИмяМетода, Href, СоответствиеЗаголовков, СтруктураОбмена, XMLЗапрос="", ТекстПротокола = Неопределено) +Функция ВыполнитьМетодWebdav(ИмяМетода, Href, СоответствиеЗаголовков, СтруктураОбмена, XMLЗапрос="", ТекстПротокола = Неопределено) СтруктураHref = СтруктураURIРаскодированная(Href); @@ -4913,66 +5740,72 @@ Если ЗначениеЗаполнено(XMLЗапрос) Тогда HTTPЗапросWebdav.УстановитьТелоИзСтроки(XMLЗапрос); - КонецЕсли; + КонецЕсли; Если ТекстПротокола<>Неопределено Тогда ТекстПротокола = ТекстПротокола + ?(ПустаяСтрока(ТекстПротокола), "", Символы.ПС) + ИмяМетода + " " + Href + Символы.ПС + Символы.ПС + XMLЗапрос + Символы.ПС; КонецЕсли; - СтруктураОбмена.Ответ = HTTP.ВызватьHTTPМетод(ИмяМетода,HTTPЗапросWebdav); + СтруктураОбмена.Ответ = HTTP.ВызватьHTTPМетод(ИмяМетода, HTTPЗапросWebdav); - Если ТекстПротокола<>Неопределено Тогда + Если ТекстПротокола <> Неопределено Тогда ТекстПротокола = ТекстПротокола + ?(ПустаяСтрока(ТекстПротокола), "", Символы.ПС) + "HTTP RESPONSE " + СтруктураОбмена.Ответ.КодСостояния + Символы.ПС + Символы.ПС; Для каждого ЗаголовокОтвета Из СтруктураОбмена.Ответ.Заголовки Цикл - ТекстПротокола = ТекстПротокола+ЗаголовокОтвета.Ключ+": " + ЗаголовокОтвета.Значение + Символы.ПС; + ТекстПротокола = ТекстПротокола+ЗаголовокОтвета.Ключ + ": " + ЗаголовокОтвета.Значение + Символы.ПС; КонецЦикла; - ТекстПротокола = ТекстПротокола+Символы.ПС+СтруктураОбмена.Ответ.ПолучитьТелоКакСтроку() + Символы.ПС; + ТекстПротокола = ТекстПротокола + Символы.ПС + СтруктураОбмена.Ответ.ПолучитьТелоКакСтроку() + Символы.ПС; КонецЕсли; - ПроверитьИсключениеHTTP1С(СтруктураОбмена.Ответ,Href); + Возврат ПроверитьИсключениеHTTP1С(СтруктураОбмена.Ответ, Href); -КонецПроцедуры +КонецФункции // Обновляет уникальный служебный реквизит файла на сервере webdav. -Процедура ОбновитьUID1CФайла(Href, UID1C, ПараметрыСинхронизации) - - ЗаголовкиHTTP = Новый Соответствие; - ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; +Функция ОбновитьUID1CФайла(Href, UID1C, ПараметрыСинхронизации) + + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; ЗаголовкиHTTP["Content-type"] = "text/xml"; - ЗаголовкиHTTP["Accept"] = "text/xml"; + ЗаголовкиHTTP["Accept"] = "text/xml"; - ВыполнитьМетодWebdav("PROPPATCH",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, - " - | - | - | "+UID1C+" - | - |"); + XMLЗапрос = " + | + | + | %1 + | + |"; + XMLЗапрос = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(XMLЗапрос, UID1C); -КонецПроцедуры + Возврат ВыполнитьМетодWebdav("PROPPATCH", Href, ЗаголовкиHTTP, ПараметрыСинхронизации, XMLЗапрос); + +КонецФункции // Считывает уникальный служебный реквизит файла на сервере webdav. -Функция ПолучитьUID1C(Href,ПараметрыСинхронизации) +Функция ПолучитьUID1C(Href, ПараметрыСинхронизации) - ЗаголовкиHTTP = Новый Соответствие; - ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; ЗаголовкиHTTP["Content-type"] = "text/xml"; - ЗаголовкиHTTP["Accept"] = "text/xml"; - ЗаголовкиHTTP["Depth"] = "0"; + ЗаголовкиHTTP["Accept"] = "text/xml"; + ЗаголовкиHTTP["Depth"] = "0"; - ВыполнитьМетодWebdav("PROPFIND",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, + Результат = ВыполнитьМетодWebdav("PROPFIND",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, " | | |"); - - КонтекстXml = ОпределитьКонтекстXML(ПараметрыСинхронизации.Ответ.ПолучитьТелоКакСтроку()); - НайденныеEtag = ВычислитьXPath("//*[local-name()='propstat'][contains(./*[local-name()='status'],'200 OK')]/*[local-name()='prop']/*[local-name()='UID1C']",КонтекстXml).ПолучитьСледующий(); - Если НайденныеEtag<>Неопределено Тогда - Возврат НайденныеEtag.ТекстовоеСодержимое; + Если Результат.Успешно Тогда + КонтекстXml = ОпределитьКонтекстXML(ПараметрыСинхронизации.Ответ.ПолучитьТелоКакСтроку()); + + НайденныеEtag = ВычислитьXPath("//*[local-name()='propstat'][contains(./*[local-name()='status'],'200 OK')]/*[local-name()='prop']/*[local-name()='UID1C']",КонтекстXml).ПолучитьСледующий(); + Если НайденныеEtag <> Неопределено Тогда + Возврат НайденныеEtag.ТекстовоеСодержимое; + КонецЕсли; + Иначе + ЗаписатьВЖурналСобытийСинхронизацииФайлов(Результат.ТекстОшибки, ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); КонецЕсли; Возврат ""; @@ -4981,68 +5814,66 @@ // Проверяет, поддерживает ли сервер webdav пользовательские свойства для файла. Функция ПроверитьВозможностьUID1C(Href, UID1C, ПараметрыСинхронизации) - - Попытка - - ОбновитьUID1CФайла(Href, UID1C, ПараметрыСинхронизации); - Возврат ЗначениеЗаполнено(ПолучитьUID1C(Href, ПараметрыСинхронизации)); - - Исключение - - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации); - - КонецПопытки; - Возврат Ложь; - + ОбновитьUID1CФайла(Href, UID1C, ПараметрыСинхронизации); + Возврат ЗначениеЗаполнено(ПолучитьUID1C(Href, ПараметрыСинхронизации)); + КонецФункции // Выполняет MCKOL на сервере webdav. -Процедура ВызватьМетодMKCOL(Href, ПараметрыСинхронизации) +Функция ВызватьМетодMKCOL(Href, ПараметрыСинхронизации) - ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; - ВыполнитьМетодWebdav("MKCOL",Href,ЗаголовкиHTTP,ПараметрыСинхронизации); + Возврат ВыполнитьМетодWebdav("MKCOL", Href, ЗаголовкиHTTP, ПараметрыСинхронизации); -КонецПроцедуры // ВызватьМетодMKCOL() +КонецФункции // Выполняет DELETE на сервере webdav. -Процедура ВызватьМетодDELETE(Href, ПараметрыСинхронизации) +Функция ВызватьМетодDELETE(Href, ПараметрыСинхронизации) HrefБезСлеша = ЗакончитьБезСлеша(Href); - ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; - ВыполнитьМетодWebdav("DELETE", HrefБезСлеша, ЗаголовкиHTTP, ПараметрыСинхронизации); + Возврат ВыполнитьМетодWebdav("DELETE", HrefБезСлеша, ЗаголовкиHTTP, ПараметрыСинхронизации); -КонецПроцедуры +КонецФункции // Получает Etag файла на сервере. -Функция ПолучитьEtag(Href,ПараметрыСинхронизации) +Функция ПолучитьEtag(Href, ПараметрыСинхронизации) - ЗаголовкиHTTP = Новый Соответствие; - ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; ЗаголовкиHTTP["Content-type"] = "text/xml"; - ЗаголовкиHTTP["Accept"] = "text/xml"; - ЗаголовкиHTTP["Depth"] = "0"; + ЗаголовкиHTTP["Accept"] = "text/xml"; + ЗаголовкиHTTP["Depth"] = "0"; - ВыполнитьМетодWebdav("PROPFIND",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, + Результат = ВыполнитьМетодWebdav("PROPFIND",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, " | | |"); - - КонтекстXml = ОпределитьКонтекстXML(ПараметрыСинхронизации.Ответ.ПолучитьТелоКакСтроку()); - НайденныеEtag = ВычислитьXPath("//*[local-name()='propstat'][contains(./*[local-name()='status'],'200 OK')]/*[local-name()='prop']/*[local-name()='getetag']",КонтекстXml).ПолучитьСледующий(); - Если НайденныеEtag<>Неопределено Тогда - Возврат НайденныеEtag.ТекстовоеСодержимое; + Если Результат.Успешно Тогда + + КонтекстXml = ОпределитьКонтекстXML(ПараметрыСинхронизации.Ответ.ПолучитьТелоКакСтроку()); + + НайденныеEtag = ВычислитьXPath("//*[local-name()='propstat'][contains(./*[local-name()='status'],'200 OK')]/*[local-name()='prop']/*[local-name()='getetag']",КонтекстXml).ПолучитьСледующий(); + + Если НайденныеEtag <> Неопределено Тогда + Возврат НайденныеEtag.ТекстовоеСодержимое; + КонецЕсли; + + Иначе + ЗаписатьВЖурналСобытийСинхронизацииФайлов(Результат.ТекстОшибки, ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); КонецЕсли; Возврат ""; + КонецФункции // Инициализирует объект HTTPСоединение. -Функция СоздатьHTTPСоединениеWebdav(СтруктураHref,ПараметрыСинхронизации) +Функция СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации) Если НЕ ЗначениеЗаполнено(СтруктураHref.Порт) Тогда HTTP = Новый HTTPСоединение( @@ -5052,7 +5883,7 @@ ПараметрыСинхронизации.Пароль, , 20, - ?(СтруктураHref.Схема="https",Новый(Тип("ЗащищенноеСоединениеOpenSSL")),Неопределено)); + ?(СтруктураHref.Схема="https", Новый(Тип("ЗащищенноеСоединениеOpenSSL")),Неопределено)); Иначе HTTP = Новый HTTPСоединение( СтруктураHref.Хост, @@ -5061,29 +5892,33 @@ ПараметрыСинхронизации.Пароль, , 20, - ?(СтруктураHref.Схема="https",Новый(Тип("ЗащищенноеСоединениеOpenSSL")),Неопределено)); + ?(СтруктураHref.Схема="https", Новый(Тип("ЗащищенноеСоединениеOpenSSL")),Неопределено)); КонецЕсли; Возврат HTTP; -КонецФункции // +КонецФункции // Вызывает метод GET на сервере webdav и возвращает адрес загруженного файла во временном хранилище. Функция ВызватьМетодGET(Href, Etag, ПараметрыСинхронизации, ДатаМодификацииФайла = Неопределено, ДлинаФайла = Неопределено) + Результат = Новый Структура("Успешно, АдресВременныхДанных, ТекстОшибки"); СтруктураHref = СтруктураURIРаскодированная(Href); - HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref,ПараметрыСинхронизации); + HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации); - ЗаголовкиHTTP = Новый Соответствие; - ЗаголовкиHTTP["User-Agent"]="1C Enterprise 8.3"; - ЗаголовкиHTTP["Accept"]="application/octet-stream"; + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP["Accept"] = "application/octet-stream"; HTTPЗапросWebdav = Новый HTTPЗапрос(СтруктураHref.ПутьНаСервере, ЗаголовкиHTTP); ПараметрыСинхронизации.Ответ = HTTP.Получить(HTTPЗапросWebdav); - ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ, Href); + Результат = ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ, Href); + Если НЕ Результат.Успешно Тогда + Возврат Результат; + КонецЕсли; ФайлСДвоичнымиДанными = ПараметрыСинхронизации.Ответ.ПолучитьТелоКакДвоичныеДанные(); @@ -5093,7 +5928,8 @@ АдресВременныхДанных = ПоместитьВоВременноеХранилище(ФайлСДвоичнымиДанными); - Возврат АдресВременныхДанных; + Результат.Вставить("АдресЗагруженногоФайла", АдресВременныхДанных); + Возврат Результат; КонецФункции @@ -5107,8 +5943,8 @@ HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref,ПараметрыСинхронизации); ЗаголовкиHTTP = Новый Соответствие; - ЗаголовкиHTTP["User-Agent"]="1C Enterprise 8.3"; - ЗаголовкиHTTP["Content-Type"]="application/octet-stream"; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP["Content-Type"] = "application/octet-stream"; HTTPЗапросWebdav = Новый HTTPЗапрос(СтруктураHref.ПутьНаСервере, ЗаголовкиHTTP); @@ -5116,102 +5952,113 @@ ПараметрыСинхронизации.Ответ = HTTP.Записать(HTTPЗапросWebdav); - ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ,Href); + ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ, Href); Возврат ПолучитьEtag(Href,ПараметрыСинхронизации); КонецФункции // Загружает файл с сервера с созданием новой версии. -Процедура ЗагрузитьФайлССервера(ПараметрыФайла, ЭтоФайл = Неопределено) +Функция ЗагрузитьФайлССервера(ПараметрыФайла, ЭтоФайл = Неопределено) - Перем АдресЗагруженногоФайла, НовыйФайл, СтруктураИмениФайла, ФайлUID1C; - - ИмяФайла = ПараметрыФайла.ИмяФайла; - Href = ПараметрыФайла.Href; - Etag = ПараметрыФайла.Etag; - ДатаМодификацииФайла = ПараметрыФайла.ДатаМодификацииФайла; - ДлинаФайла = ПараметрыФайла.ДлинаФайла; - ДляПользователя = ПараметрыФайла.ДляПользователя; - ОбъектВладелец = ПараметрыФайла.ОбъектВладелец; + ИмяФайла = ПараметрыФайла.ИмяФайла; + Href = ПараметрыФайла.Href; + Etag = ПараметрыФайла.Etag; + ДатаМодификацииФайла = ПараметрыФайла.ДатаМодификацииФайла; + ДлинаФайла = ПараметрыФайла.ДлинаФайла; + ДляПользователя = ПараметрыФайла.ДляПользователя; + ОбъектВладелец = ПараметрыФайла.ОбъектВладелец; СсылкаСуществующегоФайла = ПараметрыФайла.СсылкаСуществующегоФайла; - ПараметрыСинхронизации = ПараметрыФайла.ПараметрыСинхронизации; + ПараметрыСинхронизации = ПараметрыФайла.ПараметрыСинхронизации; + + ТекстСобытия = НСтр("ru = 'Загрузка файла с сервера: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, ИмяФайла), ПараметрыСинхронизации); - АдресЗагруженногоФайла = ВызватьМетодGET(Href, Etag, ПараметрыСинхронизации, ДатаМодификацииФайла, ДлинаФайла); + + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, ПараметрыФайла.ИмяФайла), ПараметрыСинхронизации.УчетнаяЗапись); + + РезультатЗагрузки = ВызватьМетодGET(Href, Etag, ПараметрыСинхронизации, ДатаМодификацииФайла, ДлинаФайла); Если ЭтоФайл = Неопределено Тогда - ЭтоФайл = ОбъектЯвляетсяФайлом(ПараметрыФайла.ОбъектВладелец); + ЭтоФайл = ЭтоВладелецФайлов(ПараметрыФайла.ОбъектВладелец); КонецЕсли; - Если АдресЗагруженногоФайла <> Неопределено Тогда + Если РезультатЗагрузки.Успешно И РезультатЗагрузки.АдресЗагруженногоФайла <> Неопределено Тогда - СтруктураИмениФайла = Новый Файл(ИмяФайла); + АдресЗагруженногоФайла = РезультатЗагрузки.АдресЗагруженногоФайла; + + СтруктураИмениФайла = Новый Файл(ПараметрыФайла.ИмяФайла); Если СсылкаСуществующегоФайла = Неопределено Тогда - Если ЭтоФайл Тогда - - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", ОбъектВладелец); - ПараметрыФайла.Вставить("Автор", ПараметрыСинхронизации.АвторФайлов); - ПараметрыФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение)); - ПараметрыФайла.Вставить("ВремяИзменения", МестноеВремя(ДатаМодификацииФайла,ЧасовойПоясСеанса())); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ДатаМодификацииФайла); - - НовыйФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресЗагруженногоФайла); - - ЗанятьФайлДляРедактированияСервер(НовыйФайл, ПараметрыСинхронизации.АвторФайлов); + ПараметрыДобавляемогоФайла = Новый Структура; + + Если СтрНачинаетсяС(ОбъектВладелец.Метаданные().ПолноеИмя(), "Справочник") И ОбъектВладелец.ЭтоГруппа Тогда + ПараметрыДобавляемогоФайла.Вставить("ГруппаФайлов", ОбъектВладелец); + ВладелецФайла = ОбъектВладелец.ВладелецФайла; + Иначе + ВладелецФайла = ОбъектВладелец; КонецЕсли; + ПараметрыДобавляемогоФайла.Вставить("ВладелецФайлов", ВладелецФайла); + + ПараметрыДобавляемогоФайла.Вставить("Автор", ПараметрыСинхронизации.АвторФайлов); + ПараметрыДобавляемогоФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.ИмяБезРасширения); + ПараметрыДобавляемогоФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение)); + ПараметрыДобавляемогоФайла.Вставить("ВремяИзменения", МестноеВремя(ДатаМодификацииФайла, ЧасовойПоясСеанса())); + ПараметрыДобавляемогоФайла.Вставить("ВремяИзмененияУниверсальное", ДатаМодификацииФайла); + + НовыйФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыДобавляемогоФайла, АдресЗагруженногоФайла); + + ЗанятьФайлДляРедактированияСервер(НовыйФайл, ПараметрыСинхронизации.АвторФайлов); + Иначе - Если ЭтоФайл Тогда - - ИнформацияОФайле = Новый Структура; - ИнформацияОФайле.Вставить("АдресФайлаВоВременномХранилище", АдресЗагруженногоФайла); - ИнформацияОФайле.Вставить("АдресВременногоХранилищаТекста", Неопределено); - ИнформацияОФайле.Вставить("ИмяБезРасширения", СтруктураИмениФайла.ИмяБезРасширения); - ИнформацияОФайле.Вставить("ДатаМодификацииУниверсальная", ДатаМодификацииФайла); - ИнформацияОФайле.Вставить("Расширение", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение)); - ИнформацияОФайле.Вставить("Редактирует", ПараметрыСинхронизации.АвторФайлов); - - РаботаСФайлами.ОбновитьФайл(СсылкаСуществующегоФайла, ИнформацияОФайле); - НовыйФайл = СсылкаСуществующегоФайла; - + Режим = ?(СсылкаСуществующегоФайла.ХранитьВерсии, "ФайлСВерсией", "Файл"); + СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле(Режим); + + СведенияОФайле.ИмяБезРасширения = СтруктураИмениФайла.ИмяБезРасширения; + СведенияОФайле.АдресВременногоХранилищаФайла = АдресЗагруженногоФайла; + СведенияОФайле.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение); + СведенияОФайле.ВремяИзмененияУниверсальное = ДатаМодификацииФайла; + + Если СведенияОФайле.ХранитьВерсии Тогда + СведенияОФайле.НоваяВерсияАвтор = ПараметрыСинхронизации.АвторФайлов; КонецЕсли; - КонецЕсли; + Результат = РаботаСФайламиСлужебныйВызовСервера.СохранитьИзмененияФайла(СсылкаСуществующегоФайла, СведенияОФайле, Истина, "", "", Ложь); + + НовыйФайл = СсылкаСуществующегоФайла; + + КонецЕсли; ФайлUID1C = Строка(НовыйФайл.Ссылка.УникальныйИдентификатор()); ОбновитьUID1CФайла(Href, ФайлUID1C, ПараметрыСинхронизации); - ЗапомнитьСерверныеДанныеСсылки( - НовыйФайл.Ссылка, - Href, - Etag, - ЭтоФайл, - ОбъектВладелец, - Ложь, - ПараметрыСинхронизации.УчетнаяЗапись); + ЗапомнитьСерверныеДанныеСсылки(НовыйФайл.Ссылка, Href, Etag, ЭтоФайл, ОбъектВладелец, Ложь, ПараметрыСинхронизации.УчетнаяЗапись); - ТекстСообщения = НСтр("ru = 'Загружен файл с сервера: %1'"); + ТекстСообщения = НСтр("ru = 'Загружен файл из облачного сервиса: ""%1""'"); + СтатусДляЖурналаРегистрации = УровеньЖурналаРегистрации.Информация; Иначе - ТекстСообщения = НСтр("ru = 'Не удалось загрузить файл с сервера: %1'"); + ТекстСообщения = НСтр("ru = 'Не удалось загрузить файл ""%1"" из облачного сервиса по причине:'") + " " + Символы.ПС + РезультатЗагрузки.ТекстОшибки; + СтатусДляЖурналаРегистрации = УровеньЖурналаРегистрации.Ошибка; КонецЕсли; - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайла), ПараметрыСинхронизации); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайла), ПараметрыСинхронизации.УчетнаяЗапись, СтатусДляЖурналаРегистрации); + + Возврат НовыйФайл; -КонецПроцедуры +КонецФункции // Записывает событие в журнал регистрации. -Процедура ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСообщения, ПараметрыСинхронизации) +Процедура ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСообщения, УчетнаяЗапись, УстанавливаемыйУровеньЖурналаРегистрации = Неопределено) - ЗаписьЖурналаРегистрации(НСтр("ru = 'Синхронизация файлов с облачным сервисом:'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - ПараметрыСинхронизации.УчетнаяЗапись, + Если УстанавливаемыйУровеньЖурналаРегистрации = Неопределено Тогда + УстанавливаемыйУровеньЖурналаРегистрации = УровеньЖурналаРегистрации.Информация; + КонецЕсли; + + ЗаписьЖурналаРегистрации(РаботаСФайламиКлиентСервер.СобытиеЖурналаРегистрацииСинхронизация(), + УстанавливаемыйУровеньЖурналаРегистрации,, + УчетнаяЗапись, ТекстСообщения); КонецПроцедуры @@ -5222,22 +6069,22 @@ ИменаМесяцев = "janfebmaraprmayjunjulaugsepoctnovdec"; // rfc1123-date = wkday "," SP date1 SP time SP "GMT". ПозицияПервогоПробела = СтрНайти(ДатаСтрокойHTTP, " ");//с первого пробела до второго пробела идет дата. - ПодстрокаДата = Сред(ДатаСтрокойHTTP,ПозицияПервогоПробела+1); - ПодстрокаВремя = Сред(ПодстрокаДата,13); - ПодстрокаДата = Лев(ПодстрокаДата,11); + ПодстрокаДата = Сред(ДатаСтрокойHTTP,ПозицияПервогоПробела + 1); + ПодстрокаВремя = Сред(ПодстрокаДата, 13); + ПодстрокаДата = Лев(ПодстрокаДата, 11); ПозицияПервогоПробела = СтрНайти(ПодстрокаВремя, " "); - ПодстрокаВремя = Лев(ПодстрокаВремя,ПозицияПервогоПробела-1); + ПодстрокаВремя = Лев(ПодстрокаВремя,ПозицияПервогоПробела - 1); // date1 = 2DIGIT SP month SP 4DIGIT. - ПодстрокаДень = Лев(ПодстрокаДата,2); - ПодстрокаМесяц = Формат(Цел(СтрНайти(ИменаМесяцев,НРег(Сред(ПодстрокаДата,4,3))) / 3)+1,"ЧЦ=2; ЧН=00; ЧВН="); - ПодстрокаГод = Сред(ПодстрокаДата,8); + ПодстрокаДень = Лев(ПодстрокаДата, 2); + ПодстрокаМесяц = Формат(Цел(СтрНайти(ИменаМесяцев,НРег(Сред(ПодстрокаДата,4,3))) / 3)+1, "ЧЦ=2; ЧН=00; ЧВН="); + ПодстрокаГод = Сред(ПодстрокаДата, 8); // time = 2DIGIT ":" 2DIGIT ":" 2DIGIT. - ПодстрокаЧас = Лев(ПодстрокаВремя,2); - ПодстрокаМинута = Сред(ПодстрокаВремя,4,2); - ПодстрокаСекунда = Прав(ПодстрокаВремя,2); + ПодстрокаЧас = Лев(ПодстрокаВремя, 2); + ПодстрокаМинута = Сред(ПодстрокаВремя, 4, 2); + ПодстрокаСекунда = Прав(ПодстрокаВремя, 2); + + Возврат Дата(ПодстрокаГод + ПодстрокаМесяц + ПодстрокаДень + ПодстрокаЧас + ПодстрокаМинута + ПодстрокаСекунда); - Возврат Дата(ПодстрокаГод+ПодстрокаМесяц+ПодстрокаДень+ПодстрокаЧас+ПодстрокаМинута+ПодстрокаСекунда); - КонецФункции // Считывает основные данные о состоянии каталога на сервере. Используется для проверки подключения. @@ -5249,18 +6096,23 @@ Попытка // получаем каталог ЗаголовкиHTTP = Новый Соответствие; - ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; ЗаголовкиHTTP["Content-type"] = "text/xml"; - ЗаголовкиHTTP["Accept"] = "text/xml"; - ЗаголовкиHTTP["Depth"] = "0"; + ЗаголовкиHTTP["Accept"] = "text/xml"; + ЗаголовкиHTTP["Depth"] = "0"; - ВыполнитьМетодWebdav("PROPFIND", АдресСервера, ЗаголовкиHTTP, СтруктураОбмена, + Результат = ВыполнитьМетодWebdav("PROPFIND", АдресСервера, ЗаголовкиHTTP, СтруктураОбмена, " | | |" - ,РезультатПроверки.РезультатПротокол); - + , РезультатПроверки.РезультатПротокол); + + Если Результат.Успешно = Ложь Тогда + ЗаписатьВЖурналСобытийСинхронизацииФайлов(Результат.ТекстОшибки, СтруктураОбмена.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + Возврат; + КонецЕсли; + КонтекстДокументаXML = ОпределитьКонтекстXML(СтруктураОбмена.Ответ.ПолучитьТелоКакСтроку()); РезультатXPath = ВычислитьXPath("//*[local-name()='response']",КонтекстДокументаXML); @@ -5306,7 +6158,7 @@ Исключение ОписаниеОшибки = ОписаниеОшибки(); РезультатПроверки.РезультатТекст = РезультатПроверки.РезультатТекст + ?(ПустаяСтрока(РезультатПроверки.РезультатТекст), "", Символы.ПС) + ОписаниеОшибки; - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки,СтруктураОбмена); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки, СтруктураОбмена.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); Отказ = Истина; РезультатПроверки.Отказ = Истина; КонецПопытки; @@ -5397,7 +6249,7 @@ Результат = Результат + ":" + ?(ТипЗнч(СтруктураURI.Порт) = Тип("Число"), Формат(СтруктураURI.Порт, "ЧГ=0"), СтруктураURI.Порт); КонецЕсли; - Результат = Результат + ?(ВключаяПутьНаСервере, ЗакончитьБезСлеша(СтруктураURI.ПутьНаСервере),""); + Результат = Результат + ?(ВключаяПутьНаСервере, ЗакончитьБезСлеша(СтруктураURI.ПутьНаСервере), ""); // Всегда без конечного слеша Возврат Результат; @@ -5406,17 +6258,17 @@ // Возвращает строку, гарантированно начинающуюся прямым слешем. Функция НачатьСлешем(Знач ИсходнаяСтрока) - Возврат ?(Лев(ИсходнаяСтрока,1)="/",ИсходнаяСтрока,"/"+ИсходнаяСтрока); + Возврат ?(Лев(ИсходнаяСтрока,1)="/", ИсходнаяСтрока, "/"+ИсходнаяСтрока); КонецФункции // Возвращает строку, гарантированно заканчивающуюся без прямого слэша. Функция ЗакончитьБезСлеша(Знач ИсходнаяСтрока) - Возврат ?(Прав(ИсходнаяСтрока,1)="/",Лев(ИсходнаяСтрока,СтрДлина(ИсходнаяСтрока)-1),ИсходнаяСтрока); + Возврат ?(Прав(ИсходнаяСтрока,1)="/", Лев(ИсходнаяСтрока, СтрДлина(ИсходнаяСтрока)-1), ИсходнаяСтрока); КонецФункции // Возвращает результат сравнения путей двух URI, вне зависимости от наличия начального и конечного прямого слеша, // кодирования спецсимволов, а так же адреса сервера. -Функция ЭтоОдинаковыеПутиURI(URI1,URI2,ЧувствительноКРегистру = Истина) +Функция ЭтоОдинаковыеПутиURI(URI1, URI2, ЧувствительноКРегистру = Истина) // Гарантирует идентичность вне зависимости от слэшей и кодирования. СтруктураURI1 = СтруктураURIРаскодированная(URI1); @@ -5460,16 +6312,42 @@ УчетнаяЗапись = Неопределено) ЗаписьРегистра = РегистрыСведений.СтатусыСинхронизацииФайловСОблачнымСервисом.СоздатьМенеджерЗаписи(); - ЗаписьРегистра.Файл = Ссылка; - ЗаписьРегистра.Href = Href; - ЗаписьРегистра.Etag = Etag; - ЗаписьРегистра.УникальныйИдентификатор1С = Ссылка.УникальныйИдентификатор(); - ЗаписьРегистра.ЭтоФайл = ЭтоФайл; - ЗаписьРегистра.ЭтоВладелецФайла = ЭтоПапка; - ЗаписьРегистра.ВладелецФайла = ВладелецФайла; - ЗаписьРегистра.УчетнаяЗапись = УчетнаяЗапись; + ЗаписьРегистра.Файл = Ссылка; + ЗаписьРегистра.Href = Href; + ЗаписьРегистра.Etag = Etag; + ЗаписьРегистра.УникальныйИдентификатор1С = ?(ТипЗнч(Ссылка) = Тип("Строка"), "", Ссылка.УникальныйИдентификатор()); + ЗаписьРегистра.ЭтоФайл = ЭтоФайл; + ЗаписьРегистра.ЭтоВладелецФайла = ЭтоПапка; + ЗаписьРегистра.ВладелецФайла = ВладелецФайла; + ЗаписьРегистра.УчетнаяЗапись = УчетнаяЗапись; + ЗаписьРегистра.Синхронизирован = Ложь; + ЗаписьРегистра.ДатаСинхронизацииНачало = ТекущаяДатаСеанса(); + ЗаписьРегистра.ДатаСинхронизацииЗавершение = ТекущаяДатаСеанса() + 1800; // 30 минут + ЗаписьРегистра.НомерСеанса = НомерСеансаИнформационнойБазы(); ЗаписьРегистра.Записать(Истина); + +КонецПроцедуры +// Сохраняет данные о Href и Etag файла или папки в базе данных. +Процедура УстановитьСтатусСинхронизации(СведенияОФайле, УчетнаяЗапись = Неопределено) + + ЗаписьРегистра = РегистрыСведений.СтатусыСинхронизацииФайловСОблачнымСервисом.СоздатьМенеджерЗаписи(); + ЗаписьРегистра.Файл = СведенияОФайле.ФайлСсылка; + ЗаписьРегистра.Href = СведенияОФайле.ToHref; + ЗаписьРегистра.Etag = СведенияОФайле.ToEtag; + ЗаписьРегистра.УникальныйИдентификатор1С = СведенияОФайле.ФайлСсылка.УникальныйИдентификатор(); + ЗаписьРегистра.ЭтоФайл = СведенияОФайле.ЭтоФайл; + ЗаписьРегистра.ЭтоВладелецФайла = СведенияОФайле.ЭтоПапка; + ЗаписьРегистра.ВладелецФайла = СведенияОФайле.Родитель; + ЗаписьРегистра.Синхронизирован = СведенияОФайле.Обработан; + ЗаписьРегистра.ДатаСинхронизацииНачало = ТекущаяДатаСеанса(); + ЗаписьРегистра.ДатаСинхронизацииЗавершение = ТекущаяДатаСеанса(); + ЗаписьРегистра.НомерСеанса = НомерСеансаИнформационнойБазы(); + + ЗаписьРегистра.УчетнаяЗапись = УчетнаяЗапись; + + ЗаписьРегистра.Записать(Истина); + КонецПроцедуры // Удаляет данные о Href и Etag файла или папки в базе данных. @@ -5527,11 +6405,11 @@ КонецФункции // Вычисляется уровень строки файлов, рекурсивным алгоритмом. -Функция РекурсивноУровень(СтрокаФайлов,ТаблицаФайлов) +Функция РекурсивноУровень(СтрокаФайлов,ТаблицаФайлов) // Равен уровню в базе или на сервере, в зависимости от того, где он меньше. НайденыСтрокиФайлов = ТаблицаФайлов.НайтиСтроки(Новый Структура("ФайлСсылка", СтрокаФайлов.Родитель)); - КоличествоПрибавления = ?(НайденыСтрокиФайлов.Количество()=0,0,1); + КоличествоПрибавления = ?(НайденыСтрокиФайлов.Количество() = 0, 0, 1); Для каждого НайденнаяСтрокаФайлов Из НайденыСтрокиФайлов Цикл КоличествоПрибавления = КоличествоПрибавления + РекурсивноУровень(НайденнаяСтрокаФайлов,ТаблицаФайлов); КонецЦикла; @@ -5544,7 +6422,7 @@ Функция РекурсивноУровеньНаСервере(СтрокаФайлов,ТаблицаФайлов) НайденыСтрокиФайлов = ТаблицаФайлов.НайтиСтроки(Новый Структура("ФайлСсылка", СтрокаФайлов.РодительСервер)); - КоличествоПрибавления = ?(НайденыСтрокиФайлов.Количество() =0, 0, 1); + КоличествоПрибавления = ?(НайденыСтрокиФайлов.Количество() = 0, 0, 1); Для каждого НайденнаяСтрокаФайлов Из НайденыСтрокиФайлов Цикл КоличествоПрибавления = КоличествоПрибавления + РекурсивноУровеньНаСервере(НайденнаяСтрокаФайлов, ТаблицаФайлов); КонецЦикла; @@ -5557,22 +6435,27 @@ Процедура ВычислитьУровеньРекурсивно(ТаблицаФайлов) ТаблицаФайлов.Индексы.Добавить("ФайлСсылка"); Для каждого СтрокаФайлов Из ТаблицаФайлов Цикл + + Если НЕ ЗначениеЗаполнено(СтрокаФайлов.ФайлСсылка) Тогда + Продолжить; + КонецЕсли; + // Равен уровню в базе или на сервере, в зависимости от того, где он меньше. - УровеньВБазе = РекурсивноУровень(СтрокаФайлов, ТаблицаФайлов); + УровеньВБазе = РекурсивноУровень(СтрокаФайлов, ТаблицаФайлов); УровеньНаСервере = РекурсивноУровеньНаСервере(СтрокаФайлов, ТаблицаФайлов); Если УровеньНаСервере = 0 Тогда - СтрокаФайлов.Уровень = УровеньВБазе; + СтрокаФайлов.Уровень = УровеньВБазе; СтрокаФайлов.РодительСортировка = СтрокаФайлов.Родитель; Иначе Если УровеньВБазе <= УровеньНаСервере Тогда - СтрокаФайлов.Уровень = УровеньВБазе; + СтрокаФайлов.Уровень = УровеньВБазе; СтрокаФайлов.РодительСортировка = СтрокаФайлов.Родитель; Иначе - СтрокаФайлов.Уровень = УровеньНаСервере; + СтрокаФайлов.Уровень = УровеньНаСервере; СтрокаФайлов.РодительСортировка = СтрокаФайлов.РодительСервер; - КонецЕсли; - КонецЕсли; - КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -5595,9 +6478,9 @@ // Рекурсивно загружает перечень файлов с сервера в таблицу файлов. Процедура СкачатьДеревоФайловРекурсивно(ТекущиеСтрокиДереваФайлов, HttpАдрес, ПараметрыСинхронизации, Отказ=Ложь) - СтруктураАдресаHTTP = СтруктураURIРаскодированная(HttpАдрес); + СтруктураАдресаHTTP = СтруктураURIРаскодированная(HttpАдрес); АдресОблачногоСервиса = КодироватьURIПоСтруктуре(СтруктураАдресаHTTP, Ложь); - АдресСервера = КодироватьURIПоСтруктуре(СтруктураАдресаHTTP); + АдресСервера = КодироватьURIПоСтруктуре(СтруктураАдресаHTTP); Попытка // Получаем каталог @@ -5607,13 +6490,18 @@ ЗаголовкиHTTP["Accept"] = "text/xml"; ЗаголовкиHTTP["Depth"] = "1"; - ВыполнитьМетодWebdav("PROPFIND",АдресСервера,ЗаголовкиHTTP,ПараметрыСинхронизации, + Результат = ВыполнитьМетодWebdav("PROPFIND", АдресСервера, ЗаголовкиHTTP, ПараметрыСинхронизации, " | | | |"); - + + Если Результат.Успешно = Ложь Тогда + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + Возврат; + КонецЕсли; + КонтекстДокументаXML = ОпределитьКонтекстXML(ПараметрыСинхронизации.Ответ.ПолучитьТелоКакСтроку()); РезультатXPath = ВычислитьXPath("//*[local-name()='response']", КонтекстДокументаXML); @@ -5658,9 +6546,9 @@ НоваяСтрокаДереваФайлов.ДатаМодификации = ДатаRFC1123(ДочернийУзелPropstat.ТекстовоеСодержимое);//UTC ИначеЕсли ДочернийУзелPropstat.ЛокальноеИмя = "getcontentlength" Тогда НоваяСтрокаДереваФайлов.Длина = Число(СтрЗаменить(ДочернийУзелPropstat.ТекстовоеСодержимое," ","")); - КонецЕсли; - КонецЦикла; - КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; // Если не было UID, пробуем получить его отдельно, это нужно, например, для owncloud. Если НЕ ЗначениеЗаполнено(НоваяСтрокаДереваФайлов.UID1C) Тогда @@ -5672,23 +6560,21 @@ КонецЦикла; Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); Отказ = Истина; - КонецПопытки; + КонецПопытки; Для каждого СтрокаДереваФайлов Из ТекущиеСтрокиДереваФайлов Цикл Если СтрокаДереваФайлов.ЭтоПапка = Истина Тогда СкачатьДеревоФайловРекурсивно(СтрокаДереваФайлов.Строки, СтрокаДереваФайлов.Href, ПараметрыСинхронизации, Отказ); - КонецЕсли; - КонецЦикла; + КонецЕсли; + КонецЦикла; КонецПроцедуры // Загружает с сервера webdav новые папки и файлы, которых еще нет в базе, и отражает их в таблице файлов. Процедура ЗагрузитьНовыеПрисоединенныеФайлы(СтрокиДереваФайлов, ТаблицаФайлов, ПараметрыСинхронизации, ОбъектВладелец = Неопределено) - ПодсистемаРаботаСФайламиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами"); - Для каждого СтрокаДереваФайлов Из СтрокиДереваФайлов Цикл Если СтрокаДереваФайлов.ЭтоПапка Тогда @@ -5725,74 +6611,72 @@ // Это новая папка на сервере - грузим ее, // но сначала проверим возможность хранения UID1C, и если нельзя - то папка не грузится. - Если ПодсистемаРаботаСФайламиСуществует Тогда - - ВозможностьСозданияПапки = ВозможностьСозданияПапки(ОбъектВладелец); - - Если Не ВозможностьСозданияПапки Тогда - Продолжить; - КонецЕсли; - - Если НЕ ПроверитьВозможностьUID1C(СтрокаДереваФайлов.Href,Строка(Новый УникальныйИдентификатор), ПараметрыСинхронизации) Тогда - ТекстСобытия = НСтр("ru = 'Невозможно сохранение дополнительных свойств файла, он не будет загружен: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаДереваФайлов.ИмяФайла), ПараметрыСинхронизации); - Продолжить; - КонецЕсли; - - Попытка - - ТекущаяПапкаФайлов = РаботаСФайламиСлужебныйВызовСервера.СправочникиПапкиСоздатьЭлемент(СтрокаДереваФайлов.ИмяФайла, ОбъектВладелец, ПараметрыСинхронизации.АвторФайлов); - - СтрокаДереваФайлов.UID1C = Строка(ТекущаяПапкаФайлов.УникальныйИдентификатор()); - ОбновитьUID1CФайла(СтрокаДереваФайлов.Href,СтрокаДереваФайлов.UID1C,ПараметрыСинхронизации); - - НоваяСтрокаТаблицыФайлов = ТаблицаФайлов.Добавить(); - НоваяСтрокаТаблицыФайлов.ФайлСсылка = ТекущаяПапкаФайлов; - НоваяСтрокаТаблицыФайлов.ПометкаУдаления = Ложь; - НоваяСтрокаТаблицыФайлов.Родитель = ОбъектВладелец; - НоваяСтрокаТаблицыФайлов.ЭтоПапка = Истина; - НоваяСтрокаТаблицыФайлов.UID1C = СтрокаДереваФайлов.UID1C; - НоваяСтрокаТаблицыФайлов.ЕстьВБазе = Истина; - НоваяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; - НоваяСтрокаТаблицыФайлов.ИзмененНаСервере = Ложь; - НоваяСтрокаТаблицыФайлов.Изменения = ТекущаяПапкаФайлов; - НоваяСтрокаТаблицыФайлов.Href = ""; - НоваяСтрокаТаблицыФайлов.Etag = ""; - НоваяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; - НоваяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; - НоваяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; - НоваяСтрокаТаблицыФайлов.Наименование = СтрокаДереваФайлов.ИмяФайла; - НоваяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; - НоваяСтрокаТаблицыФайлов.Обработан = Истина; - НоваяСтрокаТаблицыФайлов.ЭтоФайл = Истина; - - ЗапомнитьСерверныеДанныеСсылки( - НоваяСтрокаТаблицыФайлов.ФайлСсылка, - НоваяСтрокаТаблицыФайлов.ToHref, - НоваяСтрокаТаблицыФайлов.ToEtag, - НоваяСтрокаТаблицыФайлов.ЭтоФайл, - НоваяСтрокаТаблицыФайлов.Родитель, - НоваяСтрокаТаблицыФайлов.ЭтоПапка, - ПараметрыСинхронизации.УчетнаяЗапись); - - ТекстСобытия = НСтр("ru = 'Загружена папка с сервера: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, НоваяСтрокаТаблицыФайлов.НаименованиеСервер), ПараметрыСинхронизации); - - Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); - КонецПопытки; + Если Не ЭтоПапкаФайлов(ОбъектВладелец) Тогда + Продолжить; КонецЕсли; + Если НЕ ПроверитьВозможностьUID1C(СтрокаДереваФайлов.Href, Строка(Новый УникальныйИдентификатор), ПараметрыСинхронизации) Тогда + ТекстСобытия = НСтр("ru = 'Невозможно сохранение дополнительных свойств файла, он не будет загружен: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаДереваФайлов.ИмяФайла), ПараметрыСинхронизации.УчетнаяЗапись); + Продолжить; + КонецЕсли; + + Попытка + + ТекущаяПапкаФайлов = РаботаСФайламиСлужебныйВызовСервера.СоздатьПапкуФайлов(СтрокаДереваФайлов.ИмяФайла, ОбъектВладелец, ПараметрыСинхронизации.АвторФайлов); + + СтрокаДереваФайлов.UID1C = Строка(ТекущаяПапкаФайлов.УникальныйИдентификатор()); + ОбновитьUID1CФайла(СтрокаДереваФайлов.Href, СтрокаДереваФайлов.UID1C, ПараметрыСинхронизации); + + НоваяСтрокаТаблицыФайлов = ТаблицаФайлов.Добавить(); + НоваяСтрокаТаблицыФайлов.ФайлСсылка = ТекущаяПапкаФайлов; + НоваяСтрокаТаблицыФайлов.ПометкаУдаления = Ложь; + НоваяСтрокаТаблицыФайлов.Родитель = ОбъектВладелец; + НоваяСтрокаТаблицыФайлов.ЭтоПапка = Истина; + НоваяСтрокаТаблицыФайлов.UID1C = СтрокаДереваФайлов.UID1C; + НоваяСтрокаТаблицыФайлов.ЕстьВБазе = Истина; + НоваяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; + НоваяСтрокаТаблицыФайлов.ИзмененНаСервере = Ложь; + НоваяСтрокаТаблицыФайлов.Изменения = ТекущаяПапкаФайлов; + НоваяСтрокаТаблицыФайлов.Href = ""; + НоваяСтрокаТаблицыФайлов.Etag = ""; + НоваяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; + НоваяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; + НоваяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; + НоваяСтрокаТаблицыФайлов.Наименование = СтрокаДереваФайлов.ИмяФайла; + НоваяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; + НоваяСтрокаТаблицыФайлов.Обработан = Истина; + НоваяСтрокаТаблицыФайлов.ЭтоФайл = Истина; + + ЗапомнитьСерверныеДанныеСсылки( + НоваяСтрокаТаблицыФайлов.ФайлСсылка, + НоваяСтрокаТаблицыФайлов.ToHref, + НоваяСтрокаТаблицыФайлов.ToEtag, + НоваяСтрокаТаблицыФайлов.ЭтоФайл, + НоваяСтрокаТаблицыФайлов.Родитель, + НоваяСтрокаТаблицыФайлов.ЭтоПапка, + ПараметрыСинхронизации.УчетнаяЗапись); + + ТекстСобытия = НСтр("ru = 'Загружена папка с сервера: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, НоваяСтрокаТаблицыФайлов.НаименованиеСервер), ПараметрыСинхронизации.УчетнаяЗапись); + + Исключение + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки() ,ПараметрыСинхронизации.УчетнаяЗапись); + КонецПопытки; + Иначе // Обновим ToHref СтараяСтрокаТаблицыФайлов = ТаблицаФайлов.Найти(ТекущаяПапкаФайлов.Ссылка, "ФайлСсылка"); - СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; - СтараяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; - СтараяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; - СтараяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; - СтараяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; - СтараяСтрокаТаблицыФайлов.ИзмененНаСервере = НЕ ЭтоОдинаковыеПутиURI(СтараяСтрокаТаблицыФайлов.ToHref,СтараяСтрокаТаблицыФайлов.Href); - КонецЕсли; + Если СтараяСтрокаТаблицыФайлов <> Неопределено Тогда + СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; + СтараяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; + СтараяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; + СтараяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; + СтараяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; + СтараяСтрокаТаблицыФайлов.ИзмененНаСервере = НЕ ЭтоОдинаковыеПутиURI(СтараяСтрокаТаблицыФайлов.ToHref,СтараяСтрокаТаблицыФайлов.Href); + КонецЕсли; + КонецЕсли; + // Для подчиненных строк это теперь родитель. ЗагрузитьНовыеПрисоединенныеФайлы(СтрокаДереваФайлов.Строки, ТаблицаФайлов, ПараметрыСинхронизации, ТекущаяПапкаФайлов.Ссылка); @@ -5809,42 +6693,63 @@ // Это новый файл на сервере - грузим его. Если НЕ ПроверитьВозможностьUID1C(СтрокаДереваФайлов.Href, Строка(Новый УникальныйИдентификатор), ПараметрыСинхронизации) Тогда ТекстСобытия = НСтр("ru = 'Невозможно сохранение дополнительных свойств файла, он не будет загружен: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаДереваФайлов.ИмяФайла), ПараметрыСинхронизации); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаДереваФайлов.ИмяФайла), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); Продолжить; - КонецЕсли; + КонецЕсли; Попытка ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ИмяФайла", СтрокаДереваФайлов.ИмяФайла); - ПараметрыФайла.Вставить("Href", СтрокаДереваФайлов.Href); - ПараметрыФайла.Вставить("Etag", СтрокаДереваФайлов.Etag); - ПараметрыФайла.Вставить("ДатаМодификацииФайла", СтрокаДереваФайлов.ДатаМодификации); - ПараметрыФайла.Вставить("ДлинаФайла", СтрокаДереваФайлов.Длина); - ПараметрыФайла.Вставить("ДляПользователя", ПараметрыСинхронизации.АвторФайлов); - ПараметрыФайла.Вставить("ОбъектВладелец", ОбъектВладелец); + ПараметрыФайла.Вставить("ИмяФайла", СтрокаДереваФайлов.ИмяФайла); + ПараметрыФайла.Вставить("Href", СтрокаДереваФайлов.Href); + ПараметрыФайла.Вставить("Etag", СтрокаДереваФайлов.Etag); + ПараметрыФайла.Вставить("ДатаМодификацииФайла", СтрокаДереваФайлов.ДатаМодификации); + ПараметрыФайла.Вставить("ДлинаФайла", СтрокаДереваФайлов.Длина); + ПараметрыФайла.Вставить("ДляПользователя", ПараметрыСинхронизации.АвторФайлов); + ПараметрыФайла.Вставить("ОбъектВладелец", ОбъектВладелец); ПараметрыФайла.Вставить("СсылкаСуществующегоФайла", Неопределено); - ПараметрыФайла.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); - ЗагрузитьФайлССервера(ПараметрыФайла); + ПараметрыФайла.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); + СсылкаСуществующегоФайла = ЗагрузитьФайлССервера(ПараметрыФайла); + + СтрокаДереваФайлов.UID1C = Строка(СсылкаСуществующегоФайла.Ссылка.УникальныйИдентификатор()); + + НоваяСтрокаТаблицыФайлов = ТаблицаФайлов.Добавить(); + НоваяСтрокаТаблицыФайлов.ФайлСсылка = СсылкаСуществующегоФайла; + НоваяСтрокаТаблицыФайлов.ПометкаУдаления = Ложь; + НоваяСтрокаТаблицыФайлов.Родитель = ОбъектВладелец; + НоваяСтрокаТаблицыФайлов.ЭтоПапка = Ложь; + НоваяСтрокаТаблицыФайлов.UID1C = СтрокаДереваФайлов.UID1C; + НоваяСтрокаТаблицыФайлов.ЕстьВБазе = Ложь; + НоваяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; + НоваяСтрокаТаблицыФайлов.ИзмененНаСервере = Ложь; + НоваяСтрокаТаблицыФайлов.Href = ""; + НоваяСтрокаТаблицыФайлов.Etag = ""; + НоваяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; + НоваяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; + НоваяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; + НоваяСтрокаТаблицыФайлов.Наименование = СтрокаДереваФайлов.ИмяФайла; + НоваяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; + НоваяСтрокаТаблицыФайлов.Обработан = Истина; + НоваяСтрокаТаблицыФайлов.ЭтоФайл = Истина; Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); - КонецПопытки; + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + КонецПопытки; Иначе // Обновим ToHref - СтараяСтрокаТаблицыФайлов = ТаблицаФайлов.Найти(ТекущийФайл.ФайлСсылка,"ФайлСсылка"); - СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; - СтараяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; - СтараяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; + СтараяСтрокаТаблицыФайлов = ТаблицаФайлов.Найти(ТекущийФайл.ФайлСсылка,"ФайлСсылка"); + СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; + СтараяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; + СтараяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; СтараяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; - СтараяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; - СтараяСтрокаТаблицыФайлов.ИзмененНаСервере = НЕ ЭтоОдинаковыеПутиURI(СтараяСтрокаТаблицыФайлов.ToHref,СтараяСтрокаТаблицыФайлов.Href); - КонецЕсли; + СтараяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; + СтараяСтрокаТаблицыФайлов.ИзмененНаСервере = НЕ ЭтоОдинаковыеПутиURI(СтараяСтрокаТаблицыФайлов.ToHref, СтараяСтрокаТаблицыФайлов.Href); + КонецЕсли; - КонецЕсли; + КонецЕсли; - КонецЦикла; + КонецЦикла; КонецПроцедуры @@ -5887,11 +6792,16 @@ КонецЕсли; Если ТекущаяПапкаФайлов = Неопределено Тогда - ТекущаяПапкаФайлов = НайтиСтрокуПоURI(СтрокаДереваФайлов.Href, ТаблицаФайлов,"Href");// может быть помечена на удаление, тогда у нее нет Href, и тут она не будет найдена. + ТекущаяПапкаФайлов = НайтиСтрокуПоURI(СтрокаДереваФайлов.Href, ТаблицаФайлов, "Href");// может быть помечена на удаление, тогда у нее нет Href, и тут она не будет найдена. КонецЕсли; + Если ТекущаяПапкаФайлов = Неопределено ИЛИ ТаблицаФайлов.Найти(ТекущаяПапкаФайлов.Ссылка, "ФайлСсылка") = Неопределено Тогда + Продолжить; + КонецЕсли; + Если (ТекущаяПапкаФайлов <> Неопределено) ИЛИ (ТаблицаФайлов.Найти(ТекущаяПапкаФайлов.Ссылка,"ФайлСсылка") <> Неопределено) Тогда СтараяСтрокаТаблицыФайлов = ТаблицаФайлов.Найти(ТекущаяПапкаФайлов.Ссылка, "ФайлСсылка"); + СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; СтараяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; СтараяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; @@ -5909,9 +6819,9 @@ // если UID потерялся при редактировали и файл переместили в другую папку (Href поменялся), то он будет загружен в // новую карточку файла поиск по Href оправдан, т.к. он уникален на файловом сервере для каждого файла. - ТекущийФайл = НайтиСтрокуПоURI(СтрокаДереваФайлов.Href,ТаблицаФайлов,"Href"); + ТекущийФайл = НайтиСтрокуПоURI(СтрокаДереваФайлов.Href, ТаблицаФайлов, "Href"); - Если (ТекущийФайл <> Неопределено) ИЛИ (ТаблицаФайлов.Найти(ТекущийФайл.ФайлСсылка,"ФайлСсылка") <> Неопределено) Тогда + Если (ТекущийФайл <> Неопределено) И (ТаблицаФайлов.Найти(ТекущийФайл.ФайлСсылка,"ФайлСсылка") <> Неопределено) Тогда // Обновим ToHref СтараяСтрокаТаблицыФайлов = ТаблицаФайлов.Найти(ТекущийФайл.ФайлСсылка,"ФайлСсылка"); СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; @@ -5936,12 +6846,13 @@ Запрос.Текст = "ВЫБРАТЬ | УчетныеЗаписиСинхронизацииФайлов.Ссылка КАК УчетнаяЗапись, | УчетныеЗаписиСинхронизацииФайлов.Сервис КАК АдресСервера, - | УчетныеЗаписиСинхронизацииФайлов.КорневаяПапка, - | УчетныеЗаписиСинхронизацииФайлов.АвторФайлов + | УчетныеЗаписиСинхронизацииФайлов.КорневаяПапка КАК КорневаяПапка, + | УчетныеЗаписиСинхронизацииФайлов.АвторФайлов КАК АвторФайлов |ИЗ | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов |ГДЕ - | УчетныеЗаписиСинхронизацииФайлов.Ссылка = &Ссылка"; + | УчетныеЗаписиСинхронизацииФайлов.Ссылка = &Ссылка + | И УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления = ЛОЖЬ"; Запрос.УстановитьПараметр("Ссылка", УчетнаяЗапись); @@ -5982,222 +6893,302 @@ Возврат; КонецЕсли; - АдресОблачногоСервиса = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера, Ложь); - АдресСервера = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера); - ТекстСобытия = НСтр("ru = 'Начало синхронизации файлов с облачным сервисом.'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись); - Попытка - - ДеревоФайловСервера = Новый ДеревоЗначений; - ДеревоФайловСервера.Колонки.Добавить("Href"); - ДеревоФайловСервера.Колонки.Добавить("UID1C"); - ДеревоФайловСервера.Колонки.Добавить("Etag"); - ДеревоФайловСервера.Колонки.Добавить("ИмяФайла"); - ДеревоФайловСервера.Колонки.Добавить("ЭтоПапка"); - ДеревоФайловСервера.Колонки.Добавить("ДатаМодификации"); - ДеревоФайловСервера.Колонки.Добавить("Длина"); - - Отказ = Ложь; - СкачатьДеревоФайловРекурсивно(ДеревоФайловСервера.Строки, АдресСервера, ПараметрыСинхронизации, Отказ); - Если Отказ = Истина Тогда - ТекстОшибки = НСтр("ru = 'При загрузке структуры файлов с сервера произошла ошибка, синхронизация не выполнена.'"); - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - // Сравниваем с деревом файлов в системе, синхронизация идет по уникальному идентификатору. - МассивИсключений = Новый Массив; - ТаблицаФайлов = ВыбратьДанныеПоПравилам(УчетнаяЗапись, МассивИсключений); - - Для каждого СтрокаТаблицы Из ТаблицаФайлов Цикл - СтрокаТаблицы.UID1C = Строка(СтрокаТаблицы.ФайлСсылка.УникальныйИдентификатор()); - КонецЦикла; - - // Перебираем дерево, загружаем и добавляем те, которых нет в базе, в таблицу, а по старым заполняем реквизиты с сервера. - ЗагрузитьНовыеПрисоединенныеФайлы(ДеревоФайловСервера.Строки, ТаблицаФайлов, ПараметрыСинхронизации); - - ВычислитьУровеньРекурсивно(ТаблицаФайлов); - ТаблицаФайлов.Индексы.Добавить("ФайлСсылка"); - ОбъектСравнения = Новый СравнениеЗначений; - ТаблицаФайлов.Сортировать("ЭтоПапка УБЫВ, Уровень, РодительСортировка", ОбъектСравнения); - // Перебираем таблицу и решаем что делать с файлами и папками. - Для Каждого СтрокаТаблицы Из ТаблицаФайлов Цикл - - Если СтрокаТаблицы.Обработан Тогда - Продолжить; - КонецЕсли; - - ОбновитьСтатусСинхронизацииФайла = Ложь; - - СозданНовыйВБазе = (НЕ ЗначениеЗаполнено(СтрокаТаблицы.Href)) И (НЕ ЗначениеЗаполнено(СтрокаТаблицы.ToHref)); - - ИзмененВБазе = ЗначениеЗаполнено(СтрокаТаблицы.Изменения);// что-то поменялось - ИзмененоСодержимоеНаСервере = ЗначениеЗаполнено(СтрокаТаблицы.Etag) И ЗначениеЗаполнено(СтрокаТаблицы.ToEtag) И (СтрокаТаблицы.Etag <> СтрокаТаблицы.ToEtag);// поменялось содержимое - ИзмененНаСервере = ИзмененоСодержимоеНаСервере ИЛИ СтрокаТаблицы.ИзмененНаСервере;// поменялось имя/подчиненность или содержание - - УдаленВБазе = СтрокаТаблицы.ПометкаУдаления; - УдаленНаСервере = ЗначениеЗаполнено(СтрокаТаблицы.Href) И НЕ ЗначениеЗаполнено(СтрокаТаблицы.ToHref); - - НачатьТранзакцию(); - - Попытка - - Если СозданНовыйВБазе И НЕ УдаленВБазе Тогда - - // отправим новый на сервер - СтрокаТаблицы.Наименование = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтрокаТаблицы.Наименование, "-"); - СтрокаТаблицы.ToHref = ЗакончитьБезСлеша(АдресСервера) + НачатьСлешем(ЗакончитьБезСлеша(РассчитатьHref(СтрокаТаблицы,ТаблицаФайлов))); - Если ОбщегоНазначения.ОбъектЯвляетсяГруппой(СтрокаТаблицы.ФайлСсылка) Тогда - ВызватьМетодMKCOL(СтрокаТаблицы.ToHref, ПараметрыСинхронизации); - ИначеЕсли СтрокаТаблицы.ЭтоПапка Тогда - ВызватьМетодMKCOL(СтрокаТаблицы.ToHref, ПараметрыСинхронизации); - Иначе - СтрокаТаблицы.ToEtag = ВызватьМетодPUT(СтрокаТаблицы.ToHref, СтрокаТаблицы.ФайлСсылка, ПараметрыСинхронизации, СтрокаТаблицы.ЭтоФайл); - КонецЕсли; - ОбновитьUID1CФайла(СтрокаТаблицы.ToHref, СтрокаТаблицы.UID1C, ПараметрыСинхронизации); - СтрокаТаблицы.РодительСервер = СтрокаТаблицы.Родитель; - СтрокаТаблицы.НаименованиеСервер = СтрокаТаблицы.Наименование; - СтрокаТаблицы.ЕстьНаСервере = Истина; - СтрокаТаблицы.Обработан = Истина; - - ОбъектЯвляетсяГруппой = ОбщегоНазначения.ОбъектЯвляетсяГруппой(СтрокаТаблицы.ФайлСсылка); - Если Не СтрокаТаблицы.ЭтоФайл - И Не СтрокаТаблицы.ЭтоПапка - И Не ОбъектЯвляетсяГруппой Тогда - Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТаблицы.ФайлСсылка, "Редактирует") <> ПараметрыСинхронизации.АвторФайлов Тогда - ЗанятьФайлДляРедактированияСервер(СтрокаТаблицы.ФайлСсылка, ПараметрыСинхронизации.АвторФайлов); - КонецЕсли; - ИначеЕсли Не СтрокаТаблицы.ЭтоПапка И Не ОбъектЯвляетсяГруппой Тогда - ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(СтрокаТаблицы.ФайлСсылка); - РаботаСФайламиСлужебныйВызовСервера.ЗанятьФайл(ДанныеФайла, , , ПараметрыСинхронизации.АвторФайлов); - КонецЕсли; - - ТекстСобытия = НСтр("ru = 'Создан объект в облачном сервисе %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации); - - ОбновитьСтатусСинхронизацииФайла = Истина; - - ИначеЕсли УдаленНаСервере И НЕ УдаленВБазе Тогда - - Если Не ЗначениеЗаполнено(СтрокаТаблицы.ФайлСсылка) Тогда - Продолжить; - КонецЕсли; - - // Если это элемент справочника ИдентификаторыОбъектовМетаданных, то не удаляем. - Если ТипЗнч(СтрокаТаблицы.ФайлСсылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - СтрокаТаблицы.Обработан = Истина; - Продолжить; - КонецЕсли; - // удаляем в базе - СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина,Ложь); - СтрокаТаблицы.ПометкаУдаления = Истина; - СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; - СтрокаТаблицы.Обработан = Истина; - - ТекстСобытия = НСтр("ru = 'Удалено в базе: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации); - - ОбновитьСтатусСинхронизацииФайла = Истина; - - ИначеЕсли (ИзмененВБазе ИЛИ ИзмененНаСервере) И НЕ (УдаленВБазе ИЛИ УдаленНаСервере) Тогда - - Если ИзмененНаСервере И НЕ ИзмененВБазе Тогда - // загрузим с сервера - Если СтрокаТаблицы.ЭтоПапка Тогда - // Возможно можно отследить переименование. - ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); - ОбъектСтрокиТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; - ОбъектСтрокиТаблицы.Родитель = Неопределено; - ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; - ОбъектСтрокиТаблицы.Записать(); - - СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; - СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; - СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; - СтрокаТаблицы.ПометкаУдаления = Ложь; - - ОбновитьСтатусСинхронизацииФайла = Истина; - Иначе - - СтруктураИмениФайла = Новый Файл(СтрокаТаблицы.НаименованиеСервер); - НовоеРасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение); - // Загружаем только если поменялось содержимое, т.е. Etag, иначе обновляем реквизиты. - Если ИзмененоСодержимоеНаСервере ИЛИ (НовоеРасширениеФайла <> СтрокаТаблицы.ФайлСсылка.Расширение) Тогда - - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ИмяФайла", СтрокаТаблицы.НаименованиеСервер); - ПараметрыФайла.Вставить("Href", СтрокаТаблицы.ToHref); - ПараметрыФайла.Вставить("Etag", СтрокаТаблицы.ToEtag); - ПараметрыФайла.Вставить("ДатаМодификацииФайла", Неопределено); - ПараметрыФайла.Вставить("ДлинаФайла", Неопределено); - ПараметрыФайла.Вставить("ДляПользователя", ПараметрыСинхронизации.АвторФайлов); - ПараметрыФайла.Вставить("ОбъектВладелец", СтрокаТаблицы.Родитель); - ПараметрыФайла.Вставить("СсылкаСуществующегоФайла", СтрокаТаблицы.ФайлСсылка); - ПараметрыФайла.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); - - ЗагрузитьФайлССервера(ПараметрыФайла, СтрокаТаблицы.ЭтоФайл); - - КонецЕсли; - - ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); - ОбъектСтрокиТаблицы.Наименование = СтруктураИмениФайла.ИмяБезРасширения; - ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; - ОбъектСтрокиТаблицы.Записать(); - - СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; - СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; - СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; - СтрокаТаблицы.ПометкаУдаления = Ложь; - - КонецЕсли; - - СтрокаТаблицы.Обработан = Истина; - ТекстСобытия = НСтр("ru = 'Обновлен объект в базе: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации); - - ОбновитьСтатусСинхронизацииФайла = Истина; - - КонецЕсли; - - КонецЕсли; - - Если ОбновитьСтатусСинхронизацииФайла Тогда - // Записываем обновления в регистр сведений статусов. - Если СтрокаТаблицы.ПометкаУдаления Тогда - // Удаляем последний Href, чтобы повторно не идентифицировать. - УдалитьСерверныеДанныеСсылки(СтрокаТаблицы.ФайлСсылка, УчетнаяЗапись); - Иначе - ЗапомнитьСерверныеДанныеСсылки( - СтрокаТаблицы.ФайлСсылка, - СтрокаТаблицы.ToHref, - СтрокаТаблицы.ToEtag, - СтрокаТаблицы.ЭтоФайл, - СтрокаТаблицы.Родитель, - СтрокаТаблицы.ЭтоПапка, - УчетнаяЗапись); - КонецЕсли; - КонецЕсли; - - ЗафиксироватьТранзакцию(); - - Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); - ОтменитьТранзакцию(); - КонецПопытки; - - КонецЦикла; - - Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); - КонецПопытки; + ВыполнитьСинхронизациюФайловОблачнымСервисом(ПараметрыСинхронизации); ТекстСобытия = НСтр("ru = 'Завершена синхронизация файлов с облачным сервисом'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись); КонецПроцедуры -Функция ВыбратьДанныеПоПравилам(УчетнаяЗапись, МассивИсключений) +Процедура ВыполнитьСинхронизациюФайловОблачнымСервисом(ПараметрыСинхронизации) + + ДеревоФайловСервера = СформироватьСтруктуруДереваФайловСервера(); + АдресСервера = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера); + + Отказ = Ложь; + СинхронизацияВыполнена = Истина; + + // Корневая запись о начале синхронизации + ЗапомнитьСерверныеДанныеСсылки("", "", "", Ложь, Неопределено, Ложь, ПараметрыСинхронизации.УчетнаяЗапись); + + СкачатьДеревоФайловРекурсивно(ДеревоФайловСервера.Строки, АдресСервера, ПараметрыСинхронизации, Отказ); + + Если Отказ = Истина Тогда + + ТекстСобытия = НСтр("ru = 'Не удалось загрузить структуру файлов с сервера, синхронизация не выполнена.'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + Возврат; + + КонецЕсли; + + // Сравниваем с деревом файлов в системе, синхронизация идет по уникальному идентификатору. + ТаблицаФайлов = ВыбратьДанныеПоПравилам(ПараметрыСинхронизации.УчетнаяЗапись); + + Для каждого СтрокаТаблицы Из ТаблицаФайлов Цикл + СтрокаТаблицы.UID1C = Строка(СтрокаТаблицы.ФайлСсылка.УникальныйИдентификатор()); + КонецЦикла; + + // Перебираем дерево, загружаем и добавляем те, которых нет в базе, в таблицу, а по старым заполняем реквизиты с сервера. + ЗагрузитьНовыеПрисоединенныеФайлы(ДеревоФайловСервера.Строки, ТаблицаФайлов, ПараметрыСинхронизации); + + ВычислитьУровеньРекурсивно(ТаблицаФайлов); + ТаблицаФайлов.Индексы.Добавить("ФайлСсылка"); + + ТаблицаФайлов.Сортировать("Уровень, РодительСортировка, ЭтоПапка УБЫВ"); + + // Перебираем таблицу и решаем что делать с файлами и папками. + Для Каждого СтрокаТаблицы Из ТаблицаФайлов Цикл + + Если СтрокаТаблицы.Обработан Тогда + УстановитьСтатусСинхронизации(СтрокаТаблицы, ПараметрыСинхронизации.УчетнаяЗапись); + Продолжить; + КонецЕсли; + + ОбновитьСтатусСинхронизацииФайла = Ложь; + + СозданНовыйВБазе = (НЕ ЗначениеЗаполнено(СтрокаТаблицы.Href)) И (НЕ ЗначениеЗаполнено(СтрокаТаблицы.ToHref)); + + ИзмененВБазе = ЗначениеЗаполнено(СтрокаТаблицы.Изменения);// что-то поменялось + ИзмененоСодержимоеНаСервере = ЗначениеЗаполнено(СтрокаТаблицы.ToEtag) И (СтрокаТаблицы.Etag <> СтрокаТаблицы.ToEtag);// поменялось содержимое + ИзмененНаСервере = ИзмененоСодержимоеНаСервере ИЛИ СтрокаТаблицы.ИзмененНаСервере;// поменялось имя/подчиненность или содержание + + УдаленВБазе = СтрокаТаблицы.ПометкаУдаления; + УдаленНаСервере = ЗначениеЗаполнено(СтрокаТаблицы.Href) И НЕ ЗначениеЗаполнено(СтрокаТаблицы.ToHref); + + НачатьТранзакцию(); + + Попытка + + Если СозданНовыйВБазе И НЕ УдаленВБазе Тогда + // Загрузить файл на облачный сервер + ОбновитьСтатусСинхронизацииФайла = СоздатьФайлВОблачномСервисе(АдресСервера, ПараметрыСинхронизации, СтрокаТаблицы, ТаблицаФайлов); + + ИначеЕсли УдаленНаСервере И НЕ УдаленВБазе Тогда + + ОбновитьСтатусСинхронизацииФайла = УдалитьФайлВОблачномСервисе(ПараметрыСинхронизации, СтрокаТаблицы); + + ИначеЕсли (ИзмененВБазе ИЛИ ИзмененНаСервере) И НЕ (УдаленВБазе ИЛИ УдаленНаСервере) Тогда + + Если ИзмененНаСервере И НЕ ИзмененВБазе Тогда + ОбновитьСтатусСинхронизацииФайла = ИзменитьФайлВОблачномСервисе(ИзмененоСодержимоеНаСервере, ОбновитьСтатусСинхронизацииФайла, ПараметрыСинхронизации, СтрокаТаблицы); + КонецЕсли; + + КонецЕсли; + + Если ОбновитьСтатусСинхронизацииФайла Тогда + // Записываем обновления в регистр сведений статусов. + Если СтрокаТаблицы.ПометкаУдаления Тогда + // Удаляем последний Href, чтобы повторно не идентифицировать. + УдалитьСерверныеДанныеСсылки(СтрокаТаблицы.ФайлСсылка, ПараметрыСинхронизации.УчетнаяЗапись); + Иначе + УстановитьСтатусСинхронизации(СтрокаТаблицы, ПараметрыСинхронизации.УчетнаяЗапись); + КонецЕсли; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + СтрокаТаблицы.ДатаСинхронизации = ТекущаяДатаСеанса(); + УстановитьСтатусСинхронизации(СтрокаТаблицы, ПараметрыСинхронизации.УчетнаяЗапись); + + СинхронизацияВыполнена = Ложь; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Не удалось синхронизировать файл ""%1"" по причине:'"), Строка(СтрокаТаблицы.ФайлСсылка)) + + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстОшибки, ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + КонецПопытки; + + КонецЦикла; + + ЗаписатьРезультатСинхронизации(ПараметрыСинхронизации.УчетнаяЗапись, СинхронизацияВыполнена); + +КонецПроцедуры + +Процедура ЗаписатьРезультатСинхронизации(УчетнаяЗапись, Знач СинхронизацияВыполнена) + + НаборЗаписей = РегистрыСведений.СтатусыСинхронизацииФайловСОблачнымСервисом.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Файл.Установить("", Истина); + НаборЗаписей.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись, Истина); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() > 0 Тогда + Запись = НаборЗаписей.Получить(0); + Запись.ДатаСинхронизацииЗавершение = ТекущаяДатаСеанса(); + Запись.Синхронизирован = СинхронизацияВыполнена; + НаборЗаписей.Записать(); + КонецЕсли; + +КонецПроцедуры + +Функция СформироватьСтруктуруДереваФайловСервера() + + ДеревоФайловСервера = Новый ДеревоЗначений; + ДеревоФайловСервера.Колонки.Добавить("Href"); + ДеревоФайловСервера.Колонки.Добавить("UID1C"); + ДеревоФайловСервера.Колонки.Добавить("Etag"); + ДеревоФайловСервера.Колонки.Добавить("ИмяФайла"); + ДеревоФайловСервера.Колонки.Добавить("ЭтоПапка"); + ДеревоФайловСервера.Колонки.Добавить("ДатаМодификации"); + ДеревоФайловСервера.Колонки.Добавить("Длина"); + Возврат ДеревоФайловСервера; + +КонецФункции + +Функция ИзменитьФайлВОблачномСервисе(Знач ИзмененоСодержимоеНаСервере, ОбновитьСтатусСинхронизацииФайла, Знач ПараметрыСинхронизации, Знач СтрокаТаблицы) + + // загрузим с сервера + Если СтрокаТаблицы.ЭтоПапка Тогда + // Возможно можно отследить переименование. + ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); + ОбъектСтрокиТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; + ОбъектСтрокиТаблицы.Родитель = Неопределено; + ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; + ОбъектСтрокиТаблицы.Записать(); + + СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; + СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; + СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; + СтрокаТаблицы.ПометкаУдаления = Ложь; + + Иначе + + СтруктураИмениФайла = Новый Файл(СтрокаТаблицы.НаименованиеСервер); + НовоеРасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение); + // Загружаем только если поменялось содержимое, т.е. Etag, иначе обновляем реквизиты. + Если ИзмененоСодержимоеНаСервере ИЛИ (НовоеРасширениеФайла <> СтрокаТаблицы.ФайлСсылка.Расширение) Тогда + + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ИмяФайла", СтрокаТаблицы.НаименованиеСервер); + ПараметрыФайла.Вставить("Href", СтрокаТаблицы.ToHref); + ПараметрыФайла.Вставить("Etag", СтрокаТаблицы.ToEtag); + ПараметрыФайла.Вставить("ДатаМодификацииФайла", Неопределено); + ПараметрыФайла.Вставить("ДлинаФайла", Неопределено); + ПараметрыФайла.Вставить("ДляПользователя", ПараметрыСинхронизации.АвторФайлов); + ПараметрыФайла.Вставить("ОбъектВладелец", СтрокаТаблицы.Родитель); + ПараметрыФайла.Вставить("СсылкаСуществующегоФайла", СтрокаТаблицы.ФайлСсылка); + ПараметрыФайла.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); + + ЗагрузитьФайлССервера(ПараметрыФайла, СтрокаТаблицы.ЭтоФайл); + + КонецЕсли; + + ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); + ОбъектСтрокиТаблицы.Наименование = СтруктураИмениФайла.ИмяБезРасширения; + ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; + ОбъектСтрокиТаблицы.Записать(); + + СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; + СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; + СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; + СтрокаТаблицы.ПометкаУдаления = Ложь; + + КонецЕсли; + + СтрокаТаблицы.Обработан = Истина; + СтрокаТаблицы.ДатаСинхронизации = ТекущаяДатаСеанса(); + + ТекстСобытия = НСтр("ru = 'Обновлен объект в базе: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации.УчетнаяЗапись); + + Возврат Истина; + +КонецФункции + +Функция УдалитьФайлВОблачномСервисе(Знач ПараметрыСинхронизации, Знач СтрокаТаблицы) + + Перем ТекстСобытия; + + Если Не ЗначениеЗаполнено(СтрокаТаблицы.ФайлСсылка) Тогда + Возврат Ложь; + КонецЕсли; + + // Если это элемент справочника ИдентификаторыОбъектовМетаданных, то не удаляем. + Если ТипЗнч(СтрокаТаблицы.ФайлСсылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + СтрокаТаблицы.Обработан = Истина; + Возврат Ложь; + КонецЕсли; + // удаляем в базе + + НачатьТранзакцию(); + Попытка + + Если ЭтоФайл(СтрокаТаблицы.ФайлСсылка) Тогда + ОсвободитьФайл(СтрокаТаблицы.ФайлСсылка); + КонецЕсли; + + СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина, Ложь); + ЗафиксироватьТранзакцию(); + Исключение + + ОтменитьТранзакцию(); + ТекстСобытия = НСтр("ru = 'Не удалено в базе: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации.УчетнаяЗапись); + Возврат Ложь; + + КонецПопытки; + + СтрокаТаблицы.ПометкаУдаления = Истина; + СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; + СтрокаТаблицы.Обработан = Истина; + СтрокаТаблицы.ДатаСинхронизации = ТекущаяДатаСеанса(); + + ТекстСобытия = НСтр("ru = 'Удалено в базе: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации.УчетнаяЗапись); + + Возврат Истина; + +КонецФункции + +Функция ЭтоФайл(Файл) + + Возврат Не ЭтоПапкаФайлов(Файл); + +КонецФункции + +Функция СоздатьФайлВОблачномСервисе(Знач АдресСервера, Знач ПараметрыСинхронизации, Знач СтрокаТаблицы, Знач ТаблицаФайлов) + + // отправим новый на сервер + СтрокаТаблицы.Наименование = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтрокаТаблицы.Наименование, "-"); + СтрокаТаблицы.ToHref = ЗакончитьБезСлеша(АдресСервера) + НачатьСлешем(ЗакончитьБезСлеша(РассчитатьHref(СтрокаТаблицы,ТаблицаФайлов))); + + Если ОбщегоНазначения.ОбъектЯвляетсяГруппой(СтрокаТаблицы.ФайлСсылка) Тогда + ВызватьМетодMKCOL(СтрокаТаблицы.ToHref, ПараметрыСинхронизации); + ИначеЕсли СтрокаТаблицы.ЭтоПапка Тогда + ВызватьМетодMKCOL(СтрокаТаблицы.ToHref, ПараметрыСинхронизации); + Иначе + СтрокаТаблицы.ToEtag = ВызватьМетодPUT(СтрокаТаблицы.ToHref, СтрокаТаблицы.ФайлСсылка, ПараметрыСинхронизации, СтрокаТаблицы.ЭтоФайл); + КонецЕсли; + + ОбновитьUID1CФайла(СтрокаТаблицы.ToHref, СтрокаТаблицы.UID1C, ПараметрыСинхронизации); + + СтрокаТаблицы.РодительСервер = СтрокаТаблицы.Родитель; + СтрокаТаблицы.НаименованиеСервер = СтрокаТаблицы.Наименование; + СтрокаТаблицы.ЕстьНаСервере = Истина; + СтрокаТаблицы.Обработан = Истина; + СтрокаТаблицы.ДатаСинхронизации = ТекущаяДатаСеанса(); + + ОбъектЯвляетсяГруппой = ОбщегоНазначения.ОбъектЯвляетсяГруппой(СтрокаТаблицы.ФайлСсылка); + Если Не СтрокаТаблицы.ЭтоФайл + И Не СтрокаТаблицы.ЭтоПапка + И Не ОбъектЯвляетсяГруппой Тогда + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТаблицы.ФайлСсылка, "Редактирует") <> ПараметрыСинхронизации.АвторФайлов Тогда + ЗанятьФайлДляРедактированияСервер(СтрокаТаблицы.ФайлСсылка, ПараметрыСинхронизации.АвторФайлов); + КонецЕсли; + ИначеЕсли Не СтрокаТаблицы.ЭтоПапка И Не ОбъектЯвляетсяГруппой Тогда + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(СтрокаТаблицы.ФайлСсылка); + РаботаСФайламиСлужебныйВызовСервера.ЗанятьФайл(ДанныеФайла, , , ПараметрыСинхронизации.АвторФайлов); + КонецЕсли; + + ТекстСобытия = НСтр("ru = 'Создан объект в облачном сервисе %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации.УчетнаяЗапись); + + Возврат Истина; + +КонецФункции + +Функция ВыбратьДанныеПоПравилам(УчетнаяЗапись, Синхронизировать = ИСТИНА) ЗапросНастройкиСинхронизации = Новый Запрос; ЗапросНастройкиСинхронизации.Текст = "ВЫБРАТЬ @@ -6217,23 +7208,31 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) |ГДЕ - | НастройкиСинхронизацииФайлов.Синхронизировать + | НастройкиСинхронизацииФайлов.Синхронизировать = &Синхронизировать | И НастройкиСинхронизацииФайлов.УчетнаяЗапись = &УчетнаяЗапись"; - ЗапросНастройкиСинхронизации.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + + ЗапросНастройкиСинхронизации.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + ЗапросНастройкиСинхронизации.УстановитьПараметр("Синхронизировать", Синхронизировать); НастройкиСинхронизации = ЗапросНастройкиСинхронизации.Выполнить().Выгрузить(); ТаблицаФайлов = Неопределено; Для Каждого Настройка Из НастройкиСинхронизации Цикл + СправочникФайлов = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Настройка.ТипВладельцаФайла); + Если НЕ ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(СправочникФайлов) Тогда + Продолжить; + КонецЕсли; ВозможностьСоздаватьГруппы = СправочникФайлов.Иерархический; - ДеревоФайлов = ВыбратьДанныеПоПравилуСинхронизации(Настройка, МассивИсключений); + ДеревоФайлов = ВыбратьДанныеПоПравилуСинхронизации(Настройка); Если ТаблицаФайлов = Неопределено Тогда + ТаблицаФайлов = Новый ТаблицаЗначений; Для Каждого Колонка Из ДеревоФайлов.Колонки Цикл ТаблицаФайлов.Колонки.Добавить(Колонка.Имя); КонецЦикла; + КонецЕсли; Если Настройка.ЭтоНастройкаДляЭлементаСправочника Тогда @@ -6243,20 +7242,26 @@ КонецЕсли; Для Каждого СтрокаФайлов Из ДеревоФайлов.Строки Цикл + НоваяСтрока = ТаблицаФайлов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаФайлов); + Если НоваяСтрока.ФайлСсылка = Неопределено Тогда НоваяСтрока.ФайлСсылка = КорневаяПапка; КонецЕсли; + Если НоваяСтрока.Родитель = Неопределено Тогда НоваяСтрока.Родитель = КорневаяПапка; КонецЕсли; + Если ВозможностьСоздаватьГруппы Тогда Если ЗначениеЗаполнено(СтрокаФайлов.ФайлСсылка.Родитель) Тогда НоваяСтрока.Родитель = СтрокаФайлов.ФайлСсылка.Родитель; КонецЕсли; КонецЕсли; + КонецЦикла; + КонецЦикла; Запрос = Новый Запрос; @@ -6277,7 +7282,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) |ГДЕ - | НастройкиСинхронизацииФайлов.Синхронизировать + | НастройкиСинхронизацииФайлов.Синхронизировать = &Синхронизировать | И НастройкиСинхронизацииФайлов.УчетнаяЗапись = &УчетнаяЗапись | |ИНДЕКСИРОВАТЬ ПО @@ -6310,6 +7315,7 @@ |УНИЧТОЖИТЬ ВТВиртуальныеКорневыеПапки"; Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + Запрос.УстановитьПараметр("Синхронизировать", Синхронизировать); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); @@ -6317,7 +7323,7 @@ МассивВиртуальныхПапок = Новый Массив; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Если МассивВиртуальныхПапок.Найти(ВыборкаДетальныеЗаписи.ФайлСсылка) <> Неопределено Тогда + Если МассивВиртуальныхПапок.Найти(ВыборкаДетальныеЗаписи.ФайлСсылка) <> Неопределено Тогда Продолжить; КонецЕсли; МассивВиртуальныхПапок.Добавить(ВыборкаДетальныеЗаписи.ФайлСсылка); @@ -6330,7 +7336,7 @@ КонецФункции -Функция ВыбратьДанныеПоПравилуСинхронизации(НастройкаСинхронизации, МассивИсключений) +Функция ВыбратьДанныеПоПравилуСинхронизации(НастройкаСинхронизации) КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; @@ -6358,6 +7364,7 @@ ЭлементИсключение = Неопределено; КонецЕсли; + МассивИсключений = Новый Массив; СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстЗапросаДляСинхронизацииФайлов( ВладелецФайла, НастройкаСинхронизации, @@ -6399,6 +7406,9 @@ ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Обработан"); + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ДатаСинхронизации"); + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("UID1C"); @@ -6450,10 +7460,10 @@ Параметр.Использование = Истина; КонецЕсли; - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; - ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; - ДеревоЗначений = Новый ДеревоЗначений; + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ДеревоЗначений = Новый ДеревоЗначений; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); @@ -6481,14 +7491,14 @@ |ГДЕ | НЕ УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления | И НастройкиСинхронизацииФайлов.Синхронизировать"; - + Результат = Запрос.Выполнить().Выгрузить(); Для каждого Выборка Из Результат Цикл Если ПустаяСтрока(Выборка.Сервис) Тогда Продолжить; - КонецЕсли; + КонецЕсли; СинхронизироватьФайлыСОблачнымСервисом(Выборка.Ссылка); - КонецЦикла; + КонецЦикла; ОсвободитьЗахваченныеФайлы(); @@ -6503,15 +7513,19 @@ АдресСервера = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера); ТекстСобытия = НСтр("ru = 'Начата проверка синхронизации файлов'") + " " + УчетнаяЗапись.Наименование; - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись); ПрочитатьПараметрыКаталога(РезультатПроверки,АдресСервера, ПараметрыСинхронизации); ТекстСобытия = НСтр("ru = 'Завершена проверка синхронизации файлов'") + " " + УчетнаяЗапись.Наименование; - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись); КонецПроцедуры +Процедура ОсвободитьЗахваченныеФайлыФон(ПараметрыВызова, АдресВХранилище) Экспорт + ОсвободитьЗахваченныеФайлы(); +КонецПроцедуры + Процедура ОсвободитьЗахваченныеФайлы() Запрос = Новый Запрос; @@ -6533,7 +7547,7 @@ | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов |ГДЕ | НЕ УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления - | И НЕ УчетныеЗаписиСинхронизацииФайлов.Ссылка В + | ИЛИ НЕ УчетныеЗаписиСинхронизацииФайлов.Ссылка В | (ВЫБРАТЬ | НастройкиСинхронизацииФайлов.УчетнаяЗапись | ИЗ @@ -6578,7 +7592,7 @@ АдресСервера = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера); ТекстСобытия = НСтр("ru = 'Начало освобождения файлов, захваченных облачным сервисом.'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись); Попытка @@ -6596,106 +7610,64 @@ Если Отказ = Истина Тогда ТекстОшибки = НСтр("ru = 'При загрузке структуры файлов с сервера произошла ошибка, синхронизация не выполнена.'"); ВызватьИсключение ТекстОшибки; - КонецЕсли; + КонецЕсли; // Сравниваем с деревом файлов в системе, синхронизация идет по уникальному идентификатору. - ТаблицаФайлов = ЗахваченныеФайлы(УчетнаяЗапись); + ТаблицаФайлов = ВыбратьДанныеПоПравилам(УчетнаяЗапись, Ложь); - // Перебираем дерево, загружаем и добавляем те, которых нет в базе, в таблицу, а по старым заполняем реквизиты с сервера. - ЗаполнитьДанныеИзОблачногоСервиса(ДеревоФайловСервера.Строки, ТаблицаФайлов, ПараметрыСинхронизации); + Если ТаблицаФайлов <> Неопределено Тогда - ВычислитьУровеньРекурсивно(ТаблицаФайлов); - ТаблицаФайлов.Сортировать("ЭтоПапка ВОЗР, Уровень УБЫВ, РодительСортировка УБЫВ"); - // Перебираем таблицу и решаем что делать с файлами и папками. - Для Каждого СтрокаТаблицы Из ТаблицаФайлов Цикл - - Если СтрокаТаблицы.Обработан Тогда - Продолжить; - КонецЕсли; - - НачатьТранзакцию(); - - Попытка + ВычислитьУровеньРекурсивно(ТаблицаФайлов); + ТаблицаФайлов.Сортировать("ЭтоПапка ВОЗР, Уровень УБЫВ, РодительСортировка УБЫВ"); + // Перебираем таблицу и решаем что делать с файлами и папками. + Для Каждого СтрокаТаблицы Из ТаблицаФайлов Цикл - // удаляем на сервере - ВызватьМетодDELETE(СтрокаТаблицы.Href, ПараметрыСинхронизации); - - ТекстСобытия = НСтр("ru = 'Удален объект в облачном сервисе %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.НаименованиеСервер), ПараметрыСинхронизации); - - СтрокаТаблицы.РодительСервер = Неопределено; - СтрокаТаблицы.НаименованиеСервер = ""; - СтрокаТаблицы.ЕстьНаСервере = Ложь; - СтрокаТаблицы.Обработан = Истина; - - Если Не СтрокаТаблицы.ЭтоПапка Тогда - - ОсвободитьФайл(СтрокаТаблицы.ФайлСсылка); - + Если СтрокаТаблицы.Обработан Тогда + Продолжить; КонецЕсли; - // Удаляем последний Href, чтобы повторно не идентифицировать. - УдалитьСерверныеДанныеСсылки(СтрокаТаблицы.ФайлСсылка, УчетнаяЗапись); + НачатьТранзакцию(); - ЗафиксироватьТранзакцию(); + Попытка + + Если ЗначениеЗаполнено(СтрокаТаблицы.Href) Тогда + // удаляем на сервере + ВызватьМетодDELETE(СтрокаТаблицы.Href, ПараметрыСинхронизации); + + ТекстСобытия = НСтр("ru = 'Удален объект в облачном сервисе %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.НаименованиеСервер), ПараметрыСинхронизации.УчетнаяЗапись); + КонецЕсли; + + СтрокаТаблицы.РодительСервер = Неопределено; + СтрокаТаблицы.НаименованиеСервер = ""; + СтрокаТаблицы.ЕстьНаСервере = Ложь; + СтрокаТаблицы.Обработан = Истина; + + Если Не СтрокаТаблицы.ЭтоПапка Тогда + ОсвободитьФайл(СтрокаТаблицы.ФайлСсылка); + КонецЕсли; + + // Удаляем последний Href, чтобы повторно не идентифицировать. + УдалитьСерверныеДанныеСсылки(СтрокаТаблицы.ФайлСсылка, УчетнаяЗапись); + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + КонецПопытки; - Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); - ОтменитьТранзакцию(); - КонецПопытки; - - КонецЦикла; + КонецЦикла; + КонецЕсли; Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); - КонецПопытки; + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + КонецПопытки; ТекстСобытия = НСтр("ru = 'Завершено освобождения файлов, захваченных облачным сервисом'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись); КонецПроцедуры -Функция ЗахваченныеФайлы(УчетнаяЗапись) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл КАК ФайлСсылка, - | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл.Наименование КАК Наименование, - | СтатусыСинхронизацииФайловСОблачнымСервисом.Href, - | СтатусыСинхронизацииФайловСОблачнымСервисом.Etag, - | СтатусыСинхронизацииФайловСОблачнымСервисом.УникальныйИдентификатор1С КАК UID1C, - | СтатусыСинхронизацииФайловСОблачнымСервисом.ЭтоФайл, - | СтатусыСинхронизацииФайловСОблачнымСервисом.ЭтоВладелецФайла КАК ЭтоПапка, - | СтатусыСинхронизацииФайловСОблачнымСервисом.ВладелецФайла КАК Родитель, - | ИСТИНА КАК ЕстьВБазе, - | ЛОЖЬ КАК ЕстьНаСервере, - | НЕОПРЕДЕЛЕНО КАК Изменения, - | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Href, """") КАК Href, - | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Etag, """") КАК Etag, - | ЛОЖЬ КАК Обработан, - | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК ToHref, - | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК ToEtag, - | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК РодительСервер, - | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК НаименованиеСервер, - | ЛОЖЬ КАК ИзмененНаСервере, - | НЕОПРЕДЕЛЕНО КАК Уровень, - | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК РодительСортировка - |ИЗ - | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом - |ГДЕ - | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись = &УчетнаяЗапись"; - - Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); - - РезультатЗапроса = Запрос.Выполнить(); - - ЗахваченныеФайлы = РезультатЗапроса.Выгрузить(); - - Возврат ЗахваченныеФайлы; - -КонецФункции - Процедура ПриЗаписиИзвлеченногоТекста(ФайлОбъект) Если ЭтоЭлементРаботаСФайлами(ФайлОбъект) Тогда @@ -6704,6 +7676,74 @@ КонецПроцедуры +Функция ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись) Экспорт + + Отбор = Новый Структура; + Отбор.Вставить("СобытиеЖурналаРегистрации ", РаботаСФайламиКлиентСервер.СобытиеЖурналаРегистрацииСинхронизация()); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | СтатусыСинхронизацииФайловСОблачнымСервисом.НомерСеанса КАК НомерСеанса, + | СтатусыСинхронизацииФайловСОблачнымСервисом.ДатаСинхронизацииНачало КАК ДатаСинхронизацииНачало, + | СтатусыСинхронизацииФайловСОблачнымСервисом.ДатаСинхронизацииЗавершение КАК ДатаСинхронизацииЗавершение + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = """" + | И СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись = &УчетнаяЗапись"; + + Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Если РезультатЗапроса.Следующий() Тогда + + СписокСеансов = Новый СписокЗначений; + СписокСеансов.Добавить(РезультатЗапроса.НомерСеанса); + + Отбор.Вставить("Данные ", УчетнаяЗапись); + Отбор.Вставить("ДатаНачала", РезультатЗапроса.ДатаСинхронизацииНачало); + Отбор.Вставить("ДатаОкончания", РезультатЗапроса.ДатаСинхронизацииЗавершение); + Отбор.Вставить("Сеанс", СписокСеансов); + + КонецЕсли; + + Возврат Отбор; + +КонецФункции + +Функция СведенияОСинхронизации(ВладелецФайла = Неопределено) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись КАК УчетнаяЗапись, + | СтатусыСинхронизацииФайловСОблачнымСервисом.ДатаСинхронизацииНачало КАК ДатаСинхронизации, + | СтатусыСинхронизацииФайловСОблачнымСервисом.НомерСеанса КАК НомерСеанса, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Синхронизирован КАК Синхронизирован, + | СтатусыСинхронизацииФайловСОблачнымСервисом.ДатаСинхронизацииЗавершение КАК ДатаСинхронизацииЗавершение, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Href КАК Href, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Наименование КАК УчетнаяЗаписьНаименование, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Сервис КАК Сервис + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисомКорень + | ПО СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись = СтатусыСинхронизацииФайловСОблачнымСервисомКорень.УчетнаяЗапись + | И (СтатусыСинхронизацииФайловСОблачнымСервисомКорень.Файл = """""""") + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.ВладелецФайла = &ВладелецФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + Таблица = Запрос.Выполнить().Выгрузить(); + + Пока Таблица.Количество() > 0 Цикл + Результат = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Таблица[0]); + Возврат Результат; + КонецЦикла; + + Возврат Новый Структура(); + +КонецФункции + Процедура ОбновитьПутьТомаLinux() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -6726,7 +7766,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.ТомаХраненияФайлов.ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Выборка.Ссылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); Том = Выборка.Ссылка.ПолучитьОбъект(); Том.ПолныйПутьLinux = СтрЗаменить(Том.ПолныйПутьLinux , "/\", "/"); @@ -6746,4 +7785,131 @@ КонецПроцедуры +Процедура УдалитьУстаревшиеОбработчикиОбновления() Экспорт + + // Удаление устаревшего отложенного обработчика обновления. + ОбновлениеИнформационнойБазы.УдалитьОтложенныйОбработчикИзОчереди("ФайловыеФункцииСлужебный.ОбновитьПутьТомаLinux"); + +КонецПроцедуры + +// Возвращает признак принадлежности узла к плану обмена РИБ. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. +// +// Возвращаемое значение: +// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. +// +Функция ЭтоУзелРаспределеннойИнформационнойБазы(Знач УзелИнформационнойБазы) + + Возврат РаботаСФайламиСлужебныйПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы( + УзелИнформационнойБазы.Метаданные().ПолноеИмя()); + +КонецФункции + +Процедура ПоискСсылокНаНесуществующиеФайлыВТоме(ОбъектМетаданных, ПараметрыПроверки) + + МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); + МодульКонтрольВеденияУчетаПереопределяемый = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаПереопределяемый"); + + Реквизиты = ОбъектМетаданных.Реквизиты; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК Ссылка, + | &ПолеВладельца КАК Владелец, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Ссылка) КАК Файл, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Том) КАК Том, + | ОбъектМетаданных.ПутьКФайлу КАК ПутьКФайлу, + | ТомаХраненияФайлов.ПолныйПутьLinux КАК ПолныйПутьLinux, + | ТомаХраненияФайлов.ПолныйПутьWindows КАК ПолныйПутьWindows + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов + | ПО ОбъектМетаданных.Том = ТомаХраненияФайлов.Ссылка + |ГДЕ + | ОбъектМетаданных.Ссылка > &Ссылка + | И ОбъектМетаданных.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Ссылка"; + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); + Если ПолноеИмя = "Справочник.ВерсииФайлов" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладельца", "ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Владелец) "); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладельца", "Неопределено "); + КонецЕсли; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", ""); + Результат = Запрос.Выполнить().Выгрузить(); + + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + ПутьКФайлу = ""; + Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда + ПутьКФайлу = СтрокаРезультата.ПолныйПутьLinux + СтрокаРезультата.ПутьКФайлу; + Иначе + ПутьКФайлу = СтрокаРезультата.ПолныйПутьWindows + СтрокаРезультата.ПутьКФайлу; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПутьКФайлу) Тогда + Продолжить; + КонецЕсли; + + ПроверяемыйФайл = Новый Файл(ПутьКФайлу); + Если Не ПроверяемыйФайл.Существует() Тогда + + СсылкаНаОбъект = СтрокаРезультата.Ссылка; + + Если СтрокаРезультата.Владелец <> Неопределено Тогда + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия ""%1"" файла ""%2"" не найдена в томе ""%3"".'"), + СтрокаРезультата.Файл, СтрокаРезультата.Владелец, СтрокаРезультата.Том); + Иначе + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не найден в томе ""%2"".'"), + СтрокаРезультата.Файл, СтрокаРезультата.Том); + КонецЕсли; + + Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); + Проблема.УточнениеПроблемы = УточнениеПроблемы; + Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда + Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); + КонецЕсли; + + МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема); + + КонецЕсли; + КонецЦикла; + + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка); + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + Запрос = Неопределено; + +КонецПроцедуры + +Функция ПроверитьОбъектПрисоединенныхФайлов(ОбъектМетаданных) + + Если СтрЗаканчиваетсяНа(ОбъектМетаданных.Имя, "ПрисоединенныеФайлы") Или ОбъектМетаданных.ПолноеИмя() = "Справочник.ВерсииФайлов" Тогда + Реквизиты = ОбъектМетаданных.Реквизиты; + Если Реквизиты.Найти("ПутьКФайлу") <> Неопределено И Реквизиты.Найти("Том") <> Неопределено Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index 670fdc633..8266c1433 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -84,6 +84,10 @@ // Вернет размер файлов на томе - в байтах. Функция ПодсчитатьРазмерФайловНаТоме(СсылкаТома) Экспорт + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат 0; + КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -214,7 +218,7 @@ КонецПопытки; КонецЕсли; Иначе - ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); ДвоичныеДанные = ХранилищеФайла.Получить(); КонецЕсли; @@ -256,241 +260,37 @@ КонецФункции -// Читает ХранилищеФайла из информационной базы. +// Создать папку файлов. // // Параметры: -// ВерсияСсылка - ссылка на версию файла. -// -// Возвращаемое значение: -// ХранилищеЗначения, с двоичными данными файла. -Функция ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка) Экспорт - - ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВерсияСсылка, "Ссылка", Истина); - - Если ЕстьПраваНаОбъект = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Файл = ВерсияСсылка; - МенеджерЗаписи.Прочитать(); - - Возврат МенеджерЗаписи.ДвоичныеДанныеФайла; - -КонецФункции - -// Создать папку файлов -// Параметры: -// Имя - Строка - имя папки -// Родитель - СправочникСсылка.ПапкиФайлов - родительская папка. -// Пользователь - СправочникСсылка.Пользователи - ответственный за папку. +// Имя - Строка - имя папки +// Родитель - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - родительская папка. +// Пользователь - СправочникСсылка.Пользователи - ответственный за папку. +// ГруппаФайлов - ОпределяемыйТип.ПрисоединенныйФайл - группа (для иерархических справочников файлов). // // Возвращаемое значение: // СправочникСсылка.ПапкиФайлов. // -Функция СправочникиПапкиСоздатьЭлемент(Имя, Родитель, Пользователь = Неопределено, ИмяСправочникаХранилищаФайлов = "", ПапкаРодитель = Неопределено) Экспорт +Функция СоздатьПапкуФайлов(Имя, Родитель, Пользователь = Неопределено, ГруппаФайлов = Неопределено) Экспорт - Если ТипЗнч(Родитель) = Тип("СправочникСсылка.ПапкиФайлов") Тогда + Если ЭтоСправочникФайлы(Родитель) Тогда Папка = Справочники.ПапкиФайлов.СоздатьЭлемент(); - Если Пользователь = Неопределено Тогда - Папка.Ответственный = Пользователи.ТекущийПользователь(); - Иначе - Папка.Ответственный = Пользователь; - КонецЕсли; + Папка.Ответственный = ?(Пользователь <> Неопределено, Пользователь, Пользователи.ТекущийПользователь()); Папка.Родитель = Родитель; Иначе - Папка = Справочники[ИмяСправочникаХранилищаФайлов].СоздатьГруппу(); + Папка = Справочники[РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(Родитель)].СоздатьГруппу(); Папка.ВладелецФайла = Родитель; - Если Пользователь = Неопределено Тогда - Папка.Автор = Пользователи.ТекущийПользователь(); - Иначе - Папка.Автор = Пользователь; - КонецЕсли; - Папка.Родитель = ПапкаРодитель; + Папка.Автор = ?(Пользователь <> Неопределено, Пользователь, Пользователи.ТекущийПользователь()); + Папка.Родитель = ГруппаФайлов; КонецЕсли; Папка.Наименование = Имя; Папка.ДатаСоздания = ТекущаяДатаСеанса(); - Папка.Заполнить(Неопределено); Папка.Записать(); Возврат Папка.Ссылка; КонецФункции -// Создает версию сохраняемого файла для сохранения в ИБ. -// -// Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - файл, для которого создается новая версия. -// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". -// -// Возвращаемое значение: -// СправочникСсылка.ВерсииФайлов - созданная версия. -// -Функция СоздатьВерсию(ФайлСсылка, СведенияОФайле) Экспорт - - - ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, "Ссылка", Истина); - - Если ЕстьПраваНаОбъект = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - ХранилищеФайла = Неопределено; - - УстановитьПривилегированныйРежим(Истина); - - Если Не ЗначениеЗаполнено(СведенияОФайле.ВремяИзмененияУниверсальное) - Или СведенияОФайле.ВремяИзмененияУниверсальное > ТекущаяУниверсальнаяДата() Тогда - - СведенияОФайле.ВремяИзмененияУниверсальное = ТекущаяУниверсальнаяДата(); - КонецЕсли; - - Если Не ЗначениеЗаполнено(СведенияОФайле.ВремяИзменения) - Или УниверсальноеВремя(СведенияОФайле.ВремяИзменения) > СведенияОФайле.ВремяИзмененияУниверсальное Тогда - - СведенияОФайле.ВремяИзменения = ТекущаяДатаСеанса(); - КонецЕсли; - - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); - - Версия = Справочники.ВерсииФайлов.СоздатьЭлемент(); - - Если СведенияОФайле.НоваяВерсияНомерВерсии = Неопределено Тогда - Версия.НомерВерсии = НайтиМаксимальныйНомерВерсии(ФайлСсылка) + 1; - Иначе - Версия.НомерВерсии = СведенияОФайле.НоваяВерсияНомерВерсии; - КонецЕсли; - - Версия.Владелец = ФайлСсылка; - Версия.ДатаМодификацииУниверсальная = СведенияОФайле.ВремяИзмененияУниверсальное; - Версия.ДатаМодификацииФайла = СведенияОФайле.ВремяИзменения; - - Версия.Комментарий = СведенияОФайле.НоваяВерсияКомментарий; - - Если СведенияОФайле.НоваяВерсияАвтор = Неопределено Тогда - Версия.Автор = Пользователи.ТекущийПользователь(); - Иначе - Версия.Автор = СведенияОФайле.НоваяВерсияАвтор; - КонецЕсли; - - Если СведенияОФайле.НоваяВерсияДатаСоздания = Неопределено Тогда - Версия.ДатаСоздания = ТекущаяДатаСеанса(); - Иначе - Версия.ДатаСоздания = СведенияОФайле.НоваяВерсияДатаСоздания; - КонецЕсли; - - Версия.ПолноеНаименование = СведенияОФайле.ИмяБезРасширения; - Версия.Размер = СведенияОФайле.Размер; - Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки); - - ТипХраненияФайлов = РаботаСФайламиСлужебный.ТипХраненияФайлов(); - Версия.ТипХраненияФайла = ТипХраненияФайлов; - - Если СведенияОФайле.СсылкаНаВерсиюИсточник <> Неопределено Тогда // создание Файла из шаблона - - ТипХраненияФайловШаблона = СведенияОФайле.СсылкаНаВерсиюИсточник.ТипХраненияФайла; - - Если ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - // И шаблон, и новый Файл - в базе. - // При создании Файла из шаблона хранилище значения копируется напрямую. - ХранилищеФайла = СведенияОФайле.АдресВременногоХранилищаФайла; - - ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - // И шаблон, и новый Файл - на диске - просто копируем файл. - - Если Не СведенияОФайле.СсылкаНаВерсиюИсточник.Том.Пустая() Тогда - ПолныйПутьФайлаШаблона = РаботаСФайламиСлужебный.ПолныйПутьТома(СведенияОФайле.СсылкаНаВерсиюИсточник.Том) - + СведенияОФайле.СсылкаНаВерсиюИсточник.ПутьКФайлу; - - Сведения = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ПолныйПутьФайлаШаблона, СведенияОФайле.ВремяИзмененияУниверсальное, - СведенияОФайле.ИмяБезРасширения, СведенияОФайле.РасширениеБезТочки, Версия.НомерВерсии, СведенияОФайле.Зашифрован); - Версия.Том = Сведения.Том; - Версия.ПутьКФайлу = Сведения.ПутьКФайлу; - КонецЕсли; - - ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - // Шаблон в базе, новый Файл - на диске. - // В этом случае в АдресВременногоХранилищаФайла находится ХранилищеЗначения с файлом. - Сведения = РаботаСФайламиСлужебный.ДобавитьФайлВТом(СведенияОФайле.АдресВременногоХранилищаФайла.Получить(), - СведенияОФайле.ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, СведенияОФайле.РасширениеБезТочки, - Версия.НомерВерсии, СведенияОФайле.Зашифрован); - Версия.Том = Сведения.Том; - Версия.ПутьКФайлу = Сведения.ПутьКФайлу; - - ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - // Шаблон на диске, новый Файл - в базе. - Если Не СведенияОФайле.СсылкаНаВерсиюИсточник.Том.Пустая() Тогда - ПолныйПутьФайлаШаблона = РаботаСФайламиСлужебный.ПолныйПутьТома(СведенияОФайле.СсылкаНаВерсиюИсточник.Том) + СведенияОФайле.СсылкаНаВерсиюИсточник.ПутьКФайлу; - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаШаблона); - ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); - КонецЕсли; - - КонецЕсли; - Иначе // Создание объекта Файл на основе выбранного файла с диска. - - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - - ХранилищеФайла = Новый ХранилищеЗначения( - ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла)); - - Если Версия.Размер = 0 Тогда - ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); - Версия.Размер = ДвоичныеДанныеФайла.Размер(); - - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); - КонецЕсли; - - Иначе // хранение на диске - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); - - Если Версия.Размер = 0 Тогда - Версия.Размер = ДвоичныеДанные.Размер(); - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); - КонецЕсли; - - Сведения = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, - СведенияОФайле.ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, СведенияОФайле.РасширениеБезТочки, - Версия.НомерВерсии); - Версия.Том = Сведения.Том; - Версия.ПутьКФайлу = Сведения.ПутьКФайлу; - - КонецЕсли; - - КонецЕсли; - - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - - Если ТипЗнч(СведенияОФайле.АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда - // При создании Файла из шаблона хранилище значения копируется напрямую. - Версия.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - КонецЕсли; - - Если Версия.Размер = 0 Тогда - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); - Версия.Размер = ДвоичныеДанныеФайла.Размер(); - КонецЕсли; - КонецЕсли; - - Версия.Заполнить(Неопределено); - Версия.Записать(); - - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ХранилищеФайла); - КонецЕсли; - - Возврат Версия.Ссылка; - -КонецФункции - // Создает файл в ИБ вместе с версией. // // Параметры: @@ -511,14 +311,14 @@ Версия = Справочники.ВерсииФайлов.ПустаяСсылка(); Если СведенияОФайле.ХранитьВерсии Тогда // Создадим версию сохраняемого файла для сохранения в карточке Файла. - Версия = СоздатьВерсию(ФайлСсылка, СведенияОФайле); + Версия = РаботаСФайламиСлужебный.СоздатьВерсию(ФайлСсылка, СведенияОФайле); // Подставим ссылку на версию в карточку Файла. КонецЕсли; - ОбновитьВерсиюВФайле(ФайлСсылка, Версия, СведенияОФайле.АдресВременногоХранилищаТекста); + РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ФайлСсылка, Версия, СведенияОФайле.АдресВременногоХранилищаТекста); Если СведенияОФайле.Кодировка <> Неопределено Тогда ЗаписатьКодировкуВерсииФайла( - ?(Версия = Справочники.ВерсииФайлов.ПустаяСсылка(),ФайлСсылка, Версия), СведенияОФайле.Кодировка); + ?(Версия = Справочники.ВерсииФайлов.ПустаяСсылка(), ФайлСсылка, Версия), СведенияОФайле.Кодировка); КонецЕсли; ЕстьПравоСохранения = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); @@ -552,7 +352,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ДанныеФайла.Ссылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ДанныеФайла.Ссылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); @@ -566,13 +365,21 @@ РаботаСФайламиПереопределяемый.ПриОсвобожденииФайла(ДанныеФайла, УникальныйИдентификатор); ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецПроцедуры +Функция ОсвободитьФайлы(Знач Файлы) Экспорт + + Для Каждого ПрисоединенныйФайл Из Файлы Цикл + РаботаСФайламиСлужебный.ОсвободитьФайл(ПрисоединенныйФайл); + КонецЦикла; + Возврат РаботаСФайламиСлужебный.КоличествоЗанятыхФайлов(); + +КонецФункции + // Занимает файл на редактирование (checkout). // // Параметры: @@ -597,7 +404,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ДанныеФайла.Ссылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ДанныеФайла.Ссылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); @@ -624,9 +430,8 @@ ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; Возврат Истина; @@ -648,6 +453,7 @@ Если ЕстьПраваНаОбъект = Неопределено Тогда Возврат Неопределено; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ФайлСсылка); ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); @@ -790,290 +596,6 @@ КонецПроцедуры -// Обновляет или создает версию Файла и возвращает ссылку на обновленную версию (или Ложь, если файл бинарно не -// изменен). -// -// Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - файл, для которого создается новая версия. -// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме -// "ФайлСВерсией". -// ВерсияСсылка - СправочникСсылка.ВерсииФайлов - версия файла, которую надо обновить. -// УникальныйИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, -// в контексте которой выполняется операция. -// -// Возвращаемое значение: -// СправочникСсылка.ВерсииФайлов - созданная или измененная версия; Неопределено, если файл бинарно не был изменен. -// -Функция ОбновитьВерсиюФайла(ФайлСсылка, - СведенияОФайле, - ВерсияСсылка = Неопределено, - УникальныйИдентификаторФормы = Неопределено, - Пользователь = Неопределено) - - ЕстьПравоСохранения = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); - - ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, "Ссылка", Истина); - - Если ЕстьПраваНаОбъект = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - ВремяИзмененияУниверсальное = СведенияОФайле.ВремяИзмененияУниверсальное; - Если НЕ ЗначениеЗаполнено(ВремяИзмененияУниверсальное) - ИЛИ ВремяИзмененияУниверсальное > ТекущаяУниверсальнаяДата() Тогда - ВремяИзмененияУниверсальное = ТекущаяУниверсальнаяДата(); - КонецЕсли; - - ВремяИзменения = СведенияОФайле.ВремяИзменения; - Если НЕ ЗначениеЗаполнено(ВремяИзменения) - ИЛИ УниверсальноеВремя(ВремяИзменения) > ВремяИзмененияУниверсальное Тогда - ВремяИзменения = ТекущаяДатаСеанса(); - КонецЕсли; - - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); - - ТекущаяВерсияРазмер = 0; - ДвоичныеДанные = Неопределено; - ТекущаяВерсияТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ТекущаяВерсияТом = Неопределено; - ТекущаяВерсияПутьКФайлу = Неопределено; - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); - ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); - - ВерсияСсылкаДляСравненияРазмера = ВерсияСсылка; - Если ВерсияСсылка <> Неопределено Тогда - ВерсияСсылкаДляСравненияРазмера = ВерсияСсылка; - ИначеЕсли ВозможностьХранитьВерсии И ЗначениеЗаполнено(ФайлСсылка.ТекущаяВерсия)Тогда - ВерсияСсылкаДляСравненияРазмера = ФайлСсылка.ТекущаяВерсия; - Иначе - ВерсияСсылкаДляСравненияРазмера = ФайлСсылка; - КонецЕсли; - - КодировкаПредВерсии = ПолучитьКодировкуВерсииФайла(ВерсияСсылкаДляСравненияРазмера); - - СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВерсияСсылкаДляСравненияРазмера, - "Размер, ТипХраненияФайла, Том, ПутьКФайлу"); - ТекущаяВерсияРазмер = СтруктураРеквизитов.Размер; - ТекущаяВерсияТипХраненияФайла = СтруктураРеквизитов.ТипХраненияФайла; - ТекущаяВерсияТом = СтруктураРеквизитов.Том; - ТекущаяВерсияПутьКФайлу = СтруктураРеквизитов.ПутьКФайлу; - - ХранилищеФайла = Неопределено; - Если СведенияОФайле.Размер = ТекущаяВерсияРазмер Тогда - ДвоичныеДанныеПредыдущейВерсии = Неопределено; - - Если ТекущаяВерсияТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ ТекущаяВерсияТом.Пустая() Тогда - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(ТекущаяВерсияТом) + ТекущаяВерсияПутьКФайлу; - ДвоичныеДанныеПредыдущейВерсии = Новый ДвоичныеДанные(ПолныйПуть); - КонецЕсли; - Иначе - ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылкаДляСравненияРазмера); - ДвоичныеДанныеПредыдущейВерсии = ХранилищеФайла.Получить(); - КонецЕсли; - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); - - Если ДвоичныеДанныеПредыдущейВерсии = ДвоичныеДанные Тогда - Возврат Неопределено; // Файл бинарно не изменен - вернем Ложь. - КонецЕсли; - КонецЕсли; - - СтарыйТипХранения = Неопределено; - ВерсияЗаблокирована = Ложь; - Версия = Неопределено; - - Если СведенияОФайле.ХранитьВерсии Тогда - ЗаголовокОшибки = НСтр("ru = 'Ошибка при записи новой версии присоединенных файлов.'"); - ОкончаниеОшибки = НСтр("ru = 'В этом случае запись версии файла невозможна.'"); - - ИмяСправочникаХранилищаВерсийФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияВерсийФайлов( - ТипЗнч(ФайлСсылка.ВладелецФайла), "", ЗаголовокОшибки, ОкончаниеОшибки); - - Версия = Справочники[ИмяСправочникаХранилищаВерсийФайлов].СоздатьЭлемент(); - Версия.РодительскаяВерсия = ФайлСсылка.ТекущаяВерсия; - Версия.НомерВерсии = НайтиМаксимальныйНомерВерсии(ФайлСсылка) + 1; - Иначе - - Если ВерсияСсылка = Неопределено Тогда - Версия = ФайлСсылка.ТекущаяВерсия.ПолучитьОбъект(); - Иначе - Версия = ВерсияСсылка.ПолучитьОбъект(); - КонецЕсли; - - ЗаблокироватьДанныеДляРедактирования(Версия.Ссылка, , УникальныйИдентификаторФормы); - ВерсияЗаблокирована = Истина; - - // Удалим файл с диска - мы заместим его новым. - Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ Версия.Том.Пустая() Тогда - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; - ФайлНаДиске = Новый Файл(ПолныйПуть); - Если ФайлНаДиске.Существует() Тогда - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); - КонецЕсли; - ПутьСПодкаталогом = ФайлНаДиске.Путь; - МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, "*.*"); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ПутьСПодкаталогом); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - Версия.Владелец = ФайлСсылка; - Если Пользователь = Неопределено Тогда - Версия.Автор = Пользователи.ТекущийПользователь(); - Иначе - Версия.Автор = Пользователь; - КонецЕсли; - Версия.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; - Версия.ДатаМодификацииФайла = ВремяИзменения; - Версия.ДатаСоздания = ТекущаяДатаСеанса(); - Версия.Размер = СведенияОФайле.Размер; - Версия.ПолноеНаименование = СведенияОФайле.ИмяБезРасширения; - Версия.Наименование = СведенияОФайле.ИмяБезРасширения; - Версия.Комментарий = СведенияОФайле.Комментарий; - Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки); - - ТипХраненияФайлов = РаботаСФайламиСлужебный.ТипХраненияФайлов(); - Версия.ТипХраненияФайла = ТипХраненияФайлов; - - Если ДвоичныеДанные = Неопределено Тогда - ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); - КонецЕсли; - - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - - ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); - - Если Версия.Размер = 0 Тогда - ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); - Версия.Размер = ДвоичныеДанныеФайла.Размер(); - - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); - КонецЕсли; - - // очистим поля - Версия.ПутьКФайлу = ""; - Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - Иначе // хранение на диске - - Если Версия.Размер = 0 Тогда - Версия.Размер = ДвоичныеДанные.Размер(); - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); - КонецЕсли; - - ФайлЗашифрован = Ложь; - Если СведенияОФайле.Зашифрован <> Неопределено Тогда - ФайлЗашифрован = СведенияОФайле.Зашифрован; - КонецЕсли; - - Сведения = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, - ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, Версия.Расширение, - Версия.НомерВерсии, ФайлЗашифрован); - Версия.Том = Сведения.Том; - Версия.ПутьКФайлу = Сведения.ПутьКФайлу; - ХранилищеФайла = Новый ХранилищеЗначения(Неопределено); // очистим ХранилищеЗначения - - КонецЕсли; - - Если СведенияОФайле.АдресВременногоХранилищаТекста <> Неопределено Тогда - Если РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - Иначе - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - КонецЕсли; - Иначе - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - - Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда - Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; - КонецЕсли; - - Если Версия.Размер = 0 Тогда - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); - Версия.Размер = ДвоичныеДанныеФайла.Размер(); - КонецЕсли; - КонецЕсли; - - Версия.Заполнить(Неопределено); - Версия.Записать(); - - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ХранилищеФайла); - КонецЕсли; - - Если ВерсияЗаблокирована Тогда - РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификаторФормы); - КонецЕсли; - - ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии); - - Если ЕстьПравоСохранения Тогда - НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(ФайлСсылка); - ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла); - КонецЕсли; - - Возврат Версия.Ссылка; - -КонецФункции - -// Подставляет ссылку на версию в карточку Файла. -// -// Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. -// Версия - СправочникСсылка.ВерсииФайлов - версия файла. -// АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с -// файлом текста или ХранилищеЗначения - непосредственно содержит двоичные -// данные с файлом текста. -// УникальныйИдентификатор - уникальный идентификатор формы. -// -Процедура ОбновитьВерсиюВФайле(ФайлСсылка, - Версия, - Знач АдресВременногоХранилищаТекста, - УникальныйИдентификатор = Неопределено) Экспорт - - НачатьТранзакцию(); - Попытка - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; - БлокировкаДанных.Заблокировать(); - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - - ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - - ФайлОбъект.ТекущаяВерсия = Версия.Ссылка; - - Если ТипЗнч(АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда - // При создании Файла из шаблона хранилище значения копируется напрямую. - ФайлОбъект.ТекстХранилище = АдресВременногоХранилищаТекста; - Иначе - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); - КонецЕсли; - - ФайлОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); - ЗафиксироватьТранзакцию(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - -КонецПроцедуры - Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено, Знач ПолучатьСсылкуНаДвоичныеДанные = Истина, @@ -1181,15 +703,14 @@ ФайлСсылка, СообщениеОбОшибке); - ТипВладельцаФайла = ТипЗнч(ДанныеФайла.Владелец); - Если ТипВладельцаФайла = Тип("СправочникСсылка.ПапкиФайлов") Тогда + Если ЭтоСправочникФайлы(ДанныеФайла.Владелец) Тогда ПредставлениеВладельца = ПолныйПутьПапки(ДанныеФайла.Владелец); Иначе ПредставлениеВладельца = ДанныеФайла.Владелец; КонецЕсли; ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Присоединен к %1 : %2'"), - Строка(ТипВладельцаФайла), + Строка(ТипЗнч(ДанныеФайла.Владелец)), ПредставлениеВладельца); ВызватьИсключение РаботаСФайламиСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( @@ -1215,7 +736,7 @@ // Возвращаемое значение: // Строка - текст запроса. // -Функция ТекстЗапросаДляИзвлеченияТекста(ПолучитьВсеФайлы = Ложь) Экспорт +Функция ТекстЗапросаДляИзвлеченияТекста(ПолучитьВсеФайлы = Ложь, ДополнительныеПоля = Ложь) Экспорт // Текст запроса формируется по всем справочникам присоединенных файлов. ТекстЗапроса = ""; @@ -1242,10 +763,8 @@ |"; КонецЕсли; - ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляФайловСНеизвлеченнымТекстом( - ИмяСправочника, - ЧислоФайловВВыборке, - ПолучитьВсеФайлы); + ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, + ЧислоФайловВВыборке, ПолучитьВсеФайлы, ДополнительныеПоля); КонецЦикла; Возврат ТекстЗапроса; @@ -1268,38 +787,38 @@ КонецФункции -Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(Знач ИмяСправочника, Знач ЧислоФайловВВыборке, Знач ПолучитьВсеФайлы = Ложь) +// Создает файл в ИБ. +// +// Параметры: +// Владелец - СправочникСсылка.ПапкиФайлов, ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у +// созданного файла. +// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "Файл". +// +// Возвращаемое значение: +// СправочникСсылка.Файлы - созданный файл. +// +Функция СоздатьФайл(Знач Владелец, Знач СведенияОФайле) - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Файлы.Ссылка КАК Ссылка, - | Файлы.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, - | Файлы.ТипХраненияФайла КАК ТипХраненияФайла, - | Файлы.Расширение КАК Расширение, - | Файлы.Наименование КАК Наименование - |ИЗ - | &ИмяСправочника КАК Файлы - |ГДЕ - | Файлы.СтатусИзвлеченияТекста В (ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + Файл = Справочники[СведенияОФайле.ИмяСправочникаХранилищаФайлов].СоздатьЭлемент(); + Файл.ВладелецФайла = Владелец; + Файл.Наименование = СведенияОФайле.ИмяБезРасширения; + Файл.Автор = ?(СведенияОФайле.Автор <> Неопределено, СведенияОФайле.Автор, Пользователи.ТекущийПользователь()); + Файл.ДатаСоздания = ТекущаяДатаСеанса(); + Файл.Описание = СведенияОФайле.Комментарий; + Файл.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено); + Файл.ХранитьВерсии = СведенияОФайле.ХранитьВерсии; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - Если ИмяСправочника = "ВерсииФайлов" Тогда - ТекстЗапроса = ТекстЗапроса + " - | И НЕ Файлы.Владелец.Зашифрован"; - Иначе - ТекстЗапроса = ТекстЗапроса + " - | И НЕ Файлы.Зашифрован"; - КонецЕсли; + Если ТипЗнч(СведенияОФайле.АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда + // При создании Файла из шаблона хранилище значения копируется напрямую. + Файл.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; + ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда + Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); + Файл.ТекстХранилище = Новый ХранилищеЗначения(Текст); КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 1", ?( - ПолучитьВсеФайлы, - "", - "ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН=")) ); - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); - - Возврат ТекстЗапроса; + Файл.Заполнить(Неопределено); + Файл.Записать(); + Возврат Файл.Ссылка; КонецФункции @@ -1383,7 +902,7 @@ ДвоичныеДанныеПредыдущейВерсии = Новый ДвоичныеДанные(ПолныйПуть); КонецЕсли; Иначе - ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылкаДляСравненияРазмера); + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылкаДляСравненияРазмера); ДвоичныеДанныеПредыдущейВерсии = ХранилищеФайла.Получить(); КонецЕсли; @@ -1520,244 +1039,6 @@ КонецФункции -// Создает новый файл по аналогии с указанным и возвращает ссылку на него. -// Параметры: -// ИсходныйФайл - СправочникСсылка.Файлы - существующий файл. -// ВладелецНовогоФайла - ЛюбаяСсылка - владелец файла. -// -// Возвращаемое значение: -// СправочникСсылка.Файлы - новый файл. -// -Функция СкопироватьФайл(ИсходныйФайл, ВладелецНовогоФайла) - - Если ИсходныйФайл = Неопределено Или ИсходныйФайл.Пустая() Тогда - Возврат Неопределено; - КонецЕсли; - - СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); - СведенияОФайле.Комментарий = ИсходныйФайл.Описание; - СведенияОФайле.ИмяБезРасширения = ИсходныйФайл.Наименование; - СведенияОФайле.ХранитьВерсии = ИсходныйФайл.ХранитьВерсии; - СведенияОФайле.ИмяСправочникаХранилищаФайлов = "Файлы"; - - НовыйФайл = СоздатьФайл(ВладелецНовогоФайла, СведенияОФайле); - - Если СведенияОФайле.ХранитьВерсии И Не ИсходныйФайл.ТекущаяВерсия().Пустая() Тогда - ТекущаяВерсия = ИсходныйФайл.ТекущаяВерсия(); - Иначе - ТекущаяВерсия = ИсходныйФайл; - КонецЕсли; - ХранилищеФайла = Неопределено; - Если ИсходныйФайл.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ТекущаяВерсия); - КонецЕсли; - - СведенияОФайле.Размер = ТекущаяВерсия.Размер; - СведенияОФайле.РасширениеБезТочки = ТекущаяВерсия.Расширение; - СведенияОФайле.АдресВременногоХранилищаФайла = ХранилищеФайла; - СведенияОФайле.АдресВременногоХранилищаТекста = ТекущаяВерсия.ТекстХранилище; - СведенияОФайле.СсылкаНаВерсиюИсточник = ТекущаяВерсия; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - - Если ИсходныйФайл.ПодписанЭП Тогда - - ФайлОбъект = НовыйФайл.ПолучитьОбъект(); - ФайлОбъект.ПодписанЭП = Истина; - ФайлОбъект.Записать(); - - ЭлектронныеПодписиИсходногоФайла = МодульЭлектроннаяПодпись.УстановленныеПодписи(ИсходныйФайл); - Для Каждого ЭП Из ЭлектронныеПодписиИсходногоФайла Цикл - МенеджерЗаписи = РегистрыСведений["ЭлектронныеПодписи"].СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ПодписанныйОбъект = НовыйФайл; - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ЭП); - МенеджерЗаписи.Записать(Истина); - КонецЦикла; - - КонецЕсли; - - Если ИсходныйФайл.Зашифрован Тогда - - ФайлОбъект = НовыйФайл.ПолучитьОбъект(); - ФайлОбъект.Зашифрован = Истина; - - ЭлектронныеПодписиИсходногоФайла = МодульЭлектроннаяПодпись.СертификатыШифрования(ИсходныйФайл); - Для Каждого Сертификат Из ЭлектронныеПодписиИсходногоФайла Цикл - МенеджерЗаписи = РегистрыСведений["СертификатыШифрования"].СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ЗашифрованныйОбъект = НовыйФайл; - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Сертификат); - МенеджерЗаписи.Записать(Истина); - КонецЦикла; - // Чтобы прошла запись ранее подписанного объекта. - ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - ФайлОбъект.Записать(); - - КонецЕсли; - - КонецЕсли; - - РаботаСФайламиПереопределяемый.ЗаполнитьРеквизитыФайлаИзИсходногоФайла(НовыйФайл, ИсходныйФайл); - - Возврат НовыйФайл; - -КонецФункции - -// Переносит Файл в другую папку. -// -// Параметры: -// ДанныеФайла - структура с данными файла. -// Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файл. -// -Процедура ПеренестиФайл(ДанныеФайла, Папка) - - НачатьТранзакцию(); - Попытка - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ДанныеФайла.Ссылка)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ДанныеФайла.Ссылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; - БлокировкаДанных.Заблокировать(); - ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - ФайлОбъект.ВладелецФайла = Папка; - ФайлОбъект.Записать(); - ЗафиксироватьТранзакцию(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - -КонецПроцедуры - -// Переносит Файлы в другую папку. -// -// Параметры: -// ОбъектыСсылка - Массив - массив ссылок на файлы. -// Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файлы. -// -Функция ПеренестиФайлы(ОбъектыСсылка, Папка) Экспорт - - ДанныеФайлов = Новый Массив; - - Для Каждого ФайлСсылка Из ОбъектыСсылка Цикл - ПеренестиФайл(ФайлСсылка, Папка); - ДанныеФайла = ДанныеФайла(ФайлСсылка); - ДанныеФайлов.Добавить(ДанныеФайла); - КонецЦикла; - - Возврат ДанныеФайлов; - -КонецФункции - -// Создает файл в ИБ. -// -// Параметры: -// Владелец - СправочникСсылка.ПапкиФайлов, ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у -// созданного файла. -// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "Файл". -// -// Возвращаемое значение: -// СправочникСсылка.Файлы - созданный файл. -// -Функция СоздатьФайл(Знач Владелец, Знач СведенияОФайле) - - Файл = Справочники[СведенияОФайле.ИмяСправочникаХранилищаФайлов].СоздатьЭлемент(); - Файл.ВладелецФайла = Владелец; - Файл.Наименование = СведенияОФайле.ИмяБезРасширения; - Файл.Автор = ?(СведенияОФайле.Автор <> Неопределено, СведенияОФайле.Автор, Пользователи.ТекущийПользователь()); - Файл.ДатаСоздания = ТекущаяДатаСеанса(); - Файл.Описание = СведенияОФайле.Комментарий; - Файл.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено); - Файл.ХранитьВерсии = СведенияОФайле.ХранитьВерсии; - - Если ТипЗнч(СведенияОФайле.АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда - // При создании Файла из шаблона хранилище значения копируется напрямую. - Файл.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; - ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); - Файл.ТекстХранилище = Новый ХранилищеЗначения(Текст); - КонецЕсли; - - Файл.Заполнить(Неопределено); - Файл.Записать(); - Возврат Файл.Ссылка; - -КонецФункции - -// Находит максимальный номер версии для данного объекта Файл. Если нет версий - то 0. -// Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - ссылка на файл. -// -// Возвращаемое значение: -// Число - максимальный номер версии. -// -Функция НайтиМаксимальныйНомерВерсии(ФайлСсылка) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(МАКСИМУМ(Версии.НомерВерсии), 0) КАК МаксимальныйНомер - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.Владелец = &Файл"; - - Запрос.Параметры.Вставить("Файл", ФайлСсылка); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - - Если Выборка.МаксимальныйНомер = Null Тогда - Возврат 0; - КонецЕсли; - - Возврат Число(Выборка.МаксимальныйНомер); - КонецЕсли; - - Возврат 0; -КонецФункции - -// Обновляет текстовую порцию из файла в карточке файла. -// -// Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. -// АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с -// файлом текста или ХранилищеЗначения - непосредственно содержит двоичные -// данные с файлом текста. -// УникальныйИдентификатор - уникальный идентификатор формы. -// -Процедура ОбновитьТекстВФайле(ФайлСсылка, - Знач АдресВременногоХранилищаТекста, - УникальныйИдентификатор = Неопределено) - - НачатьТранзакцию(); - Попытка - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; - БлокировкаДанных.Заблокировать(); - - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); - - ФайлОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); - - ЗафиксироватьТранзакцию(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - -КонецПроцедуры - // Обновляет или создает версию файла и снимает блокировку. // // Параметры: @@ -1776,7 +1057,7 @@ УникальныйИдентификаторФормы = Неопределено) Экспорт ДанныеФайлаТекущие = ДанныеФайла(ДанныеФайла.Ссылка); - Если Не ДанныеФайлаТекущие.ФайлРедактируетТекущийПользователь Тогда + Если Не ДанныеФайлаТекущие.ФайлРедактируетТекущийПользователь И НЕ ФайлСинхронизируетсяОблачнымСервисом(ДанныеФайла.Ссылка) Тогда ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'"); КонецЕсли; @@ -1788,14 +1069,14 @@ СведенияОФайле.Зашифрован = ДанныеФайла.Зашифрован; Если ТипЗнч(ДанныеФайла.Ссылка) = Тип("СправочникСсылка.Файлы") Тогда - НоваяВерсия = ОбновитьВерсиюФайла(ДанныеФайла.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы); + НоваяВерсия = РаботаСФайламиСлужебный.ОбновитьВерсиюФайла(ДанныеФайла.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы); Иначе НоваяВерсия = ОбновитьОбъектФайла(ДанныеФайла.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы); КонецЕсли; Если НоваяВерсия <> Неопределено Тогда Если СведенияОФайле.ХранитьВерсии Тогда - ОбновитьВерсиюВФайле(ДанныеФайла.Ссылка, НоваяВерсия, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы); + РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ДанныеФайла.Ссылка, НоваяВерсия, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы); Иначе ОбновитьТекстВФайле(ДанныеФайла.Ссылка, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы); КонецЕсли; @@ -1872,7 +1153,7 @@ УникальныйИдентификаторФормы = Неопределено) Экспорт ДанныеФайлаТекущие = ДанныеФайла(ФайлСсылка); - Если Не ДанныеФайлаТекущие.ФайлРедактируетТекущийПользователь Тогда + Если Не ДанныеФайлаТекущие.ФайлРедактируетТекущийПользователь И НЕ ФайлСинхронизируетсяОблачнымСервисом(ФайлСсылка) Тогда ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'"); КонецЕсли; @@ -1886,7 +1167,7 @@ СведенияОФайле.Зашифрован = ДанныеФайлаТекущие.Зашифрован; Если ТипЗнч(ФайлСсылка.Ссылка) = Тип("СправочникСсылка.Файлы") Тогда - НоваяВерсия = ОбновитьВерсиюФайла(ФайлСсылка.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы); + НоваяВерсия = РаботаСФайламиСлужебный.ОбновитьВерсиюФайла(ФайлСсылка.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы, СведенияОФайле.НоваяВерсияАвтор); Иначе НоваяВерсия = ОбновитьОбъектФайла(ФайлСсылка.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы); КонецЕсли; @@ -1894,7 +1175,7 @@ Если НоваяВерсия <> Неопределено Тогда ТекущаяВерсия = НоваяВерсия; Если СведенияОФайле.ХранитьВерсии Тогда - ОбновитьВерсиюВФайле(ФайлСсылка, НоваяВерсия, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы); + РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ФайлСсылка, НоваяВерсия, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы); Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() И Не НеМенятьЗаписьВРабочемКаталоге Тогда УдалитьИзРегистра(СтараяВерсия); @@ -1923,6 +1204,177 @@ КонецФункции +// Обновляет текстовую порцию из файла в карточке файла. +// +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. +// АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с +// файлом текста или ХранилищеЗначения - непосредственно содержит двоичные +// данные с файлом текста. +// УникальныйИдентификатор - уникальный идентификатор формы. +// +Процедура ОбновитьТекстВФайле(ФайлСсылка, + Знач АдресВременногоХранилищаТекста, + УникальныйИдентификатор = Неопределено) + + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); + БлокировкаДанных.Заблокировать(); + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); + + Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + + ФайлОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Создает новый файл по аналогии с указанным и возвращает ссылку на него. +// Параметры: +// ИсходныйФайл - СправочникСсылка.Файлы - существующий файл. +// ВладелецНовогоФайла - ЛюбаяСсылка - владелец файла. +// +// Возвращаемое значение: +// СправочникСсылка.Файлы - новый файл. +// +Функция СкопироватьФайл(ИсходныйФайл, ВладелецНовогоФайла) + + Если ИсходныйФайл = Неопределено Или ИсходныйФайл.Пустая() Тогда + Возврат Неопределено; + КонецЕсли; + + СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); + СведенияОФайле.Комментарий = ИсходныйФайл.Описание; + СведенияОФайле.ИмяБезРасширения = ИсходныйФайл.Наименование; + СведенияОФайле.ХранитьВерсии = ИсходныйФайл.ХранитьВерсии; + СведенияОФайле.ИмяСправочникаХранилищаФайлов = "Файлы"; + + НовыйФайл = СоздатьФайл(ВладелецНовогоФайла, СведенияОФайле); + + Если СведенияОФайле.ХранитьВерсии И Не ИсходныйФайл.ТекущаяВерсия().Пустая() Тогда + ТекущаяВерсия = ИсходныйФайл.ТекущаяВерсия(); + Иначе + ТекущаяВерсия = ИсходныйФайл; + КонецЕсли; + ХранилищеФайла = Неопределено; + Если ИсходныйФайл.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ТекущаяВерсия); + КонецЕсли; + + СведенияОФайле.Размер = ТекущаяВерсия.Размер; + СведенияОФайле.РасширениеБезТочки = ТекущаяВерсия.Расширение; + СведенияОФайле.АдресВременногоХранилищаФайла = ХранилищеФайла; + СведенияОФайле.АдресВременногоХранилищаТекста = ТекущаяВерсия.ТекстХранилище; + СведенияОФайле.СсылкаНаВерсиюИсточник = ТекущаяВерсия; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + ДоступнаЭлектроннаяПодпись = МодульЭлектроннаяПодписьСлужебный.ДоступнаЭлектроннаяПодпись(ТипЗнч(ИсходныйФайл)); + Если ДоступнаЭлектроннаяПодпись Тогда + + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + + Если ИсходныйФайл.ПодписанЭП Тогда + + ФайлОбъект = НовыйФайл.ПолучитьОбъект(); + ФайлОбъект.ПодписанЭП = Истина; + ФайлОбъект.Записать(); + + ЭлектронныеПодписиИсходногоФайла = МодульЭлектроннаяПодпись.УстановленныеПодписи(ИсходныйФайл); + Для Каждого ЭП Из ЭлектронныеПодписиИсходногоФайла Цикл + МенеджерЗаписи = РегистрыСведений["ЭлектронныеПодписи"].СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ПодписанныйОбъект = НовыйФайл; + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ЭП); + МенеджерЗаписи.Записать(Истина); + КонецЦикла; + + КонецЕсли; + + Если ИсходныйФайл.Зашифрован Тогда + + ФайлОбъект = НовыйФайл.ПолучитьОбъект(); + ФайлОбъект.Зашифрован = Истина; + + ЭлектронныеПодписиИсходногоФайла = МодульЭлектроннаяПодпись.СертификатыШифрования(ИсходныйФайл); + Для Каждого Сертификат Из ЭлектронныеПодписиИсходногоФайла Цикл + МенеджерЗаписи = РегистрыСведений["СертификатыШифрования"].СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ЗашифрованныйОбъект = НовыйФайл; + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Сертификат); + МенеджерЗаписи.Записать(Истина); + КонецЦикла; + // Чтобы прошла запись ранее подписанного объекта. + ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); + ФайлОбъект.Записать(); + + КонецЕсли; + КонецЕсли; + КонецЕсли; + + РаботаСФайламиПереопределяемый.ЗаполнитьРеквизитыФайлаИзИсходногоФайла(НовыйФайл, ИсходныйФайл); + + Возврат НовыйФайл; + +КонецФункции + +// Переносит Файл в другую папку. +// +// Параметры: +// ДанныеФайла - структура с данными файла. +// Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файл. +// +Процедура ПеренестиФайл(ДанныеФайла, Папка) + + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ДанныеФайла.Ссылка)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ДанныеФайла.Ссылка); + БлокировкаДанных.Заблокировать(); + ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + ФайлОбъект.ВладелецФайла = Папка; + ФайлОбъект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Переносит Файлы в другую папку. +// +// Параметры: +// ОбъектыСсылка - Массив - массив ссылок на файлы. +// Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файлы. +// +Функция ПеренестиФайлы(ОбъектыСсылка, Папка) Экспорт + + ДанныеФайлов = Новый Массив; + + Для Каждого ФайлСсылка Из ОбъектыСсылка Цикл + ПеренестиФайл(ФайлСсылка, Папка); + ДанныеФайла = ДанныеФайла(ФайлСсылка); + ДанныеФайлов.Добавить(ДанныеФайла); + КонецЦикла; + + Возврат ДанныеФайлов; + +КонецФункции + // Получает РедактируетТекущийПользователь - в привилегированном режиме. // Параметры: // ВерсияСсылка - СправочникСсылка.ВерсииФайлов - версия файла. @@ -2146,37 +1598,6 @@ КонецФункции -Функция ПолныйПутьПапки(Папка) - - ПолныйПуть = ""; - - ПапкаРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Папка.Ссылка, "Родитель"); - - Если ЗначениеЗаполнено(ПапкаРодитель) Тогда - - ПолныйПуть = ""; - Пока ЗначениеЗаполнено(ПапкаРодитель) Цикл - - ПолныйПуть = Строка(ПапкаРодитель) + "\" + ПолныйПуть; - ПапкаРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПапкаРодитель, "Родитель"); - Если Не ЗначениеЗаполнено(ПапкаРодитель) Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - ПолныйПуть = ПолныйПуть + Строка(Папка.Ссылка); - - Если Не ПустаяСтрока(ПолныйПуть) Тогда - ПолныйПуть = """" + ПолныйПуть + """"; - КонецЕсли; - - КонецЕсли; - - Возврат ПолныйПуть; - -КонецФункции - // Освобождение Файла с получением данных. // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл. @@ -2233,7 +1654,7 @@ // Функция РабочийКаталогПапки(СсылкаПапки) Экспорт - Если ТипЗнч(СсылкаПапки) <> Тип("СправочникСсылка.ПапкиФайлов") Тогда + Если Не ЭтоСправочникФайлы(СсылкаПапки) Тогда Возврат "" КонецЕсли; @@ -2596,7 +2017,6 @@ Процедура УдалитьИзРегистра(Файл) Экспорт ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Файл, "Ссылка", Истина); - Если ЕстьПраваНаОбъект = Неопределено Тогда Возврат; КонецЕсли; @@ -2853,57 +2273,6 @@ КонецФункции -// Считаем из настроек СпособСравненияВерсийФайлов. -// -// Возвращаемое значение: -// Строка - Способ сравнения версий файлов. -// -Функция СпособСравненияВерсийФайлов() - - СпособСравнения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкиСравненияФайлов", "СпособСравненияВерсийФайлов"); - - Если СпособСравнения = Перечисления.СпособыСравненияВерсийФайлов.MicrosoftOfficeWord Тогда - Возврат "MicrosoftOfficeWord"; - - ИначеЕсли СпособСравнения = Перечисления.СпособыСравненияВерсийФайлов.OpenOfficeOrgWriter Тогда - Возврат "OpenOfficeOrgWriter"; - Иначе - Возврат Неопределено; - КонецЕсли; - -КонецФункции - -// Функция возвращает количество Файлов, занятых текущим пользователем -// в разрезе владельца. -// Параметры: -// ВладелецФайла - ЛюбаяСсылка - владелец файла. -// -// Возвращаемое значение: -// Число - количество занятых файлов. -// -Функция КоличествоФайловЗанятыхТекущимПользователем(ВладелецФайла) Экспорт - - КоличествоЗанятыхФайлов = ПолучитьКоличествоЗанятыхФайлов(ВладелецФайла, Пользователи.АвторизованныйПользователь()); - Возврат КоличествоЗанятыхФайлов; - -КонецФункции - -// Получает значение настройки ПоказыватьКолонкуРазмер. -// Возвращаемое значение: -// Булево - Показывать колонку размер. -// -Функция ПолучитьПоказыватьКолонкуРазмер() Экспорт - ПоказыватьКолонкуРазмер = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьКолонкуРазмер"); - Если ПоказыватьКолонкуРазмер = Неопределено Тогда - ПоказыватьКолонкуРазмер = Ложь; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПоказыватьКолонкуРазмер", ПоказыватьКолонкуРазмер); - КонецЕсли; - - Возврат ПоказыватьКолонкуРазмер; - -КонецФункции - // Функция меняет ВладелецФайла объектам типа Справочник.Файл, вернет Истина при успехе. // Параметры: // МассивСсылокНаФайлы - Массив - массив файлов. @@ -2948,33 +2317,6 @@ КонецФункции -// Вернет Истина если есть зацикливание (если одну из папок переносим в ее же дочернюю папку). -// Параметры: -// МассивСсылокНаФайлы - Массив - массив файлов. -// НовыйРодитель - ЛюбаяСсылка - новый владелец файла. -// -// Возвращаемое значение: -// Булево - есть зацикливание. -// -Функция ЕстьЗацикливание(Знач МассивСсылокНаФайлы, НовыйРодитель) - - Если МассивСсылокНаФайлы.Найти(НовыйРодитель) <> Неопределено Тогда - Возврат Истина; // нашли зацикливание - КонецЕсли; - - Родитель = НовыйРодитель.Родитель; - Если Родитель.Пустая() Тогда // дошли до корня - Возврат Ложь; - КонецЕсли; - - Если ЕстьЗацикливание(МассивСсылокНаФайлы, Родитель) Тогда - Возврат Истина; // нашли зацикливание - КонецЕсли; - - Возврат Ложь; - -КонецФункции - // Функция меняет свойство Родитель объектам типа Справочник.ПапкиФайла, вернет Истина при успехе, // в переменной НайденоЗацикливание вернет Истина, если одну из папок переносим в ее же дочернюю папку. // @@ -3029,139 +2371,6 @@ КонецФункции -// Вернет Истина, если в указанном элементе справочника ПапкиФайлов есть дочерний элемент с таким именем. -// Параметры: -// ИмяФайла - имя папки -// Родитель - СправочникСсылка.ПапкиФайлов - Родитель папки. -// ПерваяПапкаСТакимЖеИменем - СправочникСсылка.ПапкиФайлов - первая же найденная папка с указанным именем. -// -// Возвращаемое значение: -// Булево - есть дочерний элемент с таким именем. -// -Функция ЕстьПапкаСТакимИменем(ИмяФайла, Родитель, ПерваяПапкаСТакимЖеИменем, ИмяСправочникаХранилищаФайлов = "") Экспорт - - ПерваяПапкаСТакимЖеИменем = Справочники.ПапкиФайлов.ПустаяСсылка(); - - ЗапросВПапки = Новый Запрос; - ЗапросВПапки.УстановитьПараметр("Наименование", ИмяФайла); - ЗапросВПапки.УстановитьПараметр("Родитель", Родитель); - ЗапросВПапки.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | ПапкиФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПапкиФайлов КАК ПапкиФайлов - |ГДЕ - | ПапкиФайлов.Наименование = &Наименование - | И ПапкиФайлов.Родитель = &Родитель"; - - Если Не ПустаяСтрока(ИмяСправочникаХранилищаФайлов) Тогда - ЗапросВПапки.Текст = СтрЗаменить(ЗапросВПапки.Текст, ".ПапкиФайлов", "." + ИмяСправочникаХранилищаФайлов); - КонецЕсли; - - РезультатЗапроса = ЗапросВПапки.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - ВыборкаЗапроса = РезультатЗапроса.Выгрузить(); - ПерваяПапкаСТакимЖеИменем = ВыборкаЗапроса[0].Ссылка; - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Для справочника ВерсииФайлов переименует файл на диске, если ТипХраненияФайла = ВТомахНаДиске. -// Параметры: -// Версия - СправочникСсылка.ВерсииФайлов - версия файла. -// СтароеНаименование - Строка - старое наименование. -// НовоеНаименование - Строка - новое наименование. -// -Процедура ПереименоватьФайлВерсииНаДиске(Версия, - СтароеНаименование, - НовоеНаименование, - УникальныйИдентификатор = Неопределено) Экспорт - - Если НЕ Версия.Том.Пустая() Тогда - НачатьТранзакцию(); - Попытка - - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Версия)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Версия); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; - БлокировкаДанных.Заблокировать(); - - ВерсияОбъект = Версия.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(Версия, , УникальныйИдентификатор); - - СтарыйПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; - - ФайлНаДиске = Новый Файл(СтарыйПолныйПуть); - ПолныйПуть = ФайлНаДиске.Путь; - ИмяБезРасширения = ФайлНаДиске.ИмяБезРасширения; - Расширение = ФайлНаДиске.Расширение; - НовоеИмяБезРасширения = СтрЗаменить(ИмяБезРасширения, СтароеНаименование, НовоеНаименование); - - НовыйПолныйПуть = ПолныйПуть + НовоеИмяБезРасширения + Расширение; - ПолныйПутьКТому = РаботаСФайламиСлужебный.ПолныйПутьТома(Версия.Том); - НовыйЧастичныйПуть = Прав(НовыйПолныйПуть, СтрДлина(НовыйПолныйПуть) - СтрДлина(ПолныйПутьКТому)); - - ПереместитьФайл(СтарыйПолныйПуть, НовыйПолныйПуть); - ВерсияОбъект.ПутьКФайлу = НовыйЧастичныйПуть; - ВерсияОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(Версия, УникальныйИдентификатор); - ЗафиксироватьТранзакцию(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - КонецЕсли; - -КонецПроцедуры - -// Возвращает количество занятых файлов. -// Параметры: -// ВладелецФайла - ЛюбаяСсылка - владелец файла. -// Редактирует - СправочникСсылка.Пользователи - ссылка на пользователя, занявшего файл. -// -// Возвращаемое значение: -// Число - число занятых файлов. -// -Функция ПолучитьКоличествоЗанятыхФайлов(ВладелецФайла = Неопределено, Редактирует = Неопределено) Экспорт - - Количество = 0; - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | СведенияОФайлах.Файл - |ИЗ - | РегистрСведений.СведенияОФайлах КАК СведенияОФайлах - |ГДЕ - | СведенияОФайлах.Редактирует <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; - - Если Редактирует <> Неопределено Тогда - Запрос.Текст = Запрос.Текст + " И СведенияОФайлах.Редактирует = &Редактирует "; - Запрос.УстановитьПараметр("Редактирует", Редактирует); - КонецЕсли; - - Если ВладелецФайла <> Неопределено Тогда - Запрос.Текст = Запрос.Текст + " И СведенияОФайлах.ВладелецФайла = &ВладелецФайла "; - Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); - КонецЕсли; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Количество = Количество + 1; - КонецЦикла; - - Возврат Количество; - -КонецФункции - // Получает данные для переноса файла из одного списка приложенных файлов в другой. // // Параметры: @@ -3184,7 +2393,7 @@ Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Файлы.Ссылка КАК Ссылка, - | Файлы.ПолноеНаименование КАК ПолноеНаименование + | Файлы.Наименование КАК Наименование |ИЗ | Справочник.Файлы КАК Файлы |ГДЕ @@ -3197,7 +2406,7 @@ Если ТаблРезультат.Найти(ФайлСсылка, "Ссылка") <> Неопределено Тогда Результат.Вставить(ФайлСсылка, "Пропустить"); - ИначеЕсли ТаблРезультат.Найти(ФайлСсылка.Наименование, "ПолноеНаименование") <> Неопределено Тогда + ИначеЕсли ТаблРезультат.Найти(ФайлСсылка.Наименование, "Наименование") <> Неопределено Тогда Результат.Вставить(ФайлСсылка, "Обновить"); Иначе Результат.Вставить(ФайлСсылка, "Скопировать"); @@ -3242,7 +2451,7 @@ ХранилищеФайла = Неопределено; Если Источник.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(Источник.ТекущаяВерсия); + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(Источник.ТекущаяВерсия); КонецЕсли; СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); @@ -3252,8 +2461,8 @@ СведенияОФайле.АдресВременногоХранилищаФайла = ХранилищеФайла; СведенияОФайле.АдресВременногоХранилищаТекста = Источник.ТекущаяВерсия.ТекстХранилище; СведенияОФайле.СсылкаНаВерсиюИсточник = Источник.ТекущаяВерсия; - Версия = СоздатьВерсию(Приемник, СведенияОФайле); - ОбновитьВерсиюВФайле(Приемник, Версия, Источник.ТекущаяВерсия.ТекстХранилище); + Версия = РаботаСФайламиСлужебный.СоздатьВерсию(Приемник, СведенияОФайле); + РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(Приемник, Версия, Источник.ТекущаяВерсия.ТекстХранилище); КонецЕсли; КонецЦикла; @@ -3294,7 +2503,7 @@ ТаблРезультат = Запрос.Выполнить().Выгрузить(); Для Каждого ФайлСсылка Из МассивФайлов Цикл - НайденнаяСтрока = ТаблРезультат.Найти(ФайлСсылка.ПолноеНаименование, "ПолноеНаименование"); + НайденнаяСтрока = ТаблРезультат.Найти(ФайлСсылка.Наименование, "ПолноеНаименование"); Источник = ФайлСсылка; Приемник = НайденнаяСтрока.Ссылка; @@ -3303,7 +2512,7 @@ ХранилищеФайла = Неопределено; Если Источник.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(Источник.ТекущаяВерсия); + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(Источник.ТекущаяВерсия); КонецЕсли; СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); @@ -3313,8 +2522,8 @@ СведенияОФайле.АдресВременногоХранилищаФайла = ХранилищеФайла; СведенияОФайле.АдресВременногоХранилищаТекста = Источник.ТекущаяВерсия.ТекстХранилище; СведенияОФайле.СсылкаНаВерсиюИсточник = Источник.ТекущаяВерсия; - Версия = СоздатьВерсию(Приемник, СведенияОФайле); - ОбновитьВерсиюВФайле(Приемник, Версия, Источник.ТекущаяВерсия.ТекстХранилище); + Версия = РаботаСФайламиСлужебный.СоздатьВерсию(Приемник, СведенияОФайле); + РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(Приемник, Версия, Источник.ТекущаяВерсия.ТекстХранилище); КонецЕсли; КонецЦикла; @@ -3323,79 +2532,6 @@ КонецФункции -// Есть ли дублирующийся элемент в условном оформлении списка. -// Параметры: -// Элементы - массив элементов условного оформления списка. -// ЭлементПоиска - элемент условного оформления списка. -// -// Возвращаемое значение: -// Булево - есть дублирующийся элемент. -// -Функция ЕстьДублирующийсяЭлемент(Элементы, ЭлементПоиска) - - Для Каждого Элемент Из Элементы Цикл - Если Элемент <> ЭлементПоиска Тогда - - Если Элемент.Оформление.Элементы.Количество() <> ЭлементПоиска.Оформление.Элементы.Количество() Тогда - Продолжить; - КонецЕсли; - - НайденОтличающийсяЭлемент = Ложь; - - // Обходим все элементы оформления - если есть хоть один отличающийся - делаем Продолжить; - ЧислоЭлементов = Элемент.Оформление.Элементы.Количество(); - Для Индекс = 0 По ЧислоЭлементов - 1 Цикл - Элемент1 = Элемент.Оформление.Элементы[Индекс]; - Элемент2 = ЭлементПоиска.Оформление.Элементы[Индекс]; - - Если Элемент1.Использование И Элемент2.Использование Тогда - Если Элемент1.Параметр <> Элемент2.Параметр ИЛИ Элемент1.Значение <> Элемент2.Значение Тогда - НайденОтличающийсяЭлемент = Истина; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если НайденОтличающийсяЭлемент Тогда - Продолжить; - КонецЕсли; - - Если Элемент.Отбор.Элементы.Количество() <> ЭлементПоиска.Отбор.Элементы.Количество() Тогда - Продолжить; - КонецЕсли; - - // Обходим все элементы отбора - если есть хоть один отличающийся - делаем Продолжить; - ЧислоЭлементов = Элемент.Отбор.Элементы.Количество(); - Для Индекс = 0 По ЧислоЭлементов - 1 Цикл - Элемент1 = Элемент.Отбор.Элементы[Индекс]; - Элемент2 = ЭлементПоиска.Отбор.Элементы[Индекс]; - - Если Элемент1.Использование И Элемент2.Использование Тогда - Если Элемент1.ВидСравнения <> Элемент2.ВидСравнения - ИЛИ Элемент1.ЛевоеЗначение <> Элемент2.ЛевоеЗначение - ИЛИ Элемент1.ПравоеЗначение <> Элемент2.ПравоеЗначение Тогда - - НайденОтличающийсяЭлемент = Истина; - Прервать; - - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если НайденОтличающийсяЭлемент Тогда - Продолжить; - КонецЕсли; - - // Обошли все элементы оформления и отбора - они все одинаковы - это дубль. - Возврат Истина; - - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - // Заполняет условное оформление списка файлов. // // Параметры: @@ -3483,33 +2619,6 @@ Возврат ДанныеФайла; КонецФункции -// Получает количество версий файла. -// Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - файл. -// -// Возвращаемое значение: -// Число - число версий -Функция ПолучитьКоличествоВерсий(ФайлСсылка) - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | КОЛИЧЕСТВО(*) КАК Количество - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.Владелец = &ФайлСсылка"; - - Запрос.УстановитьПараметр("ФайлСсылка", ФайлСсылка); - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - Возврат Число(Выборка.Количество); - -КонецФункции - // Получает ДанныеФайла и НавигационнуюСсылкуВерсии всех подчиненных файлов. // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл. @@ -3557,228 +2666,6 @@ Возврат МассивВозврата; КонецФункции -// Помещает шифрованные файлы в базу и ставит признак Зашифрован файлу и всем версиям. -// Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - файл. -// Зашифровать - Булево - зашифровать файл, если Истина - иначе расшифровать. -// МассивДанныхДляЗанесенияВБазу - массив структур. -// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. -// ИмяРабочегоКаталога - Строка - рабочий каталог. -// МассивФайловВРабочемКаталогеДляУдаления - Массив - файлы, которые надо удалить из регистра. -// МассивОтпечатков - Массив - массив отпечатков сертификатов, использованных для шифрования. -Процедура ЗанестиИнформациюОШифровании(ФайлСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, УникальныйИдентификатор, - ИмяРабочегоКаталога, МассивФайловВРабочемКаталогеДляУдаления, МассивОтпечатков) Экспорт - - НачатьТранзакцию(); - Попытка - АдресВременногоХранилищаТекстаТекущейВерсии = ""; - АдресВременногоХранилищаОсновногоФайла = ""; - Для Каждого ДанныеДляЗаписиНаСервере Из МассивДанныхДляЗанесенияВБазу Цикл - - Если ТипЗнч(ДанныеДляЗаписиНаСервере.ВерсияСсылка) <> Тип("СправочникСсылка.ВерсииФайлов") Тогда - АдресВременногоХранилищаОсновногоФайла = ДанныеДляЗаписиНаСервере.АдресВременногоХранилища; - Продолжить; - КонецЕсли; - - АдресВременногоХранилища = ДанныеДляЗаписиНаСервере.АдресВременногоХранилища; - ВерсияСсылка = ДанныеДляЗаписиНаСервере.ВерсияСсылка; - АдресВременногоХранилищаТекста = ДанныеДляЗаписиНаСервере.АдресВременногоХранилищаТекста; - - Если ВерсияСсылка = ФайлСсылка.ТекущаяВерсия Тогда - АдресВременногоХранилищаТекстаТекущейВерсии = АдресВременногоХранилищаТекста; - КонецЕсли; - - ПолноеИмяФайлаВРабочемКаталоге = ""; - ВРабочемКаталогеНаЧтение = Истина; // не используется - ВРабочемКаталогеВладельца = Истина; - ПолноеИмяФайлаВРабочемКаталоге = ПолучитьПолноеИмяФайлаИзРегистра(ВерсияСсылка, ИмяРабочегоКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); - Если НЕ ПустаяСтрока(ПолноеИмяФайлаВРабочемКаталоге) Тогда - МассивФайловВРабочемКаталогеДляУдаления.Добавить(ПолноеИмяФайлаВРабочемКаталоге); - КонецЕсли; - - УдалитьИзРегистра(ВерсияСсылка); - - СтатусИзвлеченияТекста = Неопределено; - Если Зашифровать = Ложь Тогда - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - - СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); - СведенияОФайле.ИмяБезРасширения = ВерсияСсылка.ПолноеНаименование; - СведенияОФайле.Комментарий = ВерсияСсылка.Комментарий; - СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилища; - СведенияОФайле.РасширениеБезТочки = ВерсияСсылка.Расширение; - СведенияОФайле.ВремяИзменения = ВерсияСсылка.ДатаСоздания; - СведенияОФайле.ВремяИзмененияУниверсальное = ВерсияСсылка.ДатаМодификацииУниверсальная; - СведенияОФайле.Размер = ВерсияСсылка.Размер; - СведенияОФайле.ВремяИзмененияУниверсальное = ВерсияСсылка.ДатаМодификацииУниверсальная; - СведенияОФайле.НовыйСтатусИзвлеченияТекста = СтатусИзвлеченияТекста; - СведенияОФайле.Зашифрован = Зашифровать; - СведенияОФайле.ХранитьВерсии = Ложь; - ОбновитьВерсиюФайла(ФайлСсылка, СведенияОФайле, ВерсияСсылка, УникальныйИдентификатор); - - // Для варианта с хранением файлов на диске (на сервере) удаляем Файл из временного хранилища после получения. - Если НЕ ПустаяСтрока(ДанныеДляЗаписиНаСервере.АдресФайла) И ЭтоАдресВременногоХранилища(ДанныеДляЗаписиНаСервере.АдресФайла) Тогда - УдалитьИзВременногоХранилища(ДанныеДляЗаписиНаСервере.АдресФайла); - КонецЕсли; - - КонецЦикла; - - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; - БлокировкаДанных.Заблокировать(); - - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор); - - ФайлОбъект.Зашифрован = Зашифровать; - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); // очистим извлеченный текст - // Чтобы прошла запись ранее подписанного объекта. - ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - - Если Зашифровать Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); - МодульЭлектроннаяПодписьСлужебный.ДобавитьСертификатыШифрования(ФайлСсылка, МассивОтпечатков); - КонецЕсли; - Иначе - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); - МодульЭлектроннаяПодписьСлужебный.ОчиститьСертификатыШифрования(ФайлСсылка); - КонецЕсли; - КонецЕсли; - - Если АдресВременногоХранилищаТекстаТекущейВерсии <> "" Тогда - Текст = РаботаСФайламиСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекстаТекущейВерсии); - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); - КонецЕсли; - - МетаданныеФайла = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); - ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеФайла); - Если Не ФайлОбъект.ХранитьВерсии Или (ВозможностьХранитьВерсии И Не ЗначениеЗаполнено(ФайлОбъект.ТекущаяВерсия)) Тогда - ОбновитьДвоичныеДанныеФайлаНаСервере(ФайлОбъект, АдресВременногоХранилищаОсновногоФайла); - КонецЕсли; - - ФайлОбъект.Записать(); - - РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Заменяет двоичные данные файла в ИБ на данные во временном хранилище. -Процедура ОбновитьДвоичныеДанныеФайлаНаСервере(Знач ПрисоединенныйФайл, - Знач АдресФайлаВоВременномХранилищеДвоичныеДанные, - Знач РеквизитыЗначения = Неопределено) - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПрисоединенныйФайл, "Ссылка", Истина); - Иначе - ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПрисоединенныйФайл.Ссылка, "Ссылка", Истина); - КонецЕсли; - - Если ЕстьПраваНаОбъект = Неопределено Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - ФайлСсылка = ПрисоединенныйФайл; - Иначе - ФайлОбъект = ПрисоединенныйФайл; - ФайлСсылка = ФайлОбъект.Ссылка; - КонецЕсли; - - Если ТипЗнч(АдресФайлаВоВременномХранилищеДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда - ДвоичныеДанные = АдресФайлаВоВременномХранилищеДвоичныеДанные; - Иначе - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилищеДвоичныеДанные); - КонецЕсли; - - Если ТипЗнч(РеквизитыЗначения) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(ФайлОбъект, РеквизитыЗначения); - КонецЕсли; - - Попытка - Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.РегистрыСведений.ДвоичныеДанныеФайлов.ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Файл", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; - БлокировкаДанных.Заблокировать(); - - МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Файл = ФайлСсылка; - МенеджерЗаписи.Прочитать(); - МенеджерЗаписи.Файл = ФайлСсылка; - МенеджерЗаписи.ДвоичныеДанныеФайла = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); - МенеджерЗаписи.Записать(); - Иначе - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; - - Попытка - ФайлНаДиске = Новый Файл(ПолныйПуть); - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); - - СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, ФайлОбъект.ДатаМодификацииУниверсальная, - ФайлОбъект.Наименование, ФайлОбъект.Расширение,, ФайлОбъект.Зашифрован); - ФайлОбъект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - ФайлОбъект.Том = СведенияОФайле.Том; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Запись файла на диск'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники[ФайлСсылка.Метаданные().Имя], - ФайлСсылка, - ТекстОшибкиПриСохраненииФайлаВТоме(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка)); - - ВызватьИсключение ТекстОшибкиПриСохраненииФайлаВТоме(КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка); - КонецПопытки; - - КонецЕсли; - - ФайлОбъект.Размер = ДвоичныеДанные.Размер(); - - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Обновление данных присоединенного файла в хранилище файлов'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент -// справочника хранимого файла. -// -Функция ТекстОшибкиПриСохраненииФайлаВТоме(Знач СообщениеОбОшибке, Знач Файл) - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка, при сохранении файла в томе: - |""%1"". - | - |Ссылка на файл: ""%2"".'"), - СообщениеОбОшибке, - ПолучитьНавигационнуюСсылку(Файл) ); - -КонецФункции - // Делает ПоместитьВоВременноеХранилище (если файл хранится на диске) и возвращает нужную ссылку. // Параметры: // ВерсияСсылка - СправочникСсылка.ВерсииФайлов - версия файла. @@ -3815,9 +2702,8 @@ КонецПопытки; КонецЕсли; Иначе - ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); ДвоичныеДанные = ХранилищеФайла.Получить(); - Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); КонецЕсли; @@ -3861,8 +2747,8 @@ Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда Возврат; КонецЕсли; - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); МодульЭлектроннаяПодпись.ДобавитьПодпись(ФайлСсылка, СвойстваПодписи, ИдентификаторФормы); КонецПроцедуры @@ -3958,7 +2844,7 @@ Если ОбъектСсылка.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ОбъектСсылка); + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ОбъектСсылка); ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); Если ПустойПутьДляПустыхДанных И ТипЗнч(ДвоичныеДанныеФайла) <> Тип("ДвоичныеДанные") Тогда @@ -3977,6 +2863,62 @@ КонецФункции +// Извлечение текста + +Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, ЧислоФайловВВыборке, + ПолучитьВсеФайлы, ДополнительныеПоля) + + Если ДополнительныеПоля Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Файлы.Ссылка КАК Ссылка, + | ЕСТЬNULL(РегистрСведенийКодировкиФайлов.Кодировка, """") КАК Кодировка, + | Файлы.Расширение КАК Расширение, + | Файлы.Наименование КАК Наименование + |ИЗ + | &ИмяСправочника КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодировкиФайлов КАК РегистрСведенийКодировкиФайлов + | ПО (РегистрСведенийКодировкиФайлов.Файл = Файлы.Ссылка) + |ГДЕ + | Файлы.СтатусИзвлеченияТекста В ( + | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), + | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Файлы.Ссылка КАК Ссылка, + | ЕСТЬNULL(РегистрСведенийКодировкиФайлов.Кодировка, """") КАК Кодировка + |ИЗ + | &ИмяСправочника КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодировкиФайлов КАК РегистрСведенийКодировкиФайлов + | ПО (РегистрСведенийКодировкиФайлов.Файл = Файлы.Ссылка) + |ГДЕ + | Файлы.СтатусИзвлеченияТекста В ( + | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), + | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + Если ИмяСправочника = "ВерсииФайлов" Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ Файлы.Владелец.Зашифрован"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | И НЕ Файлы.Зашифрован"; + КонецЕсли; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 1", ?( + ПолучитьВсеФайлы, + "", + "ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН="))); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); + + Возврат ТекстЗапроса; + +КонецФункции + // Записывает извлеченный текст. // // Параметры: @@ -4013,7 +2955,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Файл)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Файл); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = Файл.ПолучитьОбъект(); ФайлОбъект.ТекстХранилище = ТекущаяВерсия.ТекстХранилище; @@ -4038,6 +2979,60 @@ КонецПроцедуры +// Настройки + +// Считаем из настроек СпособСравненияВерсийФайлов. +// +// Возвращаемое значение: +// Строка - Способ сравнения версий файлов. +// +Функция СпособСравненияВерсийФайлов() + + СпособСравнения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиСравненияФайлов", "СпособСравненияВерсийФайлов"); + + Если СпособСравнения = Перечисления.СпособыСравненияВерсийФайлов.MicrosoftOfficeWord Тогда + Возврат "MicrosoftOfficeWord"; + + ИначеЕсли СпособСравнения = Перечисления.СпособыСравненияВерсийФайлов.OpenOfficeOrgWriter Тогда + Возврат "OpenOfficeOrgWriter"; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +// Информационные + +// Функция возвращает количество Файлов, занятых текущим пользователем +// в разрезе владельца. +// Параметры: +// ВладелецФайла - ЛюбаяСсылка - владелец файла. +// +// Возвращаемое значение: +// Число - количество занятых файлов. +// +Функция КоличествоФайловЗанятыхТекущимПользователем(ВладелецФайла) Экспорт + + Возврат РаботаСФайламиСлужебный.КоличествоЗанятыхФайлов(ВладелецФайла); + +КонецФункции + +// Получает значение настройки ПоказыватьКолонкуРазмер. +// Возвращаемое значение: +// Булево - Показывать колонку размер. +// +Функция ПолучитьПоказыватьКолонкуРазмер() Экспорт + ПоказыватьКолонкуРазмер = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьКолонкуРазмер"); + Если ПоказыватьКолонкуРазмер = Неопределено Тогда + ПоказыватьКолонкуРазмер = Ложь; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПоказыватьКолонкуРазмер", ПоказыватьКолонкуРазмер); + КонецЕсли; + + Возврат ПоказыватьКолонкуРазмер; + +КонецФункции + // Возвращает количество файлов в томах. // Возвращаемое значение: // Число - число файлов в томах. @@ -4064,6 +3059,134 @@ КонецФункции +// Получает количество версий файла. +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - файл. +// +// Возвращаемое значение: +// Число - число версий +Функция ПолучитьКоличествоВерсий(ФайлСсылка) + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.Владелец = &ФайлСсылка"; + + Запрос.УстановитьПараметр("ФайлСсылка", ФайлСсылка); + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Число(Выборка.Количество); + +КонецФункции + +// Вернет Истина если есть зацикливание (если одну из папок переносим в ее же дочернюю папку). +// Параметры: +// МассивСсылокНаФайлы - Массив - массив файлов. +// НовыйРодитель - ЛюбаяСсылка - новый владелец файла. +// +// Возвращаемое значение: +// Булево - есть зацикливание. +// +Функция ЕстьЗацикливание(Знач МассивСсылокНаФайлы, НовыйРодитель) + + Если МассивСсылокНаФайлы.Найти(НовыйРодитель) <> Неопределено Тогда + Возврат Истина; // нашли зацикливание + КонецЕсли; + + Родитель = НовыйРодитель.Родитель; + Если Родитель.Пустая() Тогда // дошли до корня + Возврат Ложь; + КонецЕсли; + + Если ЕстьЗацикливание(МассивСсылокНаФайлы, Родитель) Тогда + Возврат Истина; // нашли зацикливание + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Возвращает Истина, если в указанном элементе справочника ПапкиФайлов есть дочерний элемент с таким именем. +// +// Параметры: +// ИмяПапки - Строка - имя папки +// Родитель - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - родитель папки. +// ПерваяПапкаСТакимЖеИменем - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - первая же найденная папка с указанным именем. +// +// Возвращаемое значение: +// Булево - есть дочерний элемент с таким именем. +// +Функция ЕстьПапкаСТакимИменем(ИмяПапки, Родитель, ПерваяПапкаСТакимЖеИменем) Экспорт + + ПерваяПапкаСТакимЖеИменем = Справочники.ПапкиФайлов.ПустаяСсылка(); + + ЗапросВПапки = Новый Запрос; + ЗапросВПапки.УстановитьПараметр("Наименование", ИмяПапки); + ЗапросВПапки.УстановитьПараметр("Родитель", Родитель); + ЗапросВПапки.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ПапкиФайлов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПапкиФайлов КАК ПапкиФайлов + |ГДЕ + | ПапкиФайлов.Наименование = &Наименование + | И ПапкиФайлов.Родитель = &Родитель"; + + Если ТипЗнч(Родитель) <> Тип("СправочникСсылка.ПапкиФайлов") Тогда + ИмяСправочникаХранилищаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(Родитель); + ЗапросВПапки.Текст = СтрЗаменить(ЗапросВПапки.Текст, ".ПапкиФайлов", "." + ИмяСправочникаХранилищаФайлов); + КонецЕсли; + + РезультатЗапроса = ЗапросВПапки.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + ВыборкаЗапроса = РезультатЗапроса.Выгрузить(); + ПерваяПапкаСТакимЖеИменем = ВыборкаЗапроса[0].Ссылка; + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ПолныйПутьПапки(Папка) + + ПолныйПуть = ""; + + ПапкаРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Папка.Ссылка, "Родитель"); + + Если ЗначениеЗаполнено(ПапкаРодитель) Тогда + + ПолныйПуть = ""; + Пока ЗначениеЗаполнено(ПапкаРодитель) Цикл + + ПолныйПуть = Строка(ПапкаРодитель) + "\" + ПолныйПуть; + ПапкаРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПапкаРодитель, "Родитель"); + Если Не ЗначениеЗаполнено(ПапкаРодитель) Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + ПолныйПуть = ПолныйПуть + Строка(Папка.Ссылка); + + Если Не ПустаяСтрока(ПолныйПуть) Тогда + ПолныйПуть = """" + ПолныйПуть + """"; + КонецЕсли; + + КонецЕсли; + + Возврат ПолныйПуть; + +КонецФункции + // Возвращает в параметре КоличествоФайловВТомах количество файлов в томах. Процедура ОпределитьКоличествоФайловВТомах(КоличествоФайловВТомах) Экспорт @@ -4071,6 +3194,101 @@ КонецПроцедуры +// Есть ли дублирующийся элемент в условном оформлении списка. +// Параметры: +// Элементы - массив элементов условного оформления списка. +// ЭлементПоиска - элемент условного оформления списка. +// +// Возвращаемое значение: +// Булево - есть дублирующийся элемент. +// +Функция ЕстьДублирующийсяЭлемент(Элементы, ЭлементПоиска) + + Для Каждого Элемент Из Элементы Цикл + Если Элемент <> ЭлементПоиска Тогда + + Если Элемент.Оформление.Элементы.Количество() <> ЭлементПоиска.Оформление.Элементы.Количество() Тогда + Продолжить; + КонецЕсли; + + НайденОтличающийсяЭлемент = Ложь; + + // Обходим все элементы оформления - если есть хоть один отличающийся - делаем Продолжить; + ЧислоЭлементов = Элемент.Оформление.Элементы.Количество(); + Для Индекс = 0 По ЧислоЭлементов - 1 Цикл + Элемент1 = Элемент.Оформление.Элементы[Индекс]; + Элемент2 = ЭлементПоиска.Оформление.Элементы[Индекс]; + + Если Элемент1.Использование И Элемент2.Использование Тогда + Если Элемент1.Параметр <> Элемент2.Параметр ИЛИ Элемент1.Значение <> Элемент2.Значение Тогда + НайденОтличающийсяЭлемент = Истина; + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если НайденОтличающийсяЭлемент Тогда + Продолжить; + КонецЕсли; + + Если Элемент.Отбор.Элементы.Количество() <> ЭлементПоиска.Отбор.Элементы.Количество() Тогда + Продолжить; + КонецЕсли; + + // Обходим все элементы отбора - если есть хоть один отличающийся - делаем Продолжить; + ЧислоЭлементов = Элемент.Отбор.Элементы.Количество(); + Для Индекс = 0 По ЧислоЭлементов - 1 Цикл + Элемент1 = Элемент.Отбор.Элементы[Индекс]; + Элемент2 = ЭлементПоиска.Отбор.Элементы[Индекс]; + + Если Элемент1.Использование И Элемент2.Использование Тогда + Если Элемент1.ВидСравнения <> Элемент2.ВидСравнения + ИЛИ Элемент1.ЛевоеЗначение <> Элемент2.ЛевоеЗначение + ИЛИ Элемент1.ПравоеЗначение <> Элемент2.ПравоеЗначение Тогда + + НайденОтличающийсяЭлемент = Истина; + Прервать; + + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если НайденОтличающийсяЭлемент Тогда + Продолжить; + КонецЕсли; + + // Обошли все элементы оформления и отбора - они все одинаковы - это дубль. + Возврат Истина; + + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +Функция ФайлСинхронизируетсяОблачнымСервисом(Файл) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | КОЛИЧЕСТВО(СтатусыСинхронизацииФайловСОблачнымСервисом.Файл) КАК Файл + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = &Файл"; + + Запрос.УстановитьПараметр("Файл", Файл); + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ @@ -4400,7 +3618,6 @@ БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); @@ -4413,9 +3630,8 @@ РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор); ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -4557,7 +3773,6 @@ БлокировкаВерсии = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаВерсии.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ВерсияСсылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ВерсияСсылка); - ЭлементБлокировкиДанных.Режим = БлокировкаВерсии.Исключительный; БлокировкаВерсии.Заблокировать(); ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); @@ -4591,7 +3806,6 @@ БлокировкаФайла = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаФайла.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Файл)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Файл); - ЭлементБлокировкиДанных.Режим = БлокировкаФайла.Исключительный; БлокировкаФайла.Заблокировать(); ФайлОбъект = Файл.ПолучитьОбъект(); @@ -5029,6 +4243,7 @@ Для Каждого Подстрока Из Строка.Строки Цикл ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); КонецЦикла; + // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; @@ -5067,6 +4282,7 @@ Для Каждого Подстрока Из Строка.Строки Цикл ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); КонецЦикла; + // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; @@ -5107,8 +4323,10 @@ ИсходныеДанные, СтрокаПодписи.АдресПодписи, ОписаниеОшибки, СтрокаПодписи.ДатаПодписи); СтрокаПодписи.ДатаПроверкиПодписи = ТекущаяДатаСеанса(); - СтрокаПодписи.ПодписьВерна = ПодписьВерна; - РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(СтрокаПодписи, ОписаниеОшибки); + СтрокаПодписи.ПодписьВерна = ПодписьВерна; + СтрокаПодписи.ОписаниеОшибки = ОписаниеОшибки; + + РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(СтрокаПодписи); КонецЦикла; КонецПроцедуры @@ -5222,26 +4440,13 @@ ИспользованныеИменаФайлов = Новый Соответствие; Для Каждого ФайлВложение Из Параметры.МассивФайлов Цикл - ОписаниеФайла = ДанныеФайлаДляОтправкиПоПочте(ФайлВложение, Параметры.ИдентификаторФормы); - Результат.Добавить(ОписаниеФайла); + РаботаСФайламиСлужебный.СформироватьСписокФайловДляОтправкиПоПочте(Результат, ФайлВложение, Параметры.ИдентификаторФормы); КонецЦикла; Возврат Результат; КонецФункции -Функция ДанныеФайлаДляОтправкиПоПочте(ФайлВложение, ИдентификаторФормы) - - ДанныеФайлаИДвоичныеДанные = ПолучитьДанныеФайла(ФайлВложение, ИдентификаторФормы); - ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайлаИДвоичныеДанные.Наименование, ДанныеФайлаИДвоичныеДанные.Расширение); - ОписаниеФайла = Новый Структура; - ОписаниеФайла.Вставить("Представление", ИмяФайла); - ОписаниеФайла.Вставить("АдресВоВременномХранилище", ДанныеФайлаИДвоичныеДанные.СсылкаНаДвоичныеДанныеФайла); - - Возврат ОписаниеФайла; - -КонецФункции - /////////////////////////////////////////////////////////////////////////////////// // Печать табличного документа со штампом электронной подписи. diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index de1630990..6ae0ae2f5 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -54,12 +54,9 @@ КонецЕсли; Если ПараметрыВыполнения.НеОткрыватьКарточкуПослеСозданияИзФайла <> Истина Тогда - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ключ", Результат.ФайлСсылка); - ПараметрыФормы.Вставить("КарточкаОткрытаПослеСозданияФайла", Истина); - - ОбработчикДиалога = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); - ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикДиалога); + ПараметрыФормы = Новый Структура("КарточкаОткрытаПослеСозданияФайла", Истина); + ОписаниеОповещенияОЗакрытии = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); + РаботаСФайламиКлиент.ОткрытьФормуФайла(Результат.ФайлСсылка,, ПараметрыФормы, ОписаниеОповещенияОЗакрытии); Иначе ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Результат); КонецЕсли; @@ -144,7 +141,7 @@ // Создание карточки Файла в БД. Попытка - Если РаботаСФайламиСлужебныйВызовСервера.ЭтоСправочникФайлы(ПараметрыВыполнения.ВладелецФайла) Тогда + Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(ПараметрыВыполнения.ВладелецФайла) Тогда СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", ФайлКлиента); СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; @@ -163,7 +160,7 @@ Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл(ПараметрыФайла, АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста); - КонецЕсли; + КонецЕсли; Результат.ФайлДобавлен = Истина; Исключение Результат.ТекстОшибки = РаботаСФайламиСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); @@ -245,8 +242,8 @@ ПрисоединенныйФайл, БиблиотекаКартинок.Информация32); - ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ЭтоНовый", ПрисоединенныйФайл, Истина); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + ПараметрыФормы = Новый Структура("ЭтоНовый", Истина); + РаботаСФайламиКлиент.ОткрытьФормуФайла(ПрисоединенныйФайл,, ПараметрыФормы) КонецЕсли; Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда @@ -255,7 +252,6 @@ ПараметрыОповещения = Новый Структура; ПараметрыОповещения.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыОповещения.Вставить("Файл" , ПрисоединенныеФайлыМассив[0]); - ПараметрыОповещения.Вставить("Событие" , "СозданФайл"); ПараметрыОповещения.Вставить("ЭтоНовый" , Истина); Оповестить("Запись_Файл", ПараметрыОповещения, ПрисоединенныеФайлыМассив); КонецЕсли; @@ -453,11 +449,7 @@ Возврат Ложь; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - ЗапуститьПриложение("explorer.exe /select, """ + ФайлНаДиске.ПолноеИмя + """"); - Иначе - ЗапуститьПриложение(ФайлНаДиске.Путь); - КонецЕсли; + ОбщегоНазначенияКлиент.ОткрытьПроводник(ФайлНаДиске.ПолноеИмя); Возврат Истина; @@ -528,6 +520,50 @@ КонецПроцедуры +Функция ПараметрыОбновленияФайла(ОбработчикРезультата, ОбъектСсылка, ИдентификаторФормы) Экспорт + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ОбработчикРезультата", ОбработчикРезультата); + ПараметрыОбработчика.Вставить("ОбъектСсылка", ОбъектСсылка); + ПараметрыОбработчика.Вставить("ИдентификаторФормы", ИдентификаторФормы); + ПараметрыОбработчика.Вставить("ХранитьВерсии"); + ПараметрыОбработчика.Вставить("ФайлРедактируетТекущийПользователь"); + ПараметрыОбработчика.Вставить("Редактирует"); + ПараметрыОбработчика.Вставить("АвторТекущейВерсии"); + ПараметрыОбработчика.Вставить("ПереданныйПолныйПутьКФайлу", ""); + ПараметрыОбработчика.Вставить("СоздатьНовуюВерсию"); + ПараметрыОбработчика.Вставить("КомментарийКВерсии"); + ПараметрыОбработчика.Вставить("ПоказыватьОповещение", Истина); + ПараметрыОбработчика.Вставить("ПрименитьКоВсем", Ложь); + ПараметрыОбработчика.Вставить("ОсвобождатьФайлы", Истина); + ПараметрыОбработчика.Вставить("Кодировка"); + Возврат ПараметрыОбработчика; + +КонецФункции + +// Сохраняет отредактированный файл в ИБ и снимает с него блокировку. +// +// Параметры: +// Параметры - Структура - см. ПараметрыОбновленияФайла. +// +Процедура ЗакончитьРедактированиеСОповещением(Параметры) Экспорт + + Если Параметры.ОбъектСсылка = Неопределено Тогда + ВернутьРезультат(Параметры.ОбработчикРезультата, Неопределено); + Возврат; + КонецЕсли; + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ОбработчикРезультата", Параметры.ОбработчикРезультата); + ПараметрыВыполнения.Вставить("ПараметрКоманды", Параметры.ОбъектСсылка); + Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеСОповещениемЗавершение", ЭтотОбъект, ПараметрыВыполнения); + + ПараметрыОбработчика = ПараметрыОбновленияФайла(Обработчик, Параметры.ОбъектСсылка, Параметры.ИдентификаторФормы); + ПараметрыОбработчика.СоздатьНовуюВерсию = Параметры.СоздатьНовуюВерсию; + ЗакончитьРедактирование(ПараметрыОбработчика); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с криптографией. @@ -587,8 +623,10 @@ СтрокаПодписи = ДополнительныеПараметры.СтрокаПодписи; СтрокаПодписи.ДатаПроверкиПодписи = ОбщегоНазначенияКлиент.ДатаСеанса(); - СтрокаПодписи.ПодписьВерна = (Результат = Истина); - РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(СтрокаПодписи, Результат); + СтрокаПодписи.ПодписьВерна = (Результат = Истина); + СтрокаПодписи.ОписаниеОшибки = ?(СтрокаПодписи.ПодписьВерна, "", Результат); + + РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(СтрокаПодписи); ПроверитьПодписиЦиклНачало(ДополнительныеПараметры); @@ -621,10 +659,6 @@ // Проверяет установлена ли компонента сканирования и есть ли хоть один сканер. Функция ДоступнаКомандаСканировать() Экспорт - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Возврат Ложь; - КонецЕсли; - Если Не ПроинициализироватьКомпоненту() Тогда Возврат Ложь; КонецЕсли; @@ -923,9 +957,9 @@ НСтр("ru = 'Размер файла отличается'")); Параметры.Вставить("Сообщение", - НСтр("ru = 'Размер файла в рабочем каталоге и в хранилище файлов отличается. + НСтр("ru = 'Размер файла в рабочем каталоге на компьютере и его копии в программе отличается. | - |Взять файл из хранилища файлов и заменить им существующий или + |Взять файл из программы и заменить им существующий на компьютере или |открыть существующий без обновления?'")); Иначе // Все совпадает - и дата, и размер. @@ -940,13 +974,13 @@ Если ДанныеФайла.ВРабочемКаталогеНаЧтение = Ложь Тогда // Файл в рабочем каталоге для редактирования. - Параметры.Вставить("Заголовок", НСтр("ru = 'В хранилище файлов новый файл'")); + Параметры.Вставить("Заголовок", НСтр("ru = 'В программе более новая версия файла'")); Параметры.Вставить("Сообщение", - НСтр("ru = 'Файл в хранилище файлов, отмеченный как занятый для редактирования, - |имеет более позднюю дату изменения (новее), чем в рабочем каталоге. + НСтр("ru = 'Файл в программе, отмеченный как занятый для редактирования, + |имеет более позднюю дату изменения (новее), чем его копия в рабочем каталоге на компьютере. | - |Взять файл из хранилища файлов и заменить им существующий или + |Взять файл из программы и заменить им существующий на компьютере или |открыть существующий без обновления?'")); Иначе // Файл в рабочем каталоге для чтения. @@ -969,15 +1003,15 @@ Иначе // Файл в рабочем каталоге для чтения. - Параметры.Вставить("Заголовок", НСтр("ru = 'В рабочем каталоге новый файл'")); + Параметры.Вставить("Заголовок", НСтр("ru = 'На компьютере более новая версия файла'")); Параметры.Вставить( "Сообщение", - НСтр("ru = 'Файл в рабочем каталоге имеет более позднюю дату изменения (новее), - |чем в хранилище файлов. Возможно, он был изменен. + НСтр("ru = 'Файл в рабочем каталоге на компьютере имеет более позднюю дату изменения (новее), + |чем в программе. Возможно, он был отредактирован. | - |Открыть существующий файл или заменить его на файл - |из хранилища файлов c потерей изменений и открыть?'")); + |Открыть существующий файл на компьютере или заменить его на файл + |из программы c потерей изменений и открыть?'")); КонецЕсли; КонецЕсли; @@ -1085,8 +1119,8 @@ | |1. Нажмите кнопку ""Сохранить"" (""Save""). | - |2. Выберите каталог для сохранения файла и запомните его - |(каталог понадобится для редактирования и помещения файла обратно в хранилище). + |2. Выберите каталог для сохранения файла на компьютере и запомните его + |(каталог понадобится для редактирования и помещения файла обратно в программу). | |3. Для редактирования файла перейдите в выбранный ранее каталог, |найдите там сохраненный файл и откройте его.'"); @@ -1191,7 +1225,9 @@ СтрокаПодписи.ПодписьВерна = ДанныеСтрок[Индекс].ПодписьВерна; СтрокаПодписи.ДатаПроверкиПодписи = ДанныеСтрок[Индекс].ДатаПроверкиПодписи; - РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(СтрокаПодписи, ДанныеСтрок[Индекс].ОписаниеОшибки); + СтрокаПодписи.ОписаниеОшибки = ДанныеСтрок[Индекс].ОписаниеОшибки; + + РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(СтрокаПодписи); Индекс = Индекс + 1; КонецЦикла; @@ -1252,7 +1288,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при помещении файла |""%1"" - |во временное хранилище.'"), + |в программу.'"), Файл.ПолноеИмя) ); Продолжить; КонецЕсли; @@ -1361,7 +1397,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при помещении файла |""%1"" - |во временное хранилище.'"), + |в программу.'"), ИмяФайла); КонецЕсли; @@ -1428,6 +1464,34 @@ КонецФункции +Процедура ОсвободитьФайлы(СписокФайлов) Экспорт + МассивФайлов = Новый Массив; + Для Каждого ЭлементСписка Из СписокФайлов.ВыделенныеСтроки Цикл + ДанныеСтроки = СписокФайлов.ДанныеСтроки(ЭлементСписка); + Если Не ВозможностьОсвободитьФайл( + ДанныеСтроки.Ссылка, + ДанныеСтроки.ФайлРедактируетТекущийПользователь, + ДанныеСтроки.Редактирует) Тогда + Продолжить; + КонецЕсли; + МассивФайлов.Добавить(ДанныеСтроки.Ссылка); + КонецЦикла; + + Если МассивФайлов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + КоличествоЗанятыхФайлов = РаботаСФайламиСлужебныйВызовСервера.ОсвободитьФайлы(МассивФайлов); + СтандартныеПодсистемыКлиент.УстановитьПараметрКлиента("КоличествоЗанятыхФайлов", КоличествоЗанятыхФайлов); + Если МассивФайлов.Количество() > 0 Тогда + ОповеститьОбИзменении(ТипЗнч(МассивФайлов[0])); + Оповестить("Запись_Файл", Новый Структура, Неопределено); + Иначе + ОповеститьОбИзменении(МассивФайлов[0]); + Оповестить("Запись_Файл", Новый Структура, МассивФайлов[0]); + КонецЕсли; +КонецПроцедуры + // Освобождает файл без обновления. // // Параметры: @@ -1528,13 +1592,16 @@ // Проверка наличия файла на диске. ПараметрыВыполнения.Вставить("ФайлНовойВерсии", Новый Файл(ПараметрыВыполнения.ПолныйПутьКФайлу)); - Если Не ПараметрыВыполнения.ФайлНовойВерсии.Существует() Тогда + + Если Не ЗначениеЗаполнено(ПараметрыВыполнения.ПолныйПутьКФайлу) + Или Не ПараметрыВыполнения.ФайлНовойВерсии.Существует() Тогда + Если ПараметрыВыполнения.ПрименитьКоВсем = Ложь Тогда Если Не ПустаяСтрока(ПараметрыВыполнения.ПолныйПутьКФайлу) Тогда СтрокаПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось поместить файл |""%1"" (%2), - |в хранилище файлов, т.к. он не найден в рабочем каталоге. + |в программу, т.к. он не существует в рабочем каталоге на компьютере. | |Освободить файл?'"), Строка(ПараметрыВыполнения.ДанныеФайла.Ссылка), @@ -1542,11 +1609,10 @@ Иначе СтрокаПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось поместить файл ""%1"", - |в хранилище файлов, т.к. он не найден в рабочем каталоге. + |в программу, т.к. он не существует в рабочем каталоге на компьютере. | |Освободить файл?'"), Строка(ПараметрыВыполнения.ДанныеФайла.Ссылка)); - СтрокаПредупреждения = СтрокаПредупреждения + "."; КонецЕсли; Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеСРасширениемПослеОтветаНаВопросОсвободитьФайл", ЭтотОбъект, ПараметрыВыполнения); @@ -1563,8 +1629,8 @@ ПараметрыВыполнения.ФайлНовойВерсии.УстановитьТолькоЧтение(Не ТолькоЧтение); ПараметрыВыполнения.ФайлНовойВерсии.УстановитьТолькоЧтение(ТолькоЧтение); Исключение - ТекстОшибки = НСтр("ru = 'Не удалось поместить файл ""%1"" в хранилище файлов, - |возможно он заблокирован другой программой.'"); + ТекстОшибки = НСтр("ru = 'Не удалось поместить файл ""%1"" в рабочий каталог на компьютер, + |так как возможно он заблокирован другой программой.'"); ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", Строка(ПараметрыВыполнения.ДанныеФайла.Ссылка)); ВызватьИсключение ТекстОшибки + Символы.ПС + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; @@ -1597,11 +1663,7 @@ СтруктураПараметров.Вставить("СоздатьНовуюВерсиюДоступность", СоздатьНовуюВерсиюДоступность); Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеСРасширениемПослеПомещенияФайлаНаСервер", ЭтотОбъект, ПараметрыВыполнения); - Если СоздатьНовуюВерсиюДоступность Тогда - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаВозвратаФайла", СтруктураПараметров, , , , , Обработчик); - Иначе - ЗакончитьРедактированиеСРасширениемПослеПроверкиНовойВерсии(ПараметрыВыполнения); - КонецЕсли; + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаВозвратаФайла", СтруктураПараметров, , , , , Обработчик); Иначе // Параметры СоздатьНовуюВерсию и КомментарийКВерсии переданы извне. @@ -1700,7 +1762,7 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось поместить файл в хранилище файлов по причине: + НСтр("ru = 'Не удалось поместить файл с компьютера в программу по причине: |""%1"". | |Повторить операцию?'"), @@ -1834,7 +1896,7 @@ ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось поместить файл ""%1"" - |в хранилище файлов по причине + |с диска на компьютере в программу по причине |""%2"". | |Повторить операцию?'"), @@ -2114,7 +2176,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось поместить файл ""%1"" - |в хранилище файлов по причине + |с диска на компьютере в программу по причине |""%2"". | |Повторить операцию?'"), @@ -2348,7 +2410,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файл ""%1"" - |в хранилище файлов имеет более позднюю дату изменения (%2), + |на диске на компьютере имеет более позднюю дату изменения (%2), |чем выбранный файл (%3). | |Операция прервана.'"), @@ -3089,6 +3151,8 @@ РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИОсвободитьФайл(ПараметрыВыполнения.ОбъектСсылка, ПараметрыВыполнения.ДанныеФайла, ПараметрыВыполнения.УникальныйИдентификатор); + ОповеститьОбИзменении(ТипЗнч(ПараметрыВыполнения.ОбъектСсылка)); + Оповестить("Запись_Файл", Новый Структура("Событие", "ДанныеФайлаИзменены"), ПараметрыВыполнения.ОбъектСсылка); Если РасширениеРаботыСФайламиПодключено() Тогда НаЧтение = Истина; @@ -3113,27 +3177,6 @@ //////////////////////////////////////////////////////////////////////////////// // Запись изменений файла. -Функция ПараметрыОбновленияФайла(ОбработчикРезультата, ОбъектСсылка, ИдентификаторФормы) Экспорт - - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("ОбработчикРезультата", ОбработчикРезультата); - ПараметрыОбработчика.Вставить("ОбъектСсылка", ОбъектСсылка); - ПараметрыОбработчика.Вставить("ИдентификаторФормы", ИдентификаторФормы); - ПараметрыОбработчика.Вставить("ХранитьВерсии"); - ПараметрыОбработчика.Вставить("ФайлРедактируетТекущийПользователь"); - ПараметрыОбработчика.Вставить("Редактирует"); - ПараметрыОбработчика.Вставить("АвторТекущейВерсии"); - ПараметрыОбработчика.Вставить("ПереданныйПолныйПутьКФайлу", ""); - ПараметрыОбработчика.Вставить("СоздатьНовуюВерсию"); - ПараметрыОбработчика.Вставить("КомментарийКВерсии"); - ПараметрыОбработчика.Вставить("ПоказыватьОповещение", Истина); - ПараметрыОбработчика.Вставить("ПрименитьКоВсем", Ложь); - ПараметрыОбработчика.Вставить("ОсвобождатьФайлы", Истина); - ПараметрыОбработчика.Вставить("Кодировка"); - Возврат ПараметрыОбработчика; - -КонецФункции - // Начало записи изменений файла. // // Параметры: @@ -3191,8 +3234,8 @@ Если Не ПараметрыВыполнения.ФайлНовойВерсии.Существует() Тогда Если Не ПустаяСтрока(ПараметрыВыполнения.ПолныйПутьКФайлу) Тогда СтрокаПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось поместить файл ""%1"" в хранилище файлов: - |Файл не найден в рабочем каталоге: + НСтр("ru = 'Не удалось поместить файл ""%1"" + |в программу, так как он не существует на диске на компьютере: |%2. | |Освободить файл?'"), @@ -3200,8 +3243,8 @@ ПараметрыВыполнения.ПолныйПутьКФайлу); Иначе СтрокаПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось поместить файл ""%1"" в хранилище файлов: - |Файл не найден в рабочем каталоге. + НСтр("ru = 'Не удалось поместить файл ""%1"" + |в программу, так как он не существует на диске на компьютере. | |Освободить файл?'"), Строка(ПараметрыВыполнения.ДанныеФайла.Ссылка)); @@ -3230,7 +3273,7 @@ КонецЕсли; Иначе ПараметрыВыполнения.СоздатьНовуюВерсию = Ложь; - СоздатьНовуюВерсиюДоступность = Ложь; + СоздатьНовуюВерсиюДоступность = Ложь; СохранитьИзмененияФайлаСРасширениемПослеПроверкиНовойВерсии(ПараметрыВыполнения); Возврат; КонецЕсли; @@ -3398,6 +3441,7 @@ Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("БольшеНеЗадаватьЭтотВопрос") И Результат.БольшеНеЗадаватьЭтотВопрос Тогда ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( "НастройкиПрограммы","ПоказыватьИнформациюЧтоФайлНеБылИзменен", Ложь,,, Истина); + ОбновитьПовторноИспользуемыеЗначения(); КонецЕсли; ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Истина); @@ -3772,7 +3816,6 @@ ПараметрыОповещения = Новый Структура; ПараметрыОповещения.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыОповещения.Вставить("Файл" , ПрисоединенныйФайл); - ПараметрыОповещения.Вставить("Событие" , "СозданФайл"); ПараметрыОповещения.Вставить("ЭтоНовый" , Истина); Оповестить("Запись_Файл", ПараметрыОповещения, ПрисоединенныйФайл); @@ -3787,9 +3830,7 @@ ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), ПрисоединенныйФайл, БиблиотекаКартинок.Информация32); - - ПараметрыФормы = Новый Структура("ПрисоединенныйФайл", ПрисоединенныйФайл); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + РаботаСФайламиКлиент.ОткрытьФормуФайла(ПрисоединенныйФайл); КонецЕсли; @@ -3940,8 +3981,7 @@ // Получаем путь файла в рабочем каталоге - с проверкой на уникальность. Если ПараметрыВыполнения.ПолноеИмяФайла = "" Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Ошибка получения файла из хранилища файлов - |в рабочий каталог.'")); + НСтр("ru = 'Не удалось получить файл из программы в рабочий каталог на компьютере.'")); ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, ПараметрыВыполнения); Возврат; КонецЕсли; @@ -4066,8 +4106,7 @@ Контекст.Вставить("ИдентификаторФормы", ИдентификаторФормы); Контекст.Вставить("ДляРедактирования", Ложь); Контекст.Вставить("ДанныеФайла", Неопределено); - ДополнительныеПараметры.Свойство("ДляРедактирования", Контекст.ДляРедактирования); - ДополнительныеПараметры.Свойство("ДанныеФайла", Контекст.ДанныеФайла); + ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, Контекст); Если ТипЗнч(Контекст.ДанныеФайла) <> Тип("Структура") Или Не ЗначениеЗаполнено(Контекст.ДанныеФайла.СсылкаНаДвоичныеДанныеФайла) Тогда @@ -4077,7 +4116,7 @@ КонецЕсли; Контекст.Вставить("ЗаголовокОшибки", - НСтр("ru = 'Не удалось получить файл на компьютер из хранилища файлов по причине:'") + Символы.ПС); + НСтр("ru = 'Не удалось получить файл на компьютер из программы по причине:'") + Символы.ПС); Если Контекст.ДляРедактирования И Контекст.ДанныеФайла.Редактирует <> ПользователиКлиентСервер.АвторизованныйПользователь() Тогда @@ -4210,7 +4249,7 @@ КонецЕсли; Контекст.Вставить("ЗаголовокОшибки", - НСтр("ru = 'Не удалось поместить файл с компьютера в хранилище файлов по причине:'") + Символы.ПС); + НСтр("ru = 'Не удалось поместить файл с компьютера в программу по причине:'") + Символы.ПС); ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Новый ОписаниеОповещения( "ПоместитьПрисоединенныйФайлПослеПодключенияРасширения", ЭтотОбъект, Контекст),, Ложь); @@ -4244,8 +4283,8 @@ КонецЕсли; Контекст.Вставить("РабочийКаталогПользователя", Результат.Каталог); - Контекст.Вставить("КаталогФайла", Контекст.РабочийКаталогПользователя + Контекст.ДанныеФайла.ОтносительныйПуть); - Контекст.Вставить("ПолноеИмяФайла", Контекст.КаталогФайла + Контекст.ДанныеФайла.ИмяФайла); + Контекст.Вставить("КаталогФайла", Контекст.РабочийКаталогПользователя); + Контекст.Вставить("ПолноеИмяФайла", Контекст.ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге); Если Не ЗначениеЗаполнено(Контекст.ПолноеИмяПомещаемогоФайла) Тогда Контекст.ПолноеИмяПомещаемогоФайла = Контекст.ПолноеИмяФайла; @@ -4710,19 +4749,19 @@ Если ПараметрыВыполнения.ОчищатьВсе = Ложь Тогда ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполняется очистка рабочего каталога при добавлении файла. + НСтр("ru = 'Выполняется очистка рабочего каталога на компьютере. | - |В хранилище файлов не найден файл + |В программе отсутствует файл |""%1"". | - |Удалить его из рабочего каталога?'"), + |Удалить его копию из рабочего каталога на компьютере?'"), ПараметрыВыполнения.ИмяКаталога + ПараметрыВыполнения.Элемент.Путь); Иначе ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В хранилище файлов не найден файл + НСтр("ru = 'В программе отсутствует файл |""%1"". | - |Удалить его из рабочего каталога?'"), + |Удалить его копию из рабочего каталога на компьютере?'"), ПараметрыВыполнения.ИмяКаталога + ПараметрыВыполнения.Элемент.Путь); КонецЕсли; @@ -4744,9 +4783,9 @@ ФайлНаДиске = Новый Файл(ПолныйПуть); ФайлНаДиске.УстановитьТолькоЧтение(Ложь); Если ПараметрыВыполнения.ОчищатьВсе = Ложь Тогда - ШапкаВопроса = НСтр("ru = 'Выполняется очистка рабочего каталога при добавлении файла.'"); + ШапкаВопроса = НСтр("ru = 'Выполняется очистка рабочего каталога на компьютере при добавлении файла.'"); Иначе - ШапкаВопроса = НСтр("ru = 'Выполняется очистка рабочего каталога.'"); + ШапкаВопроса = НСтр("ru = 'Выполняется очистка рабочего каталога на компьютере.'"); КонецЕсли; УдалитьФайл(ПараметрыВыполнения, ПолныйПуть, Неопределено, ШапкаВопроса); @@ -5322,27 +5361,27 @@ Если ПараметрыВыполнения.ДанныеФайла.Владелец = ВРегистреПапка Тогда // Одна и та же папка. ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В рабочем каталоге уже есть файл + НСтр("ru = 'В рабочем каталоге на компьютере уже есть файл |""%1"", - |связанный с другим файлом в информационной базе. + |соответствующий другому файлу в программе. | - |Код файла в хранилище файлов: %2. + |Код файла в программе: %2. |Код файла в рабочем каталоге: %3. | - |Переименуйте один из файлов в информационной базе.'"), + |Рекомендуется переименовать один из файлов в программе.'"), ПараметрыВыполнения.ПолноеИмяФайла, ПараметрыВыполнения.ДанныеФайла.КодФайла, ВРегистреКодФайла); Иначе ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В рабочем каталоге уже есть файл + НСтр("ru = 'В рабочем каталоге на компьютере уже есть файл |""%1"", - |связанный с другим файлом информационной базы. + |соответствующий другому файлу в программе. | - |Код файла в хранилище файлов: %2. + |Код файла в программе: %2. |Код файла в рабочем каталоге: %3. | - |В информационной базе измените рабочий каталог одной из папок. + |Рекомендуется указать другой рабочий каталог для одной из папок в программе. |(У двух папок не должно быть одинакового рабочего каталога).'"), ПараметрыВыполнения.ПолноеИмяФайла, ПараметрыВыполнения.ДанныеФайла.КодФайла, @@ -5477,8 +5516,7 @@ // Получаем путь файла в рабочем каталоге - с проверкой на уникальность. Если ПараметрыВыполнения.ПолноеИмяФайла = "" Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Ошибка получения файла из хранилища файлов - |в рабочий каталог.'")); + НСтр("ru = 'Не удалось получить файл из программы в рабочий каталог на компьютере.'")); ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, ПараметрыВыполнения); Возврат; КонецЕсли; @@ -6059,8 +6097,7 @@ Если РаботаСФайламиСлужебныйВызовСервера.ЕстьПапкаСТакимИменем( ПараметрыВыполнения.ИмяПапки, ПараметрыВыполнения.Владелец, - ПараметрыВыполнения.ПерваяПапкаСТакимЖеИменем, - ПараметрыВыполнения.ИмяСправочникаХранилищаФайлов) Тогда + ПараметрыВыполнения.ПерваяПапкаСТакимЖеИменем) Тогда ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Папка ""%1"" уже существует. | @@ -6108,14 +6145,14 @@ Процедура ИмпортФайловЦиклПродолжитьИмпорт(ПараметрыВыполнения) Если Не ПараметрыВыполнения.ПапкаУжеНайдена Тогда - Если ПустаяСтрока(ПараметрыВыполнения.ИмяСправочникаХранилищаФайлов) Тогда - ПараметрыВыполнения.ПапкаДляДобавленияТекущая = РаботаСФайламиСлужебныйВызовСервера.СправочникиПапкиСоздатьЭлемент( + Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(ПараметрыВыполнения.Владелец) Тогда + ПараметрыВыполнения.ПапкаДляДобавленияТекущая = РаботаСФайламиСлужебныйВызовСервера.СоздатьПапкуФайлов( ПараметрыВыполнения.ИмяПапки, ПараметрыВыполнения.Владелец); - Иначе + Иначе ПараметрыВыполнения.ПапкаДляДобавленияТекущая = ПараметрыВыполнения.Владелец; - ПараметрыВыполнения.ГруппаФайлов = РаботаСФайламиСлужебныйВызовСервера.СправочникиПапкиСоздатьЭлемент( - ПараметрыВыполнения.ИмяПапки, ПараметрыВыполнения.Владелец, , ПараметрыВыполнения.ИмяСправочникаХранилищаФайлов, ПараметрыВыполнения.ГруппаФайлов); - КонецЕсли; + ПараметрыВыполнения.ГруппаФайлов = РаботаСФайламиСлужебныйВызовСервера.СоздатьПапкуФайлов( + ПараметрыВыполнения.ИмяПапки, ПараметрыВыполнения.Владелец, , ПараметрыВыполнения.ГруппаФайлов); + КонецЕсли; КонецЕсли; // Собственно импорт @@ -6236,8 +6273,8 @@ Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Дата изменения файла ""%1"" - |в рабочем каталоге более поздняя (новее), чем в хранилище файлов. - |Возможно, файл был изменен.'"), + |в рабочем каталоге на компьютере более поздняя (новее), чем в программе. + |Возможно, файл на компьютере был отредактирован.'"), Строка(ПараметрыВыполнения.ДанныеФайла.Ссылка)); ПараметрыОткрытияФормы.Вставить("Сообщение", Сообщение); @@ -6678,34 +6715,6 @@ //////////////////////////////////////////////////////////////////////////////// // Загружает отредактированный файл в программу, снимает блокировку и рассылает оповещение. -// Сохраняет отредактированный файл в ИБ и снимает с него блокировку. -// -// Параметры: -// Параметры - Структура - см. ПараметрыОбновленияФайла. -// -Процедура ЗакончитьРедактированиеСОповещением(Параметры) Экспорт - - Если Параметры.ОбъектСсылка = Неопределено Тогда - ВернутьРезультат(Параметры.ОбработчикРезультата, Неопределено); - Возврат; - КонецЕсли; - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ОбработчикРезультата", Параметры.ОбработчикРезультата); - ПараметрыВыполнения.Вставить("ПараметрКоманды", Параметры.ОбъектСсылка); - Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеСОповещениемЗавершение", ЭтотОбъект, ПараметрыВыполнения); - - ПараметрыОбработчика = ПараметрыОбновленияФайла(Обработчик, Параметры.ОбъектСсылка, Параметры.ИдентификаторФормы); - ПараметрыОбработчика.ХранитьВерсии = Параметры.ХранитьВерсии; - ПараметрыОбработчика.ФайлРедактируетТекущийПользователь = Параметры.ФайлРедактируетТекущийПользователь; - ПараметрыОбработчика.Редактирует = Параметры.Редактирует; - ПараметрыОбработчика.АвторТекущейВерсии = Параметры.АвторТекущейВерсии; - ПараметрыОбработчика.Кодировка = Параметры.Кодировка; - ПараметрыОбработчика.СоздатьНовуюВерсию = Параметры.СоздатьНовуюВерсию; - ЗакончитьРедактирование(ПараметрыОбработчика); - -КонецПроцедуры - // Продолжение процедуры (см. выше). Процедура ЗакончитьРедактированиеСОповещениемЗавершение(Результат, ПараметрыВыполнения) Экспорт @@ -6718,7 +6727,7 @@ СтандартныеПодсистемыКлиент.УстановитьПараметрКлиента("КоличествоЗанятыхФайлов", КоличествоЗанятыхФайлов - 1); КонецЕсли; - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); + ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Результат); КонецПроцедуры @@ -6734,10 +6743,6 @@ Возврат; КонецЕсли; - ПараметрыВыполнения = Новый Структура; - - ОбработчикРезультата = Новый ОписаниеОповещения("ЗакончитьРедактированиеМассиваФайловСОповещениемЗавершение", ЭтотОбъект, Параметры); - Параметры.ОбработчикРезультата = ОбработчикРезультата; Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеПоСсылкамПослеУстановкиРасширения", ЭтотОбъект, Параметры); ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); @@ -6784,7 +6789,8 @@ ПараметрыВыполнения.МассивФайлов.Количество()), БиблиотекаКартинок.Информация32); - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Истина); + ОбработчикРезультата = Новый ОписаниеОповещения("ЗакончитьРедактированиеМассиваФайловСОповещениемЗавершение", ЭтотОбъект, ПараметрыВыполнения); + ВернутьРезультат(ОбработчикРезультата, Истина); КонецПроцедуры @@ -7613,7 +7619,6 @@ ПараметрыВыполнения.Вставить("ОбработчикРезультата", Неопределено); ПараметрыВыполнения.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыВыполнения.Вставить("ФормаВладелец", ФормаВладелец); - ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); ПараметрыВыполнения.Вставить("ЭтоФайл", Истина); ДобавитьПослеВыбораРежимаСоздания(2, ПараметрыВыполнения); @@ -7656,7 +7661,7 @@ // Продолжение процедуры (см. выше). Процедура ДобавитьНаОсновеШаблона(ПараметрыВыполнения) Экспорт - // Скопировать другой файла. + // Скопировать из файла шаблона. ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ВыборШаблона", Истина); ПараметрыФормы.Вставить("ТекущаяСтрока", ПредопределенноеЗначение("Справочник.ПапкиФайлов.Шаблоны")); @@ -7675,19 +7680,14 @@ КонецЕсли; ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЗначениеКопирования", Результат); - ПараметрыФормы.Вставить("ВладелецФайла", ПараметрыВыполнения.ВладелецФайла); - ПараметрыФормы.Вставить("РежимСоздания", "ИзШаблона"); - ОбработчикРезультата = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); - ИмяСправочникаХранилищаФайлов = ?(ПараметрыВыполнения.Свойство("ИмяСправочникаХранилищаФайлов"), - ПараметрыВыполнения.ИмяСправочникаХранилищаФайлов, - РаботаСФайламиСлужебныйВызовСервера.ИмяСправочникаХраненияФайлов(ПараметрыВыполнения.ВладелецФайла)); - ПараметрыФормы.Вставить("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов); - Если ИмяСправочникаХранилищаФайлов = "Файлы" Тогда - ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикРезультата); - Иначе - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикРезультата); - КонецЕсли; + ПараметрыФормы.Вставить("РежимСоздания", "ИзШаблона"); + ПараметрыФормы.Вставить("ИмяСправочникаХранилищаФайлов", + ?(ПараметрыВыполнения.Свойство("ИмяСправочникаХранилищаФайлов"), + ПараметрыВыполнения.ИмяСправочникаХранилищаФайлов, + РаботаСФайламиСлужебныйВызовСервера.ИмяСправочникаХраненияФайлов(ПараметрыВыполнения.ВладелецФайла))); + + ОписаниеОповещенияОЗакрытии = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); + РаботаСФайламиКлиент.СкопироватьФайл(ПараметрыВыполнения.ВладелецФайла, Результат, ПараметрыФормы, ОписаниеОповещенияОЗакрытии); КонецПроцедуры @@ -7724,7 +7724,7 @@ Возврат; КонецЕсли; - // Создание карточки файла в БД. + // Создание файла в ИБ. Попытка СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); СведенияОФайле.АдресВременногоХранилищаФайла = Адрес; @@ -7742,9 +7742,9 @@ ПараметрыОповещения = Новый Структура; ПараметрыОповещения.Вставить("Владелец", ПараметрыВыполнения.ВладелецФайла); - ПараметрыОповещения.Вставить("Файл", Результат.ФайлСсылка); - ПараметрыОповещения.Вставить("Событие", "СозданФайл"); - Оповестить("Запись_Файл", ПараметрыОповещения); + ПараметрыОповещения.Вставить("Файл", Результат.ФайлСсылка); + ПараметрыОповещения.Вставить("ЭтоНовый", Истина); + Оповестить("Запись_Файл", ПараметрыОповещения, Результат.ФайлСсылка); ПоказатьОповещениеПользователя( НСтр("ru = 'Создание:'"), @@ -7753,12 +7753,9 @@ БиблиотекаКартинок.Информация32); Если ПараметрыВыполнения.НеОткрыватьКарточкуПослеСозданияИзФайла <> Истина Тогда - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ключ", Результат.ФайлСсылка); - ПараметрыФормы.Вставить("КарточкаОткрытаПослеСозданияФайла", Истина); - - ОбработчикРезультата = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); - ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикРезультата); + ПараметрыФормы = Новый Структура("КарточкаОткрытаПослеСозданияФайла", Истина); + ОписаниеОповещенияОЗакрытии = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); + РаботаСФайламиКлиент.ОткрытьФормуФайла(Результат.ФайлСсылка,, ПараметрыФормы, ОписаниеОповещенияОЗакрытии); Иначе ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Результат); КонецЕсли; @@ -7859,7 +7856,7 @@ ОбработчикПродолжения = Новый ОписаниеОповещения("ПослеДобавленияПодписей", ЭтотОбъект, ПараметрыВыполнения); МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); - МодульЭлектроннаяПодписьКлиент.Подписать(ОписаниеДанных, , ОбработчикПродолжения); + МодульЭлектроннаяПодписьКлиент.Подписать(ОписаниеДанных, ИдентификаторФормы, ОбработчикПродолжения); КонецПроцедуры @@ -8057,7 +8054,6 @@ КонецПроцедуры - // Сохраняет файл с электронной подписью. Процедура СохранитьФайлВместеСПодписью(Файл, ИдентификаторФормы) Экспорт @@ -8075,7 +8071,7 @@ ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файл'")); ОписаниеДанных.Вставить("Представление", ПараметрыВыполнения.ДанныеФайла.Ссылка); ОписаниеДанных.Вставить("ПоказатьКомментарий", Истина); - ОписаниеДанных.Вставить("Объект", ПараметрыВыполнения.ДанныеФайла.ТекущаяВерсия); + ОписаниеДанных.Вставить("Объект", ПараметрыВыполнения.ДанныеФайла.Ссылка); ОписаниеДанных.Вставить("Данные", Новый ОписаниеОповещения("ПриСохраненииДанныхФайла", ЭтотОбъект, ПараметрыВыполнения)); @@ -8090,17 +8086,34 @@ // Процедура ПриСохраненииДанныхФайла(Параметры, Контекст) Экспорт - СохранитьКак(Параметры.Оповещение, Контекст.ДанныеФайла, Контекст.ИдентификаторФормы); + ДополнительныеПараметры = Новый Структура("Оповещение", Параметры.Оповещение); + ОбработчикОповещения = Новый ОписаниеОповещения("ПриСохраненииДанныхФайлаВернутьРезультат", ЭтотОбъект, ДополнительныеПараметры); + СохранитьКак(ОбработчикОповещения, Контекст.ДанныеФайла, Контекст.ИдентификаторФормы); КонецПроцедуры +// Продолжение процедуры СохранитьФайлВместеСПодписями. +// Вызывается из подсистемы ЭлектроннаяПодпись после выбора подписей для сохранения. +// +Процедура ПриСохраненииДанныхФайлаВернутьРезультат(Результат, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Строка") Тогда + Результат = ?(ЗначениеЗаполнено(Результат), Новый Структура("ПолноеИмяФайла", Результат), Новый Структура); + КонецЕсли; + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, Результат); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Загружает структуру файлов и каталогов с диска в программу. // Возвращаемое значение: // Структура - со свойствами: // * ОбработчикРезультата - ОписаниеОповещения - обработчик, которому нужно передать результат импорта. -// * Владелец - ЛюбаяСсылка - объект-владелец, к которому добавляются импортированные файлы. +// * Владелец - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка или объект-владелец, к которому +// добавляются импортированные файлы. +// * ГруппаФайлов - ОпределяемыйТип.ПрисоединенныйФайл - группа файлов, в которую добавляются +// импортированные файлы. // * ВыбранныеФайлы - СписокЗначений - импортируемые объекты Файл. // * Индикатор - Число - число от 0 до 100 - прогресс выполнения. // * Комментарий - Строка - Комментарий. @@ -8117,6 +8130,7 @@ ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ОбработчикРезультата"); ПараметрыВыполнения.Вставить("Владелец"); + ПараметрыВыполнения.Вставить("ГруппаФайлов"); ПараметрыВыполнения.Вставить("ВыбранныеФайлы"); ПараметрыВыполнения.Вставить("Комментарий"); ПараметрыВыполнения.Вставить("ХранитьВерсии"); @@ -8126,8 +8140,6 @@ ПараметрыВыполнения.Вставить("ПсевдоФайловаяСистема", Новый Соответствие); ПараметрыВыполнения.Вставить("Кодировка"); ПараметрыВыполнения.Вставить("ДобавленныеФайлы", Новый Массив); - ПараметрыВыполнения.Вставить("ГруппаФайлов"); - ПараметрыВыполнения.Вставить("ИмяСправочникаХранилищаФайлов", Неопределено); Возврат ПараметрыВыполнения; КонецФункции @@ -8279,7 +8291,7 @@ КонецЕсли; Если Не ПапкаУжеНайдена Тогда - ПапкаФайловСсылка = РаботаСФайламиСлужебныйВызовСервера.СправочникиПапкиСоздатьЭлемент(ИмяФайла, Владелец); + ПапкаФайловСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьПапкуФайлов(ИмяФайла, Владелец); КонецЕсли; // Параметр ЗадаватьВопросПапкаУжеСуществует нужен, чтобы не задавать вопрос на 1 уровне рекурсии, @@ -8369,7 +8381,7 @@ Процедура ИмпортироватьФайл(Знач ВыбранныйФайл, Знач Владелец, Знач ПараметрыВыполнения, Знач АдресВременногоХранилищаФайла, Знач АдресВременногоХранилищаТекста) - Если ТипЗнч(Владелец) = Тип("СправочникСсылка.ПапкиФайлов") Тогда + Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(Владелец) Тогда СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", ВыбранныйФайл); СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; @@ -8379,7 +8391,7 @@ ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(Владелец, СведенияОФайле); Иначе ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", ПараметрыВыполнения.Владелец); + ПараметрыФайла.Вставить("ВладелецФайлов", Владелец); ПараметрыФайла.Вставить("Автор", Неопределено); ПараметрыФайла.Вставить("ИмяБезРасширения", ВыбранныйФайл.ИмяБезРасширения); ПараметрыФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ВыбранныйФайл.Расширение)); @@ -8488,68 +8500,70 @@ // ИмяОткрываемогоФайла - Строка - полное имя файла. Процедура ОткрытьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла, ОбработчикРезультата = Неопределено) - РасширениеПодключено = РасширениеРаботыСФайламиПодключено(); - Если РасширениеПодключено Тогда - - ПерсональныеНастройкиРаботыСФайлами = - РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); - - ТекстовыеФайлыСпособОткрытия = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыСпособОткрытия; - Если ТекстовыеФайлыСпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда - - ТекстовыеФайлыРасширение = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыРасширение; - Если РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке(ТекстовыеФайлыРасширение, ДанныеФайла.Расширение) Тогда - - ПараметрыФормы = Новый Структура("Файл, ДанныеФайла, ИмяОткрываемогоФайла", - ДанныеФайла.Ссылка, ДанныеФайла, ИмяОткрываемогоФайла); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.РедактированиеТекстовогоФайла", - ПараметрыФормы, , ДанныеФайла.Ссылка); - Возврат; - - КонецЕсли; - - КонецЕсли; - - Если НРег(ДанныеФайла.Расширение) = НРег("grs") Тогда - - Схема = Новый ГрафическаяСхема; - Схема.Прочитать(ИмяОткрываемогоФайла); - - ЗаголовокСтрока = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( - ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); - - Схема.Показать(ЗаголовокСтрока, ИмяОткрываемогоФайла); - Возврат; - - КонецЕсли; - - Если НРег(ДанныеФайла.Расширение) = НРег("mxl") Тогда - - ПомещаемыеФайлы = Новый Массив; - ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяОткрываемогоФайла)); - ПомещенныеФайлы = Новый Массив; - Если Не ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда - Возврат; - КонецЕсли; - ТабличныйДокумент = ПомещенныеФайлы[0].Хранение; - - ЗаголовокСтрока = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( - ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ИмяДокумента", ЗаголовокСтрока); - ПараметрыОткрытия.Вставить("ПутьКФайлу", ИмяОткрываемогоФайла); - ПараметрыОткрытия.Вставить("ТабличныйДокумент", ТабличныйДокумент); - - ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия); - - Возврат; - - КонецЕсли; - - // Открыть Файл - ЗапуститьПриложение(ИмяОткрываемогоФайла); + Если Не РасширениеРаботыСФайламиПодключено() Тогда + Возврат; КонецЕсли; + + ПерсональныеНастройкиРаботыСФайлами = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + + ТекстовыеФайлыСпособОткрытия = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыСпособОткрытия; + Если ТекстовыеФайлыСпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда + + ТекстовыеФайлыРасширение = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыРасширение; + Если РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке(ТекстовыеФайлыРасширение, ДанныеФайла.Расширение) Тогда + + ПараметрыФормы = Новый Структура("Файл, ДанныеФайла, ИмяОткрываемогоФайла", + ДанныеФайла.Ссылка, ДанныеФайла, ИмяОткрываемогоФайла); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.РедактированиеТекстовогоФайла", + ПараметрыФормы, , ДанныеФайла.Ссылка); + Возврат; + + КонецЕсли; + + КонецЕсли; + + Если НРег(ДанныеФайла.Расширение) = НРег("grs") Тогда + + Схема = Новый ГрафическаяСхема; + Схема.Прочитать(ИмяОткрываемогоФайла); + + ЗаголовокФормы = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( + ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + + Схема.Показать(ЗаголовокФормы, ИмяОткрываемогоФайла); + Возврат; + + КонецЕсли; + + Если НРег(ДанныеФайла.Расширение) = НРег("mxl") Тогда + + ПомещаемыеФайлы = Новый Массив; + ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяОткрываемогоФайла)); + ПомещенныеФайлы = Новый Массив; + Если Не ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда + Возврат; + КонецЕсли; + ТабличныйДокумент = ПомещенныеФайлы[0].Хранение; + + ЗаголовокФормы = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( + ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ИмяДокумента", ЗаголовокФормы); + ПараметрыОткрытия.Вставить("ПутьКФайлу", ИмяОткрываемогоФайла); + ПараметрыОткрытия.Вставить("ТабличныйДокумент", ТабличныйДокумент); + Если Не ДанныеФайла.НаЧтение Тогда + ПараметрыОткрытия.Вставить("ПрисоединенныйФайл", ДанныеФайла.Ссылка); + КонецЕсли; + + ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия); + + Возврат; + + КонецЕсли; + + // Открыть Файл + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ИмяОткрываемогоФайла); КонецПроцедуры @@ -8566,7 +8580,7 @@ СозданФайл = РаботаСФайламиСлужебныйВызовСервера.СкопироватьФайлВПриложенных( ФайлСсылка, ВладелецФайла); - Оповестить("Запись_Файл", Новый Структура("Владелец, Файл, Событие", ВладелецФайла, СозданФайл, "СозданФайл")); + Оповестить("Запись_Файл", Новый Структура("Владелец, Файл, ЭтоНовый", ВладелецФайла, СозданФайл, Истина), СозданФайл); ПоказатьОповещениеПользователя( "Создание:", @@ -9018,25 +9032,6 @@ КонецФункции -// Функция предназначена для открытия файла соответствующим приложением. -// -// Параметры: -// ИмяОткрываемогоФайла - Строка - полное имя файла. -Процедура ВыполнитьЗапускПриложения(ИмяОткрываемогоФайла) Экспорт - - РасширениеПодключено = РасширениеРаботыСФайламиПодключено(); - Если РасширениеПодключено Тогда - // Открыть Файл - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - ИмяОткрываемогоФайла = СтрЗаменить(ИмяОткрываемогоФайла, "/", "\"); - КонецЕсли; - - ЗапуститьПриложение(ИмяОткрываемогоФайла); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Сравнение версий и файлов. // Сравнивает 2 файла (txt doc doc odt mxl) с помощью MS Office, OpenOffice, программно для табличных документов. @@ -9249,12 +9244,12 @@ frame = Desktop.getCurrentFrame(); - // установить показ изменений + // Установить показ изменений. ПараметрыСравнения = Новый COMSafeArray("VT_VARIANT", 1); ПараметрыСравнения.SetValue(0, ПрисвоитьЗначениеСвойству(ServiceManager, "ShowTrackedChanges", Истина)); dispatcher.executeDispatch(frame, ".uno:ShowTrackedChanges", "", 0, ПараметрыСравнения); - // сравнить с документом + // Сравнить с документом. ПараметрыВызова = Новый COMSafeArray("VT_VARIANT", 1); ПараметрыВызова.SetValue(0, ПрисвоитьЗначениеСвойству(ServiceManager, "URL", ПреобразоватьВURL(ПутьКФайлу1))); dispatcher.executeDispatch(frame, ".uno:CompareDocuments", "", 0, ПараметрыВызова); @@ -9878,7 +9873,9 @@ // Инициализация компоненты сканирования. Функция ПроинициализироватьКомпоненту() Экспорт - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + СистемнаяИнформация = Новый СистемнаяИнформация; + Если СистемнаяИнформация.ТипПлатформы <> ТипПлатформы.Windows_x86 + Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда Возврат Ложь; КонецЕсли; @@ -9912,11 +9909,6 @@ // Процедура УстановитьКомпоненту(ОбработчикРезультата) Экспорт - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - ВернутьРезультат(ОбработчикРезультата, Ложь); - Возврат; - КонецЕсли; - Если ПроинициализироватьКомпоненту() Тогда ВернутьРезультат(ОбработчикРезультата, Истина); Возврат; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl index f28ad165f..98375abaf 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl @@ -89,4 +89,10 @@ КонецФункции +Функция ЭтоСправочникФайлы(ВладелецФайлов) Экспорт + + Возврат РаботаСФайламиСлужебныйВызовСервера.ЭтоСправочникФайлы(ВладелецФайлов); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl index 030083b3e..6866d5a92 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl @@ -140,32 +140,49 @@ #Если Не ВебКлиент Тогда // ТекущаяДата() используется только для генерации случайного числа, // поэтому приведение к ТекущаяДатаСеанса не требуется. - ГенераторСлучая = Новый ГенераторСлучайныхЧисел(Секунда(ТекущаяДата())); + ЧислоСекундТекущейДаты = ТекущаяДата() - '00010101'; + ГенераторСлучая = Новый ГенераторСлучайныхЧисел(ЧислоСекундТекущейДаты); #КонецЕсли - + + КоличествоСлучайныхВариантов = 26; Пока НЕ Успешно И ЦиклНомер < 100 Цикл НомерКаталога = 0; #Если Не ВебКлиент Тогда - НомерКаталога = ГенераторСлучая.СлучайноеЧисло(0, 25); + НомерКаталога = ГенераторСлучая.СлучайноеЧисло(0, КоличествоСлучайныхВариантов - 1); #Иначе // ТекущаяДата() используется только для генерации случайного числа, // поэтому приведение к ТекущаяДатаСеанса не требуется. - НомерКаталога = Секунда(ТекущаяДата()) % 26; + ЧислоСекундТекущейДаты = ТекущаяДата() - '00010101'; + НомерКаталога = ЧислоСекундТекущейДаты % КоличествоСлучайныхВариантов; #КонецЕсли + + Если Счетчик > 1 И КоличествоСлучайныхВариантов < 26 * 26 * 26 * 26 * 26 Тогда + КоличествоСлучайныхВариантов = КоличествоСлучайныхВариантов * 26; + КонецЕсли; - КодБукваA = КодСимвола("A", 1); - КодКаталога = КодБукваA + НомерКаталога; + БуквыКаталога = ""; + КодБукваA = КодСимвола("A", 1); - БукваКаталога = Символ(КодКаталога); + Пока Истина Цикл + НомерБуквы = НомерКаталога % 26; + НомерКаталога = Цел(НомерКаталога / 26); + + КодКаталога = КодБукваA + НомерБуквы; + + БуквыКаталога = БуквыКаталога + Символ(КодКаталога); + Если НомерКаталога = 0 Тогда + Прервать; + КонецЕсли; + КонецЦикла; ПодКаталог = ""; // Частичный путь. // По умолчанию вначале используется корень, если возможности нет, - // то добавляется A, B, ... Z, A1, B1, .. Z1, .. A2, B2 и т.д. + // то добавляется A, B, ... Z, .. ZZZZZ, .. AAAAA1, .. AAAAA2 и т.д. Если Счетчик = 0 Тогда ПодКаталог = ""; Иначе - ПодКаталог = БукваКаталога; + ПодКаталог = БуквыКаталога; ЦиклНомер = Окр(Счетчик / 26); Если ЦиклНомер <> 0 Тогда @@ -395,21 +412,23 @@ Если ПоискВТоме Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка открытия файла: - |""%1"". - |%2 - |Файл не найден в хранилище файлов. - |Возможно файл удален антивирусной программой. - |Обратитесь к администратору.'"), + НСтр("ru = 'Не удалось открыть файл: + |%1 + |который присоединен к: + |%2 + |по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный или удален антивирусной программой. + |Обратитесь к администратору.'"), ИмяФайла, ВладелецФайла); + Иначе ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка открытия файла: - |""%1"". - |%2 - |Файл не найден в хранилище файлов. - |Обратитесь к администратору.'"), + НСтр("ru = 'Не удалось открыть файл: + |%1 + |который присоединен к: + |%2 + |по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный. + |Обратитесь к администратору.'"), ИмяФайла, ВладелецФайла); КонецЕсли; @@ -593,21 +612,15 @@ КонецФункции // Только для внутреннего использования. -Процедура ЗаполнитьСтатусПодписи(СтрокаПодписи, ТекстОшибки = "") Экспорт +Процедура ЗаполнитьСтатусПодписи(СтрокаПодписи) Экспорт Если Не ЗначениеЗаполнено(СтрокаПодписи.ДатаПроверкиПодписи) Тогда СтрокаПодписи.Статус = ""; Возврат; КонецЕсли; - ДатаПроверки = Формат(СтрокаПодписи.ДатаПроверкиПодписи, "ДЛФ=DT"); - Если СтрокаПодписи.ПодписьВерна Тогда СтрокаПодписи.Статус = НСтр("ru = 'Верна'"); - - ИначеЕсли ЗначениеЗаполнено(ТекстОшибки) Тогда - СтрокаПодписи.Статус = НСтр("ru = 'Неверна'"); - СтрокаПодписи.ОписаниеОшибки = ТекстОшибки; Иначе СтрокаПодписи.Статус = НСтр("ru = 'Неверна'"); КонецЕсли; @@ -719,6 +732,8 @@ ЧтениеXML.Закрыть(); Исключение // Не считаем ошибкой, т.к. например расширение OTF может быть как OpenDocument, так и шрифт OpenType. + Архив = Неопределено; + ЧтениеXML = Неопределено; Отказ = Истина; ИзвлеченныйТекст = ""; КонецПопытки; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl index 9e403337e..73e0ed107 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl @@ -242,16 +242,24 @@ Если ПустаяСтрока(СписокРасширенийТекстовыхФайлов) Тогда СписокРасширенийТекстовыхФайлов = "TXT"; - - Если НЕ ОбщегоНазначения.РазделениеВключено() - ИЛИ НЕ ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Константы.СписокРасширенийТекстовыхФайлов.Установить(СписокРасширенийТекстовыхФайлов); - КонецЕсли; - КонецЕсли; Возврат СписокРасширенийТекстовыхФайлов; КонецФункции +// Возвращает признак принадлежности узла к плану обмена РИБ. +// +// Параметры: +// ПолноеИмяПланаОбмена - Строка - плана обмена, для которого требуется получить значение функции. +// +// Возвращаемое значение: +// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. +// +Функция ЭтоУзелРаспределеннойИнформационнойБазы(ПолноеИмяПланаОбмена) Экспорт + + Возврат Метаданные.НайтиПоПолномуИмени(ПолноеИмяПланаОбмена).РаспределеннаяИнформационнаяБаза; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 5af245d49..53feaa1cf 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -366,9 +366,7 @@ Если СтрокаОтчет.Настройки = Неопределено Тогда ТекстЖурнала = ТекстЖурнала + Символы.ПС + НСтр("ru = '(пользовательские настройки не заданы)'"); КонецЕсли; - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, - ТекстЖурнала, , - "'"+ Строка(СтрокаОтчет.Отчет) +"'"); + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, ТекстЖурнала, , "'" + Строка(СтрокаОтчет.Отчет) + "'"); // Инициализация отчета. ПараметрыОтчета = Новый Структура("Отчет, Настройки, Форматы, ОтправлятьЕслиПустой"); @@ -377,6 +375,14 @@ Продолжить; КонецЕсли; + Если ПараметрыДоставки.Персонализирована И НЕ ПараметрыОтчета.Персонализирован Тогда + ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет ""%1"" не может сформирован, так как в его настройках не указан отбор по получателю рассылки.'"), + Строка(СтрокаОтчет.Отчет)); + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ПараметрыОтчета.Ошибки); + Продолжить; + КонецЕсли; + // Формирование табличных документов и сохранение в форматы. Попытка Если ПараметрыОтчета.Персонализирован Тогда @@ -399,21 +405,20 @@ Неопределено); КонецЕсли; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, - НСтр("ru = 'Отчет %1 успешно сформирован'"), , - "'"+ Строка(СтрокаОтчет.Отчет) +"'"); + НСтр("ru = 'Отчет %1 успешно сформирован'"), , "'"+ Строка(СтрокаОтчет.Отчет) +"'"); НомерОтчета = НомерОтчета + 1; Исключение ЗаписьЖурнала(ПараметрыЖурнала, , - НСтр("ru = 'Отчет %1 не сформирован:'"), ИнформацияОбОшибке(), - "'"+ Строка(СтрокаОтчет.Отчет) +"'"); + НСтр("ru = 'Отчет %1 не сформирован:'"), ИнформацияОбОшибке(), "'"+ Строка(СтрокаОтчет.Отчет) +"'"); КонецПопытки; КонецЦикла; // Проверка на количество сохраненных отчетов. Если ДеревоОтчетов.Строки.Найти(3, "Уровень", Истина) = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, - НСтр("ru = 'Не сохранено ни одного отчета'"), ,); + НСтр("ru = 'Рассылка отчетов не выполнена, так как отчеты пустые или не сформированы из-за ошибок.'"), ,); СтандартныеПодсистемыСервер.ОчиститьКаталогВременныхФайлов(ПараметрыДоставки.КаталогВременныхФайлов); + РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьРезультатВыполненияРассылки(Рассылка, ПараметрыДоставки); Возврат Ложь; КонецЕсли; @@ -741,22 +746,31 @@ КонецЕсли; // Добавление команд и кнопок + Команды = Новый Массив; + КомандаСоздать = Форма.Команды.Добавить("РассылкаОтчетовСоздатьНовую"); КомандаСоздать.Действие = "РассылкаОтчетовКлиент.СоздатьНовуюРассылкуИзОтчета"; КомандаСоздать.Картинка = БиблиотекаКартинок.РассылкаОтчетов; КомандаСоздать.Заголовок = НСтр("ru = 'Создать рассылку отчетов...'"); КомандаСоздать.Подсказка = НСтр("ru = 'Создать новую рассылку отчетов и добавить в нее отчет с текущими настройками.'"); + Команды.Добавить(КомандаСоздать); КомандаПрисоединить = Форма.Команды.Добавить("РассылкаОтчетовПрисоединитьКСуществующей"); КомандаПрисоединить.Действие = "РассылкаОтчетовКлиент.ПрисоединитьОтчетКСуществующейРассылке"; - КомандаПрисоединить.Картинка = БиблиотекаКартинок.РассылкаОтчетов; КомандаПрисоединить.Заголовок = НСтр("ru = 'Включить в существующую рассылку отчетов...'"); КомандаПрисоединить.Подсказка = НСтр("ru = 'Присоединить отчет с текущими настройками к существующей рассылке отчетов.'"); - - Команды = Новый Массив; - Команды.Добавить(КомандаСоздать); Команды.Добавить(КомандаПрисоединить); + КоличествоРассылокСОтчетом = КоличествоРассылокСОтчетом(Форма.НастройкиОтчета.ВариантСсылка); + Если КоличествоРассылокСОтчетом > 0 Тогда + КомандаРассылки = Форма.Команды.Добавить("РассылкаОтчетовОткрытьРассылкиСОтчетом"); + КомандаРассылки.Действие = "РассылкаОтчетовКлиент.ОткрытьРассылкиСОтчетом"; + КомандаРассылки.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Рассылки отчета (%1)'"), + КоличествоРассылокСОтчетом); + КомандаРассылки.Подсказка = НСтр("ru = 'Открыть список рассылок, в которые включен отчет.'"); + Команды.Добавить(КомандаРассылки); + КонецЕсли; + ОтчетыСервер.ВывестиКоманду(Форма, Команды, "ПодменюОтправить", Ложь, Ложь, "РассылкаОтчетов"); КонецПроцедуры @@ -897,16 +911,16 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КОЛИЧЕСТВО(РассылкиОтчетов.Ссылка) КАК Количество - |ИЗ - | РегистрСведений.СостоянияРассылокОтчетов КАК СостоянияРассылокОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.РассылкиОтчетов КАК РассылкиОтчетов - | ПО СостоянияРассылокОтчетов.Рассылка = РассылкиОтчетов.Ссылка - |ГДЕ - | РассылкиОтчетов.Подготовлена = ИСТИНА - | И СостоянияРассылокОтчетов.СОшибками = ИСТИНА - | И РассылкиОтчетов.Автор = &Автор"; + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(РассылкиОтчетов.Ссылка) КАК Количество + |ИЗ + | РегистрСведений.СостоянияРассылокОтчетов КАК СостоянияРассылокОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.РассылкиОтчетов КАК РассылкиОтчетов + | ПО СостоянияРассылокОтчетов.Рассылка = РассылкиОтчетов.Ссылка + |ГДЕ + | РассылкиОтчетов.Подготовлена = ИСТИНА + | И СостоянияРассылокОтчетов.СОшибками = ИСТИНА + | И РассылкиОтчетов.Автор = &Автор"; Отборы = Новый Структура; Отборы.Вставить("ПометкаУдаления", Ложь); Отборы.Вставить("Подготовлена", Истина); @@ -1031,11 +1045,13 @@ // Рассылка - СправочникСсылка.РассылкиОтчетов - Выполняемая рассылка отчетов. // Процедура ВыполнитьРассылкуПоРасписанию(Рассылка) Экспорт - // Регистрация запуска (запущена, но не выполнена). - РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьЗапускРассылки(Рассылка); // Проверки. ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.РассылкаОтчетов); + + // Регистрация запуска (запущена, но не выполнена). + РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьЗапускРассылки(Рассылка); + Если Не ПравоДоступа("Чтение", Метаданные.Справочники.РассылкиОтчетов) Тогда ВызватьИсключение НСтр("ru = 'У текущего пользователя недостаточно прав для чтения рассылок отчетов. @@ -1678,7 +1694,7 @@ // Возвращаемое значение: // Строка - Имя пользователя программы. // -Функция ПолучитьИмяПользователяИБ(Пользователь) Экспорт +Функция ИмяПользователяИБ(Пользователь) Экспорт Если Не ЗначениеЗаполнено(Пользователь) Тогда Возврат Неопределено; КонецЕсли; @@ -1826,6 +1842,41 @@ Возврат Разрешения; КонецФункции +Функция ПараметрыЖурналаРегистрации(Рассылка) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Состояния.ПоследнийЗапускНачало, + | Состояния.ПоследнийЗапускЗавершение, + | Состояния.НомерСеанса + |ИЗ + | РегистрСведений.СостоянияРассылокОтчетов КАК Состояния + |ГДЕ + | Состояния.Рассылка = &Рассылка"; + Запрос.УстановитьПараметр("Рассылка", Рассылка); + + УстановитьПривилегированныйРежим(Истина); + Выборка = Запрос.Выполнить().Выбрать(); + Если Не Выборка.Следующий() Тогда + Возврат Неопределено; + КонецЕсли; + Результат = Новый Структура; + Результат.Вставить("ДатаНачала", Выборка.ПоследнийЗапускНачало); + Результат.Вставить("ДатаОкончания", Выборка.ПоследнийЗапускЗавершение); + // Ограничение интервала не более 30 минут, т.к. номера сеансов могут переиспользоваться. + Если Не ЗначениеЗаполнено(Результат.ДатаОкончания) Или Результат.ДатаОкончания < Результат.ДатаНачала Тогда + Результат.ДатаОкончания = Результат.ДатаНачала + 30 * 60; + КонецЕсли; + Если Не ЗначениеЗаполнено(Выборка.НомерСеанса) Тогда + Результат.Вставить("Данные", Рассылка); + Иначе + Сеансы = Новый СписокЗначений; + Сеансы.Добавить(Выборка.НомерСеанса); + Результат.Вставить("Сеанс", Сеансы); + КонецЕсли; + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции. @@ -1946,7 +1997,7 @@ СтрокаФайл.Значение = ВременныйФайл.ПолноеИмя; СтрокаФайл.Настройки = Новый Структура("ФайлСКаталогом, ИмяФайла, ПолноеИмяФайла, ИмяКаталога, ПолноеИмяКаталога, - |Формат, Имя, Расширение, ТипФайла, Ссылка"); + |Формат, Имя, Расширение, ТипФайла, Ссылка"); СтрокаФайл.Настройки.Формат = Формат; ЗаполнитьЗначенияСвойств(СтрокаФайл.Настройки, ПараметрыФормата, "Имя, Расширение, ТипФайла"); @@ -2126,6 +2177,7 @@ НСтр("ru = 'Персонализированная рассылка может быть отправлена только по электронной почте'")); Возврат Ложь; КонецЕсли; + ПараметрыДоставки.ИспользоватьПапку = Ложь; ПараметрыДоставки.ИспользоватьСетевойКаталог = Ложь; ПараметрыДоставки.ИспользоватьFTPРесурс = Ложь; @@ -2238,7 +2290,7 @@ ПараметрыДоставки.Вставить("ПредставлениеОтчетовПолучателя", ""); КонецЕсли; - // Каталог временных файлов (RP = report publishing). + // Каталог временных файлов. ПараметрыДоставки.Вставить("КаталогВременныхФайлов", СтандартныеПодсистемыСервер.СоздатьКаталогВременныхФайлов("RP")); // Соответствие каталогов временных файлов получателей. @@ -2789,4 +2841,24 @@ КонецФункции +Функция КоличествоРассылокСОтчетом(ВариантОтчета) + + Если Не ЗначениеЗаполнено(ВариантОтчета) Или ТипЗнч(ВариантОтчета) <> Тип("СправочникСсылка.ВариантыОтчетов") + Или ВариантОтчета.Пустая() Тогда + Возврат 0; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Отчеты.Ссылка) КАК Количество + |ИЗ + | Справочник.РассылкиОтчетов.Отчеты КАК Отчеты + |ГДЕ + | Отчеты.Отчет = &ВариантОтчета"); + + Запрос.УстановитьПараметр("ВариантОтчета", ВариантОтчета); + Возврат Запрос.Выполнить().Выгрузить()[0].Количество; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl index f87cbe7b7..8b35a7bcc 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -31,6 +31,23 @@ ОткрытьФорму("Справочник.РассылкиОтчетов.ФормаВыбора", ПараметрыФормы, Форма); КонецПроцедуры +// Обработчик команды формы отчета. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// Команда - КомандаФормы - Команда, которая была вызвана. +// +// Места использования: +// ОбщаяФорма.ФормаОтчета.Подключаемый_Команда(). +// +Процедура ОткрытьРассылкиСОтчетом(Форма, Команда) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Отчет", Форма.НастройкиОтчета.ВариантСсылка); + ОткрытьФорму("Справочник.РассылкиОтчетов.ФормаСписка", ПараметрыФормы, Форма); + +КонецПроцедуры + // Обработчик выбора формы отчета. // // Параметры: diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index 01b1318cd..8395020ec 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -695,7 +695,8 @@ // Процедуры и функции без поддержки модели сервиса. // Возвращает использование регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Не предназначена для использования в модели сервиса. // // Параметры: // Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска @@ -718,7 +719,8 @@ КонецФункции // Возвращает расписание регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Не предназначена для использования в модели сервиса. // // Параметры: // Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска @@ -748,7 +750,8 @@ КонецФункции // Устанавливает использование регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Не предназначена для использования в модели сервиса. // // Параметры: // Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска @@ -773,7 +776,8 @@ КонецПроцедуры // Устанавливает расписание регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Не предназначена для использования в модели сервиса. // // Параметры: // Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска @@ -803,6 +807,7 @@ КонецПроцедуры // Возвращает РегламентноеЗадание из информационной базы. +// Не предназначена для использования в модели сервиса. // // Параметры: // Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index e8cdcd19a..b7a367431 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -187,7 +187,7 @@ Зависимости.Колонки.Добавить("РаботаетСВнешнимиРесурсами", Новый ОписаниеТипов("Булево")); Зависимости.Колонки.Добавить("Параметризуется", Новый ОписаниеТипов("Булево")); - ИнтеграцияСтандартныхПодсистем.ПриОпределенииНастроекРегламентныхЗаданий(Зависимости); + ИнтеграцияПодсистемБСП.ПриОпределенииНастроекРегламентныхЗаданий(Зависимости); РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий(Зависимости); Зависимости.Сортировать("РегламентноеЗадание"); @@ -356,6 +356,131 @@ КонецПроцедуры +// Определяет установлена ли блокировка работы с внешними ресурсами. +// +Функция УстановленаБлокировкаРаботыСВнешнимиРесурсами(ЭтоВызовПередНачаломРаботыСистемы = Ложь, ПоказатьФорму = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Ложь; + КонецЕсли; + + СохраненныеПараметры = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); + + Если СохраненныеПараметры = Неопределено Тогда + Если Не ЭтоВызовПередНачаломРаботыСистемы Тогда + Возврат Ложь; + КонецЕсли; + + ПродолжатьВыполнение = Истина; + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыБлокировкиРаботыСВнешнимиРесурсами"); + Блокировка.Заблокировать(); + + СохраненныеПараметры = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); + Если СохраненныеПараметры = Неопределено Тогда + ИнициализироватьПараметрыБлокировкиРаботыСВнешнимиРесурсами(); + ПродолжатьВыполнение = Ложь; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Не ПродолжатьВыполнение Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + ПараметрыБлокировки = ПараметрыБлокировкиРаботыСВнешнимиРесурсами(); + ЗаполнитьЗначенияСвойств(ПараметрыБлокировки, СохраненныеПараметры); + + Если ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Неопределено Тогда + Возврат Истина; // Если признак уже был взведен ранее в регламентном задании. + ИначеЕсли ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Истина Тогда + Возврат Не ПоказатьФорму; // Блокировка работы с внешними ресурсами подтверждена администратором. + КонецЕсли; + + РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); + // При работе в модели сервиса факт переноса базы определяется менеджером сервиса. + Если РазделениеВключено Тогда + Возврат Ложь; + КонецЕсли; + + Если РазделениеВключено <> ПараметрыБлокировки.РазделениеВключено Тогда + // Разделение не включено. + ТекстСообщения = НСтр("ru = 'Информационная база была перемещена из приложения в Интернете.'"); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); + ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединения); + + Если ЭтоФайловаяБаза <> ПараметрыБлокировки.ЭтоФайловаяБаза Тогда + ТекстСообщения = ?(ЭтоФайловаяБаза, НСтр("ru = 'Информационная база была перемещена из клиент-серверного режима работы в файловый.'"), + НСтр("ru = 'Информационная база была перемещена из файловый режима работы в клиент-серверный.'")); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + + // Если строка соединения совпадает, то дальнейшую проверку не выполняем. + Если СтрокаСоединения = ПараметрыБлокировки.СтрокаСоединения Тогда + Возврат Ложь; + КонецЕсли; + + Если ЭтоФайловаяБаза Тогда + // Для файловой базы строка соединения может быть разной при подключении с различных + // компьютеров, поэтому проверку перемещения базы осуществляем через файл. + ИмяФайлаПроверки = "DoNotCopy.txt"; + НайденныеФайлы = НайтиФайлы(ОбщегоНазначенияКлиентСервер.КаталогФайловойИнформационнойБазы(), ИмяФайлаПроверки); + Если НайденныеФайлы.Количество() = 0 Тогда + // В каталоге базы отсутствует файл проверки. + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В каталоге информационной базы отсутствует файл проверки %1.'"), ИмяФайлаПроверки); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + ЧтениеТекста = Новый ЧтениеТекста(НайденныеФайлы[0].ПолноеИмя); + ИдентификаторБазы = ЧтениеТекста.ПрочитатьСтроку(); + // Файл присутствует, но идентификатор внутри не соответствует ожидаемому. + Если ИдентификаторБазы <> ПараметрыБлокировки.ИдентификаторБазы Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатор информационной базы в файле проверки %1 не соответствует идентификатору в текущей базе.'"), ИмяФайлаПроверки); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + Иначе // Клиент-серверная база + ИмяБазы = НРег(СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединения).Ref); + ИмяКомпьютера = НРег(ИмяКомпьютера()); + ИмяСервера = НРег(СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединения).Srvr); + СохраненноеИмяБазы = НРег(СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(ПараметрыБлокировки.СтрокаСоединения).Ref); + СохраненноеИмяКомпьютера = НРег(ПараметрыБлокировки.ИмяКомпьютера); + СохраненноеИмяСервера = НРег(СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(ПараметрыБлокировки.СтрокаСоединения).Srvr); + + Если ИмяБазы <> СохраненноеИмяБазы + Или (ПараметрыБлокировки.ПроверятьИмяСервера + И (ИмяКомпьютера <> СохраненноеИмяКомпьютера + И ИмяСервера <> СохраненноеИмяСервера)) Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Различаются имя информационной базы или имя компьютера. + |Сохраненное имя базы: %1, текущее имя базы: %2. + |Сохраненное имя компьютера: %3, текущее имя компьютера: %4'"), + СохраненноеИмяБазы, ИмяБазы, СохраненноеИмяКомпьютера, ИмяКомпьютера); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -387,14 +512,11 @@ КонецПроцедуры -// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки. -Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт - - Если Не ОбщегоНазначения.РазделениеВключено() Тогда - // При переходе коробка-сервис константу не выгружаем. - Типы.Добавить(Метаданные.Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами); +// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПослеЗагрузкиДанных. +Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт + Если ОбщегоНазначения.РазделениеВключено() Тогда + ИнициализироватьПараметрыБлокировкиРаботыСВнешнимиРесурсами(); КонецЕсли; - КонецПроцедуры // См. РаботаВМоделиСервисаПереопределяемый.ПриЗаполненииТаблицыПараметровИБ. @@ -1305,7 +1427,12 @@ |информационная база работать с внешними ресурсами.'"), ИдентификаторБазы, Метаданные.Синоним); ИмяФайла = ОбщегоНазначенияКлиентСервер.КаталогФайловойИнформационнойБазы() + "\DoNotCopy.txt"; ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла); - ЗаписьТекста.Записать(СодержимоеФайла); + Попытка + ЗаписьТекста.Записать(СодержимоеФайла); + Исключение + ЗаписьТекста.Закрыть(); + ВызватьИсключение; + КонецПопытки; ЗаписьТекста.Закрыть(); КонецЕсли; @@ -1326,109 +1453,6 @@ КонецПроцедуры -// Определяет установлена ли блокировка работы с внешними ресурсами. -// -Функция УстановленаБлокировкаРаботыСВнешнимиРесурсами(ЭтоВызовПередНачаломРаботыСистемы = Ложь, ПоказатьФорму = Ложь) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат Ложь; - КонецЕсли; - - СохраненныеПараметры = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); - - Если СохраненныеПараметры = Неопределено Тогда - Если ЭтоВызовПередНачаломРаботыСистемы Тогда - ИнициализироватьПараметрыБлокировкиРаботыСВнешнимиРесурсами(); - КонецЕсли; - Возврат Ложь; - КонецЕсли; - - ПараметрыБлокировки = ПараметрыБлокировкиРаботыСВнешнимиРесурсами(); - ЗаполнитьЗначенияСвойств(ПараметрыБлокировки, СохраненныеПараметры); - - Если ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Неопределено Тогда - Возврат Истина; // Если признак уже был взведен ранее в регламентном задании. - ИначеЕсли ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Истина Тогда - Возврат Не ПоказатьФорму; // Блокировка работы с внешними ресурсами подтверждена администратором. - КонецЕсли; - - РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); - // При работе в модели сервиса факт переноса базы определяется менеджером сервиса. - Если РазделениеВключено Тогда - Возврат Ложь; - КонецЕсли; - - Если РазделениеВключено <> ПараметрыБлокировки.РазделениеВключено Тогда - // Разделение не включено. - ТекстСообщения = НСтр("ru = 'Информационная база была перемещена из приложения в Интернете.'"); - УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); - Возврат Истина; - КонецЕсли; - - СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); - ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединения); - - Если ЭтоФайловаяБаза <> ПараметрыБлокировки.ЭтоФайловаяБаза Тогда - ТекстСообщения = ?(ЭтоФайловаяБаза, НСтр("ru = 'Информационная база была перемещена из клиент-серверного режима работы в файловый.'"), - НСтр("ru = 'Информационная база была перемещена из файловый режима работы в клиент-серверный.'")); - УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); - Возврат Истина; - КонецЕсли; - - // Если строка соединения совпадает, то дальнейшую проверку не выполняем. - Если СтрокаСоединения = ПараметрыБлокировки.СтрокаСоединения Тогда - Возврат Ложь; - КонецЕсли; - - Если ЭтоФайловаяБаза Тогда - // Для файловой базы строка соединения может быть разной при подключении с различных - // компьютеров, поэтому проверку перемещения базы осуществляем через файл. - ИмяФайлаПроверки = "DoNotCopy.txt"; - НайденныеФайлы = НайтиФайлы(ОбщегоНазначенияКлиентСервер.КаталогФайловойИнформационнойБазы(), "DoNotCopy.txt"); - Если НайденныеФайлы.Количество() = 0 Тогда - // В каталоге базы отсутствует файл проверки. - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В каталоге информационной базы отсутствует файл проверки %1.'"), ИмяФайлаПроверки); - УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); - Возврат Истина; - КонецЕсли; - ЧтениеТекста = Новый ЧтениеТекста(НайденныеФайлы[0].ПолноеИмя); - ИдентификаторБазы = ЧтениеТекста.ПрочитатьСтроку(); - // Файл присутствует, но идентификатор внутри не соответствует ожидаемому. - Если ИдентификаторБазы <> ПараметрыБлокировки.ИдентификаторБазы Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Идентификатор информационной базы в файле проверки %1 не соответствует идентификатору в текущей базе.'"), ИмяФайлаПроверки); - УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); - Возврат Истина; - КонецЕсли; - Иначе // Клиент-серверная база - ИмяБазы = НРег(СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединения).Ref); - ИмяКомпьютера = НРег(ИмяКомпьютера()); - ИмяСервера = НРег(СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединения).Srvr); - СохраненноеИмяБазы = НРег(СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(ПараметрыБлокировки.СтрокаСоединения).Ref); - СохраненноеИмяКомпьютера = НРег(ПараметрыБлокировки.ИмяКомпьютера); - СохраненноеИмяСервера = НРег(СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(ПараметрыБлокировки.СтрокаСоединения).Srvr); - - Если ИмяБазы <> СохраненноеИмяБазы - Или (ПараметрыБлокировки.ПроверятьИмяСервера - И (ИмяКомпьютера <> СохраненноеИмяКомпьютера - И ИмяСервера <> СохраненноеИмяСервера)) Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Различаются имя информационной базы или имя компьютера. - |Сохраненное имя базы: %1, текущее имя базы: %2. - |Сохраненное имя компьютера: %3, текущее имя компьютера: %4'"), - СохраненноеИмяБазы, ИмяБазы, СохраненноеИмяКомпьютера, ИмяКомпьютера); - УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); - Возврат Истина; - КонецЕсли; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - // Инициализирует константу ПараметрыБлокировкиРаботыСВнешнимиРесурсами. // Процедура ИнициализироватьПараметрыБлокировкиРаботыСВнешнимиРесурсами(РаботаСВнешнимиРесурсамиЗаблокирована = Ложь) diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index edf246cd0..bcdbe5622 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -106,7 +106,7 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистемКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме. +// См. ИнтеграцияПодсистемБСПКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме. Процедура ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме(Результат) Экспорт Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда @@ -115,7 +115,7 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистемКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию. +// См. ИнтеграцияПодсистемБСПКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию. Процедура ПриПредложенииПользователюСоздатьРезервнуюКопию() Экспорт ОткрытьФормуРезервногоКопирования(); @@ -388,6 +388,8 @@ СтруктураПараметров.Вставить("ИмяФайлаПрограммы", СтандартныеПодсистемыКлиент.ИмяИсполняемогоФайлаПриложения()); СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации", НСтр("ru = 'Резервное копирование ИБ'")); + // Вызов КаталогВременныхФайлов вместо ПолучитьИмяВременногоФайла, так как каталог не должен удаляться + // автоматически при завершении клиентского приложения. КаталогВременныхФайловОбновления = КаталогВременныхФайлов() + "1Cv8Backup." + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=ггММддЧЧммсс") + "\"; СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления", КаталогВременныхФайловОбновления); diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхКлиент/Module.bsl index 7b0f1a4e5..e4628dafb 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхКлиент/Module.bsl @@ -25,7 +25,7 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. -// См. ИнтеграцияСтандартныхПодсистемКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме. +// См. ИнтеграцияПодсистемБСПКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме. Процедура ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме(Результат) Экспорт Если СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().РазделениеВключено Тогда @@ -36,7 +36,7 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистемКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию. +// См. ИнтеграцияПодсистемБСПКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию. Процедура ПриПредложенииПользователюСоздатьРезервнуюКопию() Экспорт Если СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().РазделениеВключено Тогда diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index afdf135ca..054be79da 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -324,12 +324,10 @@ МестноеВремя(Блокировка.КонецБлокировки), Блокировка.КонецБлокировки); Результат.Сообщение = Блокировка.СообщениеБлокировки; Результат.Эксклюзивная = Блокировка.Эксклюзивная; - ТекущаяДата = ТекущаяДатаСеанса(); Результат.Установлена = Истина; - // Уточняем результат по периоду блокировки. - Результат.Установлена = Не ЗначениеЗаполнено(Блокировка.КонецБлокировки) - Или Блокировка.КонецБлокировки >= ТекущаяДата - Или УстановленаБлокировкаСоединенийНаДату(Результат, ТекущаяДата); + Если ЗначениеЗаполнено(Блокировка.КонецБлокировки) И ТекущаяДатаСеанса() > Блокировка.КонецБлокировки Тогда + Результат.Установлена = Ложь; + КонецЕсли; Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index 235f6eb75..2255b76af 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -171,6 +171,26 @@ КонецПроцедуры +// См. ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы. +Процедура ПередЗавершениемРаботыСистемы(Отказ, Предупреждения) Экспорт + + Если РаботаПользователейЗавершается() Тогда + ПараметрыПредупреждения = СтандартныеПодсистемыКлиент.ПредупреждениеПриЗавершенииРаботы(); + ПараметрыПредупреждения.ТекстГиперссылки = НСтр("ru = 'Блокировка работы пользователей'"); + ПараметрыПредупреждения.ТекстПредупреждения = НСтр("ru = 'Из текущего сеанса выполняется завершение работы пользователей'"); + ПараметрыПредупреждения.ВывестиОдноПредупреждение = Истина; + + Форма = "Обработка.БлокировкаРаботыПользователей.Форма.БлокировкаСоединенийСИнформационнойБазой"; + + ДействиеПриНажатииГиперссылки = ПараметрыПредупреждения.ДействиеПриНажатииГиперссылки; + ДействиеПриНажатииГиперссылки.Форма = Форма; + ДействиеПриНажатииГиперссылки.ПрикладнаяФормаПредупреждения = Форма; + + Предупреждения.Добавить(ПараметрыПредупреждения); + КонецЕсли; + +КонецПроцедуры + // Вызывается при неудачной попытке установить монопольный режим в файловой базе. // // Параметры: diff --git a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl index d27c76e72..177e13406 100644 --- a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl @@ -350,7 +350,7 @@ Обработчики.Колонки.Добавить("Обработчик"); Обработчики.Колонки.Добавить("КодОбработчика"); - ИнтеграцияСтандартныхПодсистем.ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики); + ИнтеграцияПодсистемБСП.ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики); ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных(Обработчики); Возврат Обработчики.Скопировать(Новый Структура("ВидДанных", ВидДанных), "Обработчик, КодОбработчика"); diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index 44e7b31aa..deaf23312 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -104,7 +104,7 @@ ПользователиСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Неопределено, Ложь); - ИнтеграцияСтандартныхПодсистем.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); + ИнтеграцияПодсистемБСП.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); ПрикладныеПараметры = Новый Структура; ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске(ПрикладныеПараметры); @@ -130,7 +130,7 @@ Параметры = Новый Структура; ДобавитьПоправкиКВремени(Параметры, СвойстваКлиента); - ИнтеграцияСтандартныхПодсистем.ПриДобавленииПараметровРаботыКлиента(Параметры); + ИнтеграцияПодсистемБСП.ПриДобавленииПараметровРаботыКлиента(Параметры); ПрикладныеПараметры = Новый Структура; ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента(ПрикладныеПараметры); @@ -260,12 +260,10 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с предопределенными данными. -// Получает ссылку предопределенного элемента по его полному имени. -// Подробнее - см. ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(); -// -Функция ПредопределенныйЭлемент(Знач ПолноеИмяПредопределенного) Экспорт +// См. СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных +Функция СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных) Экспорт - Возврат СтандартныеПодсистемыПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного, ПривилегированныйРежим()); + Возврат СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); КонецФункции diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index b10f6164e..506f1f577 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -381,7 +381,7 @@ КонецЕсли; Предупреждения = Новый Массив; - ИнтеграцияСтандартныхПодсистемКлиент.ПередЗавершениемРаботыСистемы(Отказ, Предупреждения); + ИнтеграцияПодсистемБСПКлиент.ПередЗавершениемРаботыСистемы(Отказ, Предупреждения); ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(Отказ, Предупреждения); Если Предупреждения.Количество() = 0 Тогда @@ -1001,7 +1001,7 @@ Параметры.Вставить("ДобавленныеМодули", Новый Массив); Попытка Параметры.Вставить("Модули", Новый Массив); - ИнтеграцияСтандартныхПодсистемКлиент.ПередНачаломРаботыСистемы(Параметры); + ИнтеграцияПодсистемБСПКлиент.ПередНачаломРаботыСистемы(Параметры); Параметры.Вставить("ДобавленныеМодули", Параметры.Модули); Параметры.Удалить("Модули"); Исключение @@ -1192,7 +1192,7 @@ Параметры.Вставить("ДобавленныеМодули", Новый Массив); Попытка Параметры.Вставить("Модули", Новый Массив); - ИнтеграцияСтандартныхПодсистемКлиент.ПриНачалеРаботыСистемы(Параметры); + ИнтеграцияПодсистемБСПКлиент.ПриНачалеРаботыСистемы(Параметры); Параметры.Вставить("ДобавленныеМодули", Параметры.Модули); Параметры.Удалить("Модули"); Исключение @@ -1312,7 +1312,7 @@ Параметры.Вставить("ОбработкаПродолжения", Параметры.ОбработкаЗавершения); Попытка - ИнтеграцияСтандартныхПодсистемКлиент.ПослеНачалаРаботыСистемы(); + ИнтеграцияПодсистемБСПКлиент.ПослеНачалаРаботыСистемы(); ОбщегоНазначенияКлиентПереопределяемый.ПослеНачалаРаботыСистемы(); Исключение ОбработатьОшибкуПриНачалеРаботыСистемы(Параметры, ИнформацияОбОшибке()); @@ -1375,7 +1375,7 @@ ПараметрыЗапуска = СтрРазделить(ПараметрЗапуска, ";", Ложь); Отказ = Ложь; - ИнтеграцияСтандартныхПодсистемКлиент.ПриОбработкеПараметровЗапуска(ПараметрыЗапуска, Отказ); + ИнтеграцияПодсистемБСПКлиент.ПриОбработкеПараметровЗапуска(ПараметрыЗапуска, Отказ); ОбщегоНазначенияКлиентПереопределяемый.ПриОбработкеПараметровЗапуска(ПараметрыЗапуска, Отказ); Возврат Не Отказ; diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index 67ebe855f..94c3b05b7 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -108,15 +108,6 @@ КонецФункции -// Получает ссылку предопределенного элемента по его полному имени. -// Подробнее - см. ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(); -// -Функция ПредопределенныйЭлемент(Знач ПолноеИмяПредопределенного) Экспорт - - Возврат СтандартныеПодсистемыВызовСервера.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); - -КонецФункции - // См. СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(). Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт @@ -250,4 +241,14 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Работа с предопределенными данными. + +// См. СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных +Функция СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных) Экспорт + + Возврат СтандартныеПодсистемыВызовСервера.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index e5367cf6c..7ff8903f5 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -152,49 +152,6 @@ КонецФункции -// Возвращает соответствие имен предопределенных значений ссылкам на них. -// -// Параметры: -// ПолноеИмяОбъектаМетаданных - Строка, например, "Справочник.ВидыНоменклатуры", -// Поддерживаются только таблицы -// с предопределенными элементами: -// - Справочники, -// - Планы видов характеристик, -// - Планы счетов, -// - Планы видов расчета. -// -// Возвращаемое значение: -// Соответствие, где -// Ключ - Строка - имя предопределенного, -// Значение - Ссылка предопределенного. -// -Функция СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТекущаяТаблица.Ссылка КАК Ссылка, - | ТекущаяТаблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных - |ИЗ - | &ТекущаяТаблица КАК ТекущаяТаблица - |ГДЕ - | ТекущаяТаблица.Предопределенный = ИСТИНА"; - - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", ПолноеИмяОбъектаМетаданных); - - Выборка = Запрос.Выполнить().Выбрать(); - - ПредопределенныеЗначения = Новый Соответствие; - - Пока Выборка.Следующий() Цикл - ИмяПредопределенного = Выборка.ИмяПредопределенныхДанных; - ПредопределенныеЗначения.Вставить(ИмяПредопределенного, Выборка.Ссылка); - КонецЦикла; - - Возврат ПредопределенныеЗначения; - -КонецФункции - // Возвращает признак использования в информационной базе полного РИБ (без фильтров). // Проверка выполняется по более точному алгоритму, если используется подсистема "Обмен данными". // @@ -474,33 +431,89 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с предопределенными данными. -// Получает ссылку предопределенного элемента по его полному имени. -// Подробнее - см. ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(); +// Возвращает соответствие имен предопределенных значений ссылкам на них. // -Функция ПредопределенныйЭлемент(Знач ПолноеИмяПредопределенного, ПривилегированныйРежим) Экспорт +// Параметры: +// ПолноеИмяОбъектаМетаданных - Строка, например, "Справочник.ВидыНоменклатуры", +// Поддерживаются только таблицы +// с предопределенными элементами: +// - Справочники, +// - Планы видов характеристик, +// - Планы счетов, +// - Планы видов расчета. +// +// Возвращаемое значение: +// ФиксированноеСоответствие, Неопределено, где +// * Ключ - Строка - имя предопределенного, +// * Значение - Ссылка, Null - ссылка предопределенного или Null, если объекта нет в ИБ. +// +// Если ошибка в имени метаданных или неподходящий тип метаданного, то возвращается Неопределено. +// Если предопределенных у метаданного нет, то возвращается пустое фиксированное соответствие. +// Если предопределенный определен в метаданных, но не создан в ИБ, то для него в соответствии возвращается Null. +// +Функция СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных) Экспорт - ИмяПредопределенного = ВРег(ПолноеИмяПредопределенного); + ПредопределенныеЗначения = Новый Соответствие; - Точка = СтрНайти(ИмяПредопределенного, "."); - ИмяКоллекции = Лев(ИмяПредопределенного, Точка - 1); - ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); - Точка = СтрНайти(ИмяПредопределенного, "."); - ИмяТаблицы = Лев(ИмяПредопределенного, Точка - 1); - ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); - - ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 Ссылка ИЗ &ПолноеИмяТаблицы ГДЕ ИмяПредопределенныхДанных = &ИмяПредопределенного"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяТаблицы", ИмяКоллекции + "." + ИмяТаблицы); - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ИмяПредопределенного", ИмяПредопределенного); - - Результат = Запрос.Выполнить(); - Если Не Результат.Пустой() Тогда - Возврат Результат.Выгрузить()[0].Ссылка; + // Если метаданных не существует. + Если МетаданныеОбъекта = Неопределено Тогда + Возврат Неопределено; КонецЕсли; - Возврат Неопределено; + // Если не подходящий тип метаданных. + Если Не Метаданные.Справочники.Содержит(МетаданныеОбъекта) + И Не Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеОбъекта) + И Не Метаданные.ПланыСчетов.Содержит(МетаданныеОбъекта) + И Не Метаданные.ПланыВидовРасчета.Содержит(МетаданныеОбъекта) Тогда + + Возврат Неопределено; + КонецЕсли; + + ИменаПредопределенных = МетаданныеОбъекта.ПолучитьИменаПредопределенных(); + + // Если предопределенных у метаданного нет. + Если ИменаПредопределенных.Количество() = 0 Тогда + Возврат Новый ФиксированноеСоответствие(ПредопределенныеЗначения); + КонецЕсли; + + // Заполнение по умолчанию признаком отсутствия в ИБ (присутствующие переопределятся). + Для каждого ИмяПредопределенного Из ИменаПредопределенных Цикл + ПредопределенныеЗначения.Вставить(ИмяПредопределенного, Null); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТекущаяТаблица.Ссылка КАК Ссылка, + | ТекущаяТаблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | ТекущаяТаблица.Предопределенный"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", ПолноеИмяОбъектаМетаданных); + + // Разрешение вызова из безопасного режима внешней обработки или расширения. + // Ссылки предопределенных не являются секретной информацией, потому к ним + // не следует применять ограничение на уровне записей, к тому же при отсутствии + // прав разыменование ссылки все равно провалится. + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Выборка = Запрос.Выполнить().Выбрать(); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + // Заполнение присутствующих в ИБ. + Пока Выборка.Следующий() Цикл + ПредопределенныеЗначения.Вставить(Выборка.ИмяПредопределенныхДанных, Выборка.Ссылка); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(ПредопределенныеЗначения); КонецФункции diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index b346bf7ec..0499778a6 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -45,7 +45,7 @@ КонецЕсли; Обработчики = Новый Соответствие; - ИнтеграцияСтандартныхПодсистем.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + ИнтеграцияПодсистемБСП.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); ОбработчикиСобственные = Новый Соответствие; ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса(ОбработчикиСобственные); @@ -92,7 +92,7 @@ // встроенной в конфигурацию. // // Возвращаемое значение: -// Строка - версия БСП, например "1.0.0.0". +// Строка - версия БСП, например "1.0.1.1". // Функция ВерсияБиблиотеки() Экспорт @@ -243,56 +243,69 @@ // Подробнее см. стандарт "Поле "Дата" в списках". // // Параметры: -// Форма - УправляемаяФорма - Форма со списком. +// ЭтотОбъект - УправляемаяФорма - Форма со списком. // ПолноеИмяРеквизита - Строка - Полный путь к реквизиту типа "Дата" в формате "<ИмяСписка>.<ИмяПоля>". // ИмяЭлемента - Строка - Имя элемента формы, связанного с реквизитом списка типа "Дата". // // Пример: -// Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) -// СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект); // -Процедура УстановитьУсловноеОформлениеПоляДата(Форма, ПолноеИмяРеквизита = "Список.Дата", ИмяЭлемента = "Дата") Экспорт - УсловноеОформлениеКД = Форма.УсловноеОформление; - ПутьКРеквизиту = ПолноеИмяРеквизита; - Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда - МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьКРеквизиту, "."); - Если МассивСтрок.Количество() > 1 Тогда - ДинамическийСписок = Форма[МассивСтрок[0]]; - Если ТипЗнч(ДинамическийСписок) = Тип("ДинамическийСписок") Тогда - МассивСтрок.Удалить(0); - УсловноеОформлениеКД = ДинамическийСписок.УсловноеОформление; - ПутьКРеквизиту = СтрСоединить(МассивСтрок, "."); - КонецЕсли; - КонецЕсли; - ИначеЕсли ТипЗнч(Форма) <> Тип("ДинамическийСписок") Тогда - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( - "СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата", - "Форма", - Форма, - Тип("УправляемаяФорма")); +// Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) +// СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект); +// +Процедура УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, + ПолноеИмяРеквизита = "Список.Дата", ИмяЭлемента = "Дата") Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата", + "ЭтотОбъект", ЭтотОбъект, Тип("УправляемаяФорма")); + + ЧастиПолногоИмени = СтрРазделить(ПолноеИмяРеквизита, "."); + + Если ЧастиПолногоИмени.Количество() <> 2 Тогда + ОписаниеОшибки = НСтр("ru = 'Недопустимое значение параметра ПолноеИмяРеквизита. + |Имя реквизита должно быть в формате ""<ИмяСписка>.<ИмяПоля>""'"); + Возврат; КонецЕсли; - Если Не ЗначениеЗаполнено(УсловноеОформлениеКД.ИдентификаторПользовательскойНастройки) Тогда - УсловноеОформлениеКД.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; + ИмяСписка = ЧастиПолногоИмени[0]; + РеквизитСписок = ЭтотОбъект[ИмяСписка]; + + Если ТипЗнч(РеквизитСписок) = Тип("ДинамическийСписок") Тогда + // ДинамическийСписок позволяет установить условное оформление с помощью собственного компоновщика. + // При этом параметр ИмяЭлемента игнорируется, потому что компоновщик динамического списка + // не знает как будут отображены реквизиты списка, потому путем к реквизиту и значения отбора и оформления + // является имя реквизита динамического списка. + УсловноеОформление = РеквизитСписок.УсловноеОформление; + ПутьКРеквизиту = ЧастиПолногоИмени[1]; + ИмяОформляемогоПоля = ПутьКРеквизиту; + Иначе + // Остальные списки, например, ДанныеФормыДерево: + // не имеют собственного компоновщика, потому используют компоновщик самой формы. + УсловноеОформление = ЭтотОбъект.УсловноеОформление; + ПутьКРеквизиту = ПолноеИмяРеквизита; + ИмяОформляемогоПоля = ИмяЭлемента; + КонецЕсли; + + Если Не ЗначениеЗаполнено(УсловноеОформление.ИдентификаторПользовательскойНастройки) Тогда + УсловноеОформление.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; КонецЕсли; // По умолчанию используется представление "10.06.2012". - ЭлементОформления = УсловноеОформлениеКД.Элементы.Добавить(); + ЭлементОформления = УсловноеОформление.Элементы.Добавить(); ЭлементОформления.Использование = Истина; ЭлементОформления.Представление = НСтр("ru = 'Представление даты: ""10.06.2012""'"); ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДЛФ=D"); ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить(); - ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяЭлемента); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяОформляемогоПоля); // Для сегодняшнего дня используется представления "09:46". - ЭлементОформления = УсловноеОформлениеКД.Элементы.Добавить(); + ЭлементОформления = УсловноеОформление.Элементы.Добавить(); ЭлементОформления.Использование = Истина; ЭлементОформления.Представление = НСтр("ru = 'Представление даты сегодня: ""09:46""'"); ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДФ=ЧЧ:мм"); ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить(); - ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяЭлемента); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяОформляемогоПоля); ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКРеквизиту); @@ -303,6 +316,7 @@ ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКРеквизиту); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше; ЭлементОтбора.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоСледующегоДня); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -980,7 +994,7 @@ КонецЕсли; КонецЕсли; - ИнтеграцияСтандартныхПодсистем.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); + ИнтеграцияПодсистемБСП.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -1017,7 +1031,7 @@ Возврат; КонецЕсли; - ИнтеграцияСтандартныхПодсистем.ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); + ИнтеграцияПодсистемБСП.ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -1066,7 +1080,7 @@ КонецЕсли; - ИнтеграцияСтандартныхПодсистем.ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); + ИнтеграцияПодсистемБСП.ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -1493,6 +1507,30 @@ КонецФункции +// Проверяет доступность проведения списка документов текущему пользователю. +// +// Параметры: +// СписокДокументов - Массив - документы для проверки. +// +// Возвращаемое значение: +// Булево - Истина, если есть право проведения хотя бы для одного документа. +// +Функция ДоступноПравоПроведения(СписокДокументов) Экспорт + ТипыДокументов = Новый Массив; + Для Каждого Документ Из СписокДокументов Цикл + ТипДокумента = ТипЗнч(Документ); + Если ТипыДокументов.Найти(ТипДокумента) <> Неопределено Тогда + Продолжить; + Иначе + ТипыДокументов.Добавить(ТипДокумента); + КонецЕсли; + Если ПравоДоступа("Проведение", Метаданные.НайтиПоТипу(ТипДокумента)) Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -1688,34 +1726,6 @@ КонецПроцедуры -// Собирает статистику использования конфигурации. -// -Процедура СобратьСтатистикуКонфигурации() Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда - Возврат; - КонецЕсли; - - ОбновлениеИнформационнойБазыСлужебный.СобратьСтатистикуКонфигурации(); - ПользователиСлужебный.СобратьСтатистикуКонфигурации(); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - МодульВерсионированиеОбъектов.СобратьСтатистикуКонфигурации(); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - МодульВариантыОтчетов.СобратьСтатистикуКонфигурации(); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); - МодульРаботаСФайламиСлужебный.СобратьСтатистикуКонфигурации(); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1738,7 +1748,7 @@ Возврат; КонецЕсли; - ИнтеграцияСтандартныхПодсистем.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); + ИнтеграцияПодсистемБСП.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); // Вызов переопределяемого обработчика для выполнения прикладной логики обмена РИБ. ОбщегоНазначенияПереопределяемый.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); @@ -2040,7 +2050,7 @@ МассивВерсий = Неопределено; СтруктураПоддерживаемыхВерсий = Новый Структура; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий); + ИнтеграцияПодсистемБСП.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий); СтруктураПоддерживаемыхВерсий.Свойство(ИмяИнтерфейса, МассивВерсий); Если МассивВерсий = Неопределено Тогда @@ -2385,7 +2395,7 @@ ПолучениеИзГлавногоУзла = (ПланыОбмена.ГлавныйУзел() = Источник.Ссылка); - ИнтеграцияСтандартныхПодсистем.ПослеПолученияДанных(Источник, Отказ, ПолучениеИзГлавногоУзла); + ИнтеграцияПодсистемБСП.ПослеПолученияДанных(Источник, Отказ, ПолучениеИзГлавногоУзла); КонецПроцедуры diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index 133e5409d..51687e4eb 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -713,62 +713,6 @@ КонецФункции -// Возвращает текстовое представление числа с единицей измерения в правильном склонении и числе. -// -// Параметры: -// Значение - Число - любое целое число. -// ПараметрыПредметаИсчисления - Строка - варианты написания единицы измерения в родительном падеже для одной, -// для двух и для пяти единиц, разделитель - запятая. -// ДобавлятьЧислоКРезультату - Булево - при передаче значения Ложь число не будет добавлено к строке. -// -// Возвращаемое значение: -// Строка - текстовое представление количества единиц, число записывается цифрами. -// -// Пример: -// ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; -// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". -// -Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Значение, Знач ПараметрыПредметаИсчисления, - Знач ДобавлятьЧислоКРезультату = Истина) Экспорт - - Результат = ?(ДобавлятьЧислоКРезультату, Формат(Значение, "ЧН=0") + " ", ""); - ПредставленияПредмета = Новый Массив; - - ПараметрыПредметаИсчисления = СтрРазделить(ПараметрыПредметаИсчисления, ","); - Для Каждого Параметр Из ПараметрыПредметаИсчисления Цикл - ПредставленияПредмета.Добавить(СокрЛП(Параметр)); - КонецЦикла; - - Значение = Значение % 100; - Если Значение > 20 Тогда - Значение = Значение % 10; - КонецЕсли; - - Индекс = ?(Значение = 1, 0, ?(Значение > 1 И Значение < 5, 1, 2)); - Результат = Результат + ПредставленияПредмета[Индекс]; - - Возврат Результат; - -КонецФункции - -// Возвращает единицу измерения в нужном склонении в зависимости от количества единиц. -// -// Параметры: -// ФормаДля1 - Строка - форма слова для одной единицы; -// ФормаДля2 - Строка - форма слова для двух единиц; -// ФормаДля5 - Строка - форма слова для пяти единиц; -// Значение - Число - любое целое число. -// -// Возвращаемое значение: -// Строка - единица изменения в нужном склонении. -// -// Пример: -// СтроковыеФункцииКлиентСервер.ФормаМножественногоЧисла("шкаф", "шкафа", "шкафов", 3); возвращает "шкафа". -// -Функция ФормаМножественногоЧисла(ФормаДля1, ФормаДля2, ФормаДля5, Знач Значение) Экспорт - Возврат ЧислоЦифрамиПредметИсчисленияПрописью(Значение, ФормаДля1 + "," + ФормаДля2 + "," + ФормаДля5, Ложь); -КонецФункции - // Очищает текст в формате HTML от тегов и возвращает неформатированный текст. // // Параметры: @@ -1030,10 +974,65 @@ КонецФункции +// Формирует представление числа для определенного языка и параметров числа. +// +// Параметры: +// Шаблон - Строка - Строка, содержит перечисленные через точку с запятой 6 форм строки +// для каждой категории числительного: +// - %1 обозначает позицию числа; +// Число - Число - Число, которое будет подставлено в строку вместо параметра "%1". +// Вид - ВидЧисловогоЗначения - Определяет вид числового значения, для которого формируется представление. +// - Количественное (по умолчанию) или Порядковое. +// ФорматнаяСтрока - Строка - Строка параметров форматирования. См. аналогичный параметр в СтрокаСЧислом. +// +// Возвращаемое значение: +// Строка - Представление строки числа в требуемой форме. +// +// Пример: +// +// // Представление параметров: +// // +// // Lang | Zero | One | Two | Few | Many | Other +// // ============================================================================================================ +// // ru | | XX1 / X11 | | XX2-XX4 / X12-X14 | XX0, XX5-XX9, X11-X14 | дробные +// // Card.| | остался %1 день | | осталось %1 дня | осталось %1 дней | осталось %1 дня +// // | | вижу %1 рыбу | | вижу %1-х рыб | вижу %5 рыб | вижу %1 рыбы +// // ------------------------------------------------------------------------------------------------------------ +// // ru | | | | | | других нет +// // Ord. | | | | | | %1-й день +// // ------------------------------------------------------------------------------------------------------------ +// // en | | для 1 | | | | остальное +// // Card.| | left %1 day | | | | left %1 days +// // ------------------------------------------------------------------------------------------------------------ +// // en | | XX1 / X11 | XX2 / X12 | XX3 / X13 | | остальное +// // Ord. | | %1st day | %1nd day | %1rd day | | %1th day. +// +// // Card. - Cardinal - Количественное; +// // Ord. - Ordinal - Порядковое; +// // X - любая цифра; +// // / - кроме. +// +// Строка = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка( +// НСтр("ru=';остался %1 день;;осталось %1 дня;осталось %1 дней;осталось %1 дня'; +// |en=';left %1 day;;;;left %1 days'"), +// 0.05,, "ЧДЦ=1"); +// +Функция СтрокаСЧисломДляЛюбогоЯзыка(Шаблон, Число, Вид = Неопределено, ФорматнаяСтрока = Неопределено) Экспорт + + Если ПустаяСтрока(Шаблон) Тогда + Возврат Формат(Число, ФорматнаяСтрока); + КонецЕсли; + + Если Вид = Неопределено Тогда + Вид = ВидЧисловогоЗначения.Количественное; + КонецЕсли; + + Возврат СтрокаСЧислом(Шаблон, Число, Вид, ФорматнаяСтрока); + +КонецФункции #Область УстаревшиеПроцедурыИФункции - // Устарела. Следует использовать СтрСоединить. // // Объединяет строки из массива в строку с разделителями. @@ -1145,6 +1144,75 @@ Возврат Результат; КонецФункции +// Устарела. Следует использовать СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(). +// +// ЧислоЦифрамиПредметИсчисленияПрописью(1.5, "минуту,минуты,минут"); +// ->СтрокаСЧисломДляЛюбогоЯзыка(";%1 минуту;;%1 минуты;%1 минут;%1 минуты ", Значение); +// +// ЧислоЦифрамиПредметИсчисленияПрописью(1.5, "минуту,минуты,минут ", Ложь); +// ->СтрокаСЧисломДляЛюбогоЯзыка(";минуту;;минуты;минут;минуты", Значение); +// +// Возвращает текстовое представление числа с единицей измерения в правильном склонении и числе. +// +// Параметры: +// Значение - Число - любое целое число. +// ПараметрыПредметаИсчисления - Строка - варианты написания единицы измерения для одной, +// для двух и для пяти единиц, разделитель - запятая. +// ДобавлятьЧислоКРезультату - Булево - при передаче значения Ложь число не будет добавлено к строке. +// +// Возвращаемое значение: +// Строка - текстовое представление количества единиц, число записывается цифрами. +// +// Пример: +// ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; +// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". +// +Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Значение, Знач ПараметрыПредметаИсчисления, + Знач ДобавлятьЧислоКРезультату = Истина) Экспорт + + Результат = ?(ДобавлятьЧислоКРезультату, Формат(Значение, "ЧН=0") + " ", ""); + ПредставленияПредмета = Новый Массив; + + ПараметрыПредметаИсчисления = СтрРазделить(ПараметрыПредметаИсчисления, ","); + Для Каждого Параметр Из ПараметрыПредметаИсчисления Цикл + ПредставленияПредмета.Добавить(СокрЛП(Параметр)); + КонецЦикла; + + Значение = Значение % 100; + Если Значение > 20 Тогда + Значение = Значение % 10; + КонецЕсли; + + Индекс = ?(Значение = 1, 0, ?(Значение > 1 И Значение < 5, 1, 2)); + Результат = Результат + ПредставленияПредмета[Индекс]; + + Возврат Результат; + +КонецФункции + +// Устарела. Следует использовать СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(). +// +// ФормаМножественногоЧисла("минуту", "минуты", "минут", 1.5); +// -> СтрокаСЧисломДляЛюбогоЯзыка(";минуту;;минуты;минут;минуты", Значение); +// +// Возвращает единицу измерения в нужном склонении в зависимости от количества единиц. +// +// Параметры: +// ФормаДля1 - Строка - форма слова для одной единицы; +// ФормаДля2 - Строка - форма слова для двух единиц; +// ФормаДля5 - Строка - форма слова для пяти единиц; +// Значение - Число - любое целое число. +// +// Возвращаемое значение: +// Строка - единица изменения в нужном склонении. +// +// Пример: +// СтроковыеФункцииКлиентСервер.ФормаМножественногоЧисла("шкаф", "шкафа", "шкафов", 3); возвращает "шкафа". +// +Функция ФормаМножественногоЧисла(ФормаДля1, ФормаДля2, ФормаДля5, Знач Значение) Экспорт + Возврат ЧислоЦифрамиПредметИсчисленияПрописью(Значение, ФормаДля1 + "," + ФормаДля2 + "," + ФормаДля5, Ложь); +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl index e8261358a..c21bfe3c5 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl @@ -23,7 +23,7 @@ ТекущиеДела = НоваяТаблицаТекущихДел(); КоличествоДел = 0; - ДобавитьДело(ТекущиеДела, ИнтеграцияСтандартныхПодсистем, КоличествоДел); + ДобавитьДело(ТекущиеДела, ИнтеграцияПодсистемБСП, КоличествоДел); // Добавление дел от прикладных конфигураций. ОбработчикиЗаполненияДел = Новый Массив; diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index 9c6a14d38..f03838d76 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -808,8 +808,13 @@ // Это позволяет в отдельных случаях ускорить открытие динамического списка. // Если количество разрешенных значений в общей сложности получилось более 100, отбор не устанавливается. // -// Для работы процедуры у динамического списка должна установлена основная таблица и установлен -// произвольный запрос с синонимами для стандартных реквизитов, например, Дата и Номер у документов. +// Для работы процедуры у динамического списка должна быть установлена основная таблица, +// установлен произвольный запрос, а также должно поддерживаться преобразование вида: +// СхемаЗапроса = Новый СхемаЗапроса; +// СхемаЗапроса.УстановитьТекстЗапроса(Список.ТекстЗапроса); +// Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса(); +// Если это условие выполнить не удается, тогда следует добавлять отборы самостоятельно +// с использованием функции РазрешенныеЗначенияДляДинамическогоСписка, как в этой процедуре. // // Параметры: // Список - ДинамическийСписок - динамический список, в который нужно установить отборы. @@ -1801,6 +1806,8 @@ #Область ДляВызоваИзДругихПодсистем +// СлужебныеПодсистемы.ОбъектыУТКАУП + // Назначение: для универсального журнала документов на регистре (ERP). // Используется для скрытия дублирующей записи в журнале для документов перемещения, // в тех случаях, когда точно известно, что записей будет сразу две. @@ -1828,6 +1835,8 @@ КонецФункции +// Конец СлужебныеПодсистемы.ОбъектыУТКАУП + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index 425ae42a4..76d896e1b 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -630,7 +630,7 @@ Обработчик.Приоритет = 1; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.2.103"; + Обработчик.Версия = "2.4.3.101"; Обработчик.Процедура = "Справочники.ГруппыДоступа.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; @@ -929,7 +929,7 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистем.ПослеЗаписиАдминистратораПриАвторизации. +// См. ИнтеграцияПодсистемБСП.ПослеЗаписиАдминистратораПриАвторизации. Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт Комментарий = @@ -943,14 +943,14 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистем.ПослеУстановкиПользователяИБ. +// См. ИнтеграцияПодсистемБСП.ПослеУстановкиПользователяИБ. Процедура ПослеУстановкиПользователяИБ(Ссылка, ПарольПользователяСервиса) Экспорт УправлениеДоступом.ОбновитьРолиПользователей(Ссылка, ПарольПользователяСервиса); КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистем.ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора. +// См. ИнтеграцияПодсистемБСП.ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора. Процедура ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса) Экспорт ТекстВопроса = @@ -960,7 +960,7 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистем.ПриСозданииАдминистратора. +// См. ИнтеграцияПодсистемБСП.ПриСозданииАдминистратора. Процедура ПриСозданииАдминистратора(Администратор, Уточнение) Экспорт Если ТипЗнч(Администратор) <> Тип("СправочникСсылка.Пользователи") Тогда @@ -1015,7 +1015,7 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистем.ПослеДобавленияИзмененияПользователяИлиГруппы. +// См. ИнтеграцияПодсистемБСП.ПослеДобавленияИзмененияПользователяИлиГруппы. Процедура ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый) Экспорт Если ЭтоНовый Тогда @@ -1030,7 +1030,7 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистем.ПослеОбновленияСоставовГруппПользователей. +// См. ИнтеграцияПодсистемБСП.ПослеОбновленияСоставовГруппПользователей. Процедура ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы) Экспорт Параметры = Новый Структура; @@ -1043,7 +1043,7 @@ КонецПроцедуры -// См. ИнтеграцияСтандартныхПодсистем.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя. +// См. ИнтеграцияПодсистемБСП.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя. Процедура ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя(ВнешнийПользователь, СтарыйОбъектАвторизации, НовыйОбъектАвторизации) Экспорт @@ -1166,6 +1166,11 @@ // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных. Процедура ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ) Экспорт + // Роли расширений назначаются независимо в коробке и в сервисе. + Если ТипЗнч(Объект) = Тип("СправочникОбъект.ПрофилиГруппДоступа") Тогда + Справочники.ПрофилиГруппДоступа.УдалитьРолиРасширений(Объект); + КонецЕсли; + // В модели сервиса право открытия внешних отчетов и обработок не используется для пользователей областей данных, // поэтому проверка применяется только при переходе Коробка -> Сервис. Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -2069,7 +2074,7 @@ Используется = Истина; - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииИспользованияВидаДоступа(СвойстваВидаДоступа.Имя, Используется); + ИнтеграцияПодсистемБСП.ПриЗаполненииИспользованияВидаДоступа(СвойстваВидаДоступа.Имя, Используется); УправлениеДоступомПереопределяемый.ПриЗаполненииИспользованияВидаДоступа(СвойстваВидаДоступа.Имя, Используется); Возврат Используется; @@ -5633,7 +5638,7 @@ ВидыДоступа.Колонки.Добавить("НесколькоГруппЗначений", Новый ОписаниеТипов("Булево")); ВидыДоступа.Колонки.Добавить("ДополнительныеТипы", Новый ОписаниеТипов("ТаблицаЗначений")); - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииВидовДоступа(ВидыДоступа); + ИнтеграцияПодсистемБСП.ПриЗаполненииВидовДоступа(ВидыДоступа); УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа(ВидыДоступа); // Проверки: diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index 25f0c14ab..6241ab9c6 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -69,7 +69,7 @@ ОграниченияПрав = ""; - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(ОграниченияПрав); + ИнтеграцияПодсистемБСП.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(ОграниченияПрав); УправлениеДоступомПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(ОграниченияПрав); Если ДляПроверки Тогда diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 4aec61c93..eb221b682 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -86,11 +86,44 @@ // Функция КонтактнаяИнформацияОбъекта(СсылкаИлиОбъект, ВидКонтактнойИнформации = Неопределено, Дата = Неопределено, ТолькоПредставление = Истина) Экспорт + ТипОбъекта = ТипЗнч(СсылкаИлиОбъект); + Если НЕ ОбщегоНазначения.ЭтоСсылка(ТипОбъекта) Тогда + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта); + Результат = НоваяКонтактнаяИнформация(); + Если МетаданныеОбъекта <> Неопределено + И МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") <> Неопределено Тогда + + Для каждого СтрокаКонтактнаяИнформация Из СсылкаИлиОбъект.КонтактнаяИнформация Цикл + Если ВидКонтактнойИнформации = Неопределено + ИЛИ СтрокаКонтактнаяИнформация.Вид = ВидКонтактнойИнформации Тогда + НоваяСтрока = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКонтактнаяИнформация); + НоваяСтрока.Объект = СсылкаИлиОбъект; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Если ТолькоПредставление Тогда + Если Результат.Количество() > 0 Тогда + Возврат Результат[0].Представление; + КонецЕсли; + Возврат ""; + КонецЕсли; + + Возврат Результат; + + КонецЕсли; + Если ТолькоПредставление Тогда // Оставлено для обратной совместимости. МассивОбъектов = Новый Массив; МассивОбъектов.Добавить(СсылкаИлиОбъект.Ссылка); + Если НЕ ЗначениеЗаполнено(ВидКонтактнойИнформации) Тогда + Возврат ""; + КонецЕсли; + КонтактнаяИнформацияОбъекта = КонтактнаяИнформацияОбъектов(МассивОбъектов,, ВидКонтактнойИнформации, Дата); Если КонтактнаяИнформацияОбъекта.Количество() > 0 Тогда @@ -100,7 +133,7 @@ Возврат ""; Иначе СсылкиИлиОбъекты = Новый Массив; - СсылкиИлиОбъекты.Добавить(СсылкаИлиОбъект.Ссылка); + СсылкиИлиОбъекты.Добавить(СсылкаИлиОбъект); Если ТипЗнч(ВидКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда ВидыКонтактнойИнформации = Новый Массив; @@ -185,18 +218,18 @@ // Функция НоваяКонтактнаяИнформация(КолонкаОбъект = Истина) Экспорт - КонтактнаяИнформация = Новый ТаблицаЗначений; + КонтактнаяИнформация = Новый ТаблицаЗначений; + ОписаниеТиповСтрока500 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(500)); Если КолонкаОбъект Тогда КонтактнаяИнформация.Колонки.Добавить("Объект"); КонецЕсли; - ОписаниеТиповСтрока500 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(500)); - КонтактнаяИнформация.Колонки.Добавить("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации")); - КонтактнаяИнформация.Колонки.Добавить("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации")); + КонтактнаяИнформация.Колонки.Добавить("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации")); + КонтактнаяИнформация.Колонки.Добавить("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации")); КонтактнаяИнформация.Колонки.Добавить("ЗначенияПолей", Новый ОписаниеТипов("Строка")); КонтактнаяИнформация.Колонки.Добавить("Представление", ОписаниеТиповСтрока500); - КонтактнаяИнформация.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); + КонтактнаяИнформация.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); Возврат КонтактнаяИнформация; @@ -262,7 +295,7 @@ СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Представление") КонецЕсли; Если СтрокаКонтактнойИнформации = Неопределено Тогда - Если ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация) Тогда + Если ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата) Тогда Возврат; КонецЕсли; СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить(); @@ -273,7 +306,7 @@ СтрокаКонтактнойИнформации.ЗначенияПолей = ЗначенияПолей; СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформации; СтрокаКонтактнойИнформации.Тип = ФорматКонтактнойИнформации.Тип; - Если ЗначениеЗаполнено(Дата) Тогда + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений И ЗначениеЗаполнено(Дата) Тогда СтрокаКонтактнойИнформации.ДействуетС = Дата; КонецЕсли; @@ -325,7 +358,7 @@ ВладельцыКонтактнойИнформации.Вставить(СтрокаКонтактнойИнформации.Объект, ПараметрыКонтактнойИнформации); КонецЕсли; - ОбработатьСтрокуКонтактнойИнформации(СтрокаКонтактнойИнформации, ПараметрыКонтактнойИнформации.Периодическая); + ОбработатьСтрокуКонтактнойИнформации(СтрокаКонтактнойИнформации); КонецЦикла; @@ -343,23 +376,39 @@ Объект.КонтактнаяИнформация.Очистить(); КонецЕсли; - Для каждого КонтактнаяИнформацияОбъекта Из СтрокиКонтактнойИнформацииОбъекта Цикл + Для каждого СтрокаКонтактнойИнформацииОбъекта Из СтрокиКонтактнойИнформацииОбъекта Цикл + + ХранитьИсториюИзменений = ВладелецКонтактнойИнформации.Значение["Периодическая"] И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; + Если Замещать Тогда - Если ЗапрещенВводНесколькихЗначений(КонтактнаяИнформацияОбъекта.Вид, Объект.КонтактнаяИнформация) Тогда + Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) Тогда Продолжить; КонецЕсли; СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); Иначе - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(КонтактнаяИнформацияОбъекта.ЗначенияПолей, "ЗначенияПолей"); - Если СтрокаКонтактнойИнформации = Неопределено Тогда - Если ЗапрещенВводНесколькихЗначений(КонтактнаяИнформацияОбъекта.Вид, Объект.КонтактнаяИнформация) Тогда - Продолжить; - КонецЕсли; - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + + Отбор = Новый Структура(); + Отбор.Вставить("Вид", СтрокаКонтактнойИнформацииОбъекта.Вид); + + Если ХранитьИсториюИзменений Тогда + Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + Иначе + Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); КонецЕсли; + + Если НЕ ХранитьИсториюИзменений + И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) + ИЛИ НайденныеСтроки.Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + КонецЕсли; - ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(КонтактнаяИнформацияОбъекта, ВладелецКонтактнойИнформации.Значение["Периодическая"], СтрокаКонтактнойИнформации); + ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации); КонецЦикла; Если ВладелецКонтактнойИнформации.Значение["ЭтоСсылка"] Тогда @@ -411,13 +460,13 @@ Периодическая = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено; Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл - ОбработатьСтрокуКонтактнойИнформации(СтрокаКонтактнойИнформации, Периодическая); + ОбработатьСтрокуКонтактнойИнформации(СтрокаКонтактнойИнформации); КонецЦикла; Если Замещать Тогда Если Периодическая Тогда - Для каждого КонтактнаяИнформацияОбъекта Из КонтактнаяИнформация Цикл - НайденныеСтроки = НайтиСтрокиКонтактнойИнформации(КонтактнаяИнформацияОбъекта.Вид, КонтактнаяИнформацияОбъекта.Дата, Объект.КонтактнаяИнформация); + Для каждого СтрокаКонтактнойИнформацииОбъекта Из КонтактнаяИнформация Цикл + НайденныеСтроки = НайтиСтрокиКонтактнойИнформации(СтрокаКонтактнойИнформацииОбъекта.Вид, СтрокаКонтактнойИнформацииОбъекта.Дата, Объект.КонтактнаяИнформация); Для каждого Строка Из НайденныеСтроки Цикл Объект.КонтактнаяИнформация.Удалить(Строка); КонецЦикла; @@ -427,23 +476,39 @@ КонецЕсли; КонецЕсли; - Для каждого КонтактнаяИнформацияОбъекта Из КонтактнаяИнформация Цикл + Для каждого СтрокаКонтактнойИнформацииОбъекта Из КонтактнаяИнформация Цикл + + ХранитьИсториюИзменений = Периодическая И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; + Если Замещать Тогда - Если ЗапрещенВводНесколькихЗначений(КонтактнаяИнформацияОбъекта.Вид, Объект.КонтактнаяИнформация) Тогда + Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) Тогда Продолжить; КонецЕсли; СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); Иначе - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(КонтактнаяИнформацияОбъекта.ЗначенияПолей, "ЗначенияПолей"); - Если СтрокаКонтактнойИнформации = Неопределено Тогда - Если ЗапрещенВводНесколькихЗначений(КонтактнаяИнформацияОбъекта.Вид, КонтактнаяИнформация) Тогда - Продолжить; - КонецЕсли; - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + + Отбор = Новый Структура(); + Отбор.Вставить("Вид", СтрокаКонтактнойИнформацииОбъекта.Вид); + + Если ХранитьИсториюИзменений Тогда + Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + Иначе + Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); КонецЕсли; + + Если НЕ ХранитьИсториюИзменений + И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) + ИЛИ НайденныеСтроки.Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + КонецЕсли; - ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(КонтактнаяИнформацияОбъекта, Периодическая, СтрокаКонтактнойИнформации); + ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации); КонецЦикла; @@ -542,6 +607,7 @@ Функция КомментарийКонтактнойИнформации(XMLСтрока) Экспорт ЭтоСтрока = ТипЗнч(XMLСтрока) = Тип("Строка"); + Если ЭтоСтрока И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XMLСтрока) Тогда // Предыдущий формат значений полей, комментарий отсутствует. Возврат ""; @@ -873,6 +939,7 @@ // * НаименованиеПолное - Строка - Полное наименование страны. // * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2. // * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3. +// * УчастникЕАЭС - Булево - Страна-участник ЕАЭС. // Неопределено - страна не найдена ни в адресе, ни в классификаторе ОКСМ. // Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт @@ -896,11 +963,11 @@ ФильтрКлассификатора.Вставить("Наименование", Наименование); КонецЕсли; - Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); + Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС"); Запрос = Новый Запрос(" |ВЫБРАТЬ ПЕРВЫЕ 1 - | Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3 + | Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС |ИЗ | Справочник.СтраныМира |ГДЕ @@ -939,6 +1006,7 @@ // * НаименованиеПолное - Строка - Полное наименование страны. // * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2. // * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3. +// * УчастникЕАЭС - Булево - Страна-участник ЕАЭС. // Неопределено - страна не найдена ни в адресе, ни в классификаторе ОКСМ. // Функция ДанныеКлассификатораСтранМираПоКоду(Знач Код, Знач ТипКода = "КодСтраны") Экспорт @@ -955,7 +1023,7 @@ Если СтрокаДанных=Неопределено Тогда Результат = Неопределено; Иначе - Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); + Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС"); ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); КонецЕсли; @@ -975,6 +1043,7 @@ // * НаименованиеПолное - Строка - Полное наименование страны. // * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2. // * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3. +// * УчастникЕАЭС - Булево - Страна-участник ЕАЭС. // Неопределено - Страна не найдена в классификаторе. // Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт @@ -983,7 +1052,7 @@ Если СтрокаДанных=Неопределено Тогда Результат = Неопределено; Иначе - Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); + Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС"); ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); КонецЕсли; @@ -1034,6 +1103,7 @@ | ТаблицаКлассификатор.КодАльфа3, | ТаблицаКлассификатор.Наименование, | ТаблицаКлассификатор.НаименованиеПолное, + | ТаблицаКлассификатор.УчастникЕАЭС, | ТаблицаКлассификатор.Неактуальный |ПОМЕСТИТЬ ТаблицаКлассификатор |ИЗ @@ -1047,6 +1117,7 @@ | СтранаМира.КодАльфа3, | СтранаМира.Наименование, | СтранаМира.НаименованиеПолное, + | СтранаМира.УчастникЕАЭС, | СтранаМира.Неактуальный |ИЗ | ТаблицаКлассификатор КАК СтранаМира @@ -1058,7 +1129,7 @@ | ИЛИ СтранаМира.НаименованиеПолное = &КодИлиНаименование)"; Запрос.УстановитьПараметр("ТаблицаКлассификатор", ДанныеКлассификатора); - Запрос.УстановитьПараметр("КодИлиНаименование", КодИлиНаименование); + Запрос.УстановитьПараметр("КодИлиНаименование", КодИлиНаименование); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда @@ -1078,6 +1149,98 @@ КонецФункции +// Возвращает список стран Евразийского экономического союза (ЕАЭС). +// +// Возвращаемое значение: +// - ТаблицаЗначений - Список стран Евразийского экономического союза (ЕАЭС). +// * Ссылка - СправочникСсылка.СтраныМира - Ссылка на элемент справочника страны. +// * Наименование - Строка - Наименование страны. +// * Код - Строка - Код страны. +// * НаименованиеПолное - Строка - Полное наименование страны. +// * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2. +// * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3. +Функция СтраныУчастникиЕАЭС() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СтраныМира.Ссылка КАК Ссылка, + | СтраныМира.Наименование КАК Наименование, + | СтраныМира.Код КАК Код, + | СтраныМира.НаименованиеПолное КАК НаименованиеПолное, + | СтраныМира.КодАльфа2 КАК КодАльфа2, + | СтраныМира.КодАльфа3 КАК КодАльфа3 + |ИЗ + | Справочник.СтраныМира КАК СтраныМира + |ГДЕ + | СтраныМира.УчастникЕАЭС = ИСТИНА"; + + СтраныЕАЭС = Запрос.Выполнить().Выгрузить(); + + ДанныеКлассификатора = ТаблицаКлассификатора(); + + Для каждого Страна Из ДанныеКлассификатора Цикл + Если Страна.УчастникЕАЭС Тогда + Отбор = Новый Структура(); + Отбор.Вставить("Наименование", Страна.Наименование); + Отбор.Вставить("Код", Страна.Код); + Отбор.Вставить("НаименованиеПолное", Страна.НаименованиеПолное); + Отбор.Вставить("КодАльфа2", Страна.КодАльфа2); + Отбор.Вставить("КодАльфа3", Страна.КодАльфа3); + НайденныеСтроки = СтраныЕАЭС.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() = 0 Тогда + НоваяСтрока = СтраныЕАЭС.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Отбор); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат СтраныЕАЭС; + +КонецФункции + +// Определяет является ли страна-участником Евразийского экономического союза (ЕАЭС). +// +// Параметры: +// Страна - Строка, СправочникСсылка.СтраныМира - Код страны, код альфа2, код альфа3, +// наименование страны или ссылка на элемент справочника страны мира. +// Возвращаемое значение: +// Булево - Если Истина, то страна является государством-участником ЕАЭС. +Функция ЭтоСтранаУчастникЕАЭС(Страна) Экспорт + + Если ТипЗнч(Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СтраныМира.УчастникЕАЭС КАК УчастникЕАЭС + |ИЗ + | Справочник.СтраныМира КАК СтраныМира + |ГДЕ + | СтраныМира.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", Страна); + + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + СтрокаРезультата = РезультатЗапроса.Выбрать(); + Если СтрокаРезультата.Следующий() Тогда + Возврат (СтрокаРезультата.УчастникЕАЭС = ИСТИНА); + КонецЕсли; + КонецЕсли; + + Иначе + НайденнаяСтрана = СтранаМираПоКодуИлиНаименованию(Страна); + Если ЗначениеЗаполнено(НайденнаяСтрана) Тогда + Возврат НайденнаяСтрана.УчастникЕАЭС; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий формы и модуля объекта вызываемые при внедрении подсистемы. @@ -1113,9 +1276,9 @@ ИмяЭлементаДляРазмещения = ?(ДополнительныеПараметры.Свойство("ИмяЭлементаДляРазмещения"), ДополнительныеПараметры.ИмяЭлементаДляРазмещения, "ГруппаКонтактнаяИнформация"); Иначе ИмяЭлементаДляРазмещения =?(ДополнительныеПараметры = Неопределено, "ГруппаКонтактнаяИнформация", ДополнительныеПараметры); - ОтложеннаяИнициализация = УдалитьОтложеннаяИнициализация; - ИсключаемыеВиды = УдалитьИсключаемыеВиды; - ПоложениеЗаголовкаКИ = УдалитьПоложениеЗаголовкаКИ; + ОтложеннаяИнициализация = УдалитьОтложеннаяИнициализация; + ИсключаемыеВиды = УдалитьИсключаемыеВиды; + ПоложениеЗаголовкаКИ = УдалитьПоложениеЗаголовкаКИ; КонецЕсли; Если ИсключаемыеВиды = Неопределено Тогда @@ -1127,13 +1290,11 @@ // Получим список видов КИ - СсылкаНаОбъект = Объект.Ссылка; - МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); - ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя(); - ГруппаВидовКИ = ГруппаВидовКонтактнойИнформацииОбъекта(СсылкаНаОбъект); - ИмяОбъекта = МетаданныеОбъекта.Имя; + СсылкаНаОбъект = Объект.Ссылка; + ГруппаВидовКИ = ГруппаВидовКонтактнойИнформацииОбъекта(СсылкаНаОбъект); ИспользуетсяКонтактнаяИнформация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВидовКИ, "Используется"); + Если ИспользуетсяКонтактнаяИнформация = Ложь Тогда // Добавим новые реквизиты Если МассивДобавляемыхРеквизитов.Количество() > 0 Тогда @@ -1157,8 +1318,11 @@ Возврат; КонецЕсли; - РеквизитыОбъекта = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты; - ЕстьКолонкаДействуетС = (РеквизитыОбъекта.Найти("ДействуетС") <> Неопределено); + МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); + ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя(); + ИмяОбъекта = МетаданныеОбъекта.Имя; + РеквизитыОбъекта = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты; + ЕстьКолонкаДействуетС = (РеквизитыОбъекта.Найти("ДействуетС") <> Неопределено); ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти = (РеквизитыОбъекта.Найти("ИдентификаторСтрокиТабличнойЧасти") <> Неопределено); Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда @@ -1229,7 +1393,7 @@ ТекстЗапроса = " ВЫБРАТЬ | КонтактнаяИнформация.Представление КАК Представление, | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, - | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, " + ТекстЗапросаИсторическаяИнформация + " + | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, " + ТекстЗапросаИсторическаяИнформация + " | КонтактнаяИнформация.Вид КАК Вид, | 0 КАК ИдентификаторСтрокиТабличнойЧасти |ПОМЕСТИТЬ @@ -1294,15 +1458,11 @@ Строка500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)); СозданныеРеквизиты = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); - ПредыдущийВид = Неопределено; - ПорядковыйНомер = 1; + ПредыдущийВид = Неопределено; + ПорядковыйНомер = 1; Для Каждого ОбъектКонтактнойИнформации Из КонтактнаяИнформация Цикл - Если ОбъектКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда - Продолжить; - КонецЕсли; - Если ОбъектКонтактнойИнформации.ЭтоРеквизитТабличнойЧасти Тогда ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; @@ -1324,10 +1484,10 @@ Если ТекущийВид <> ПредыдущийВид Тогда ИмяРеквизита = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3%4", - "КонтактнаяИнформацияПоле", - ИмяТабличнойЧасти, - СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x"), - ОбъектКонтактнойИнформации.Строки.Индекс(СтрокаКИ)); + "КонтактнаяИнформацияПоле", + ИмяТабличнойЧасти, + СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x"), + ОбъектКонтактнойИнформации.Строки.Индекс(СтрокаКИ)); ПутьРеквизитов = "Объект." + ИмяТабличнойЧасти; @@ -1343,6 +1503,11 @@ Иначе + Если ОбъектКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + ОбработатьСведенияКонтактнойИнформации(ОбъектКонтактнойИнформации, Форма); + Продолжить; + КонецЕсли; + ТекущийВид = ОбъектКонтактнойИнформации.Вид; Если ТекущийВид <> ПредыдущийВид Тогда @@ -1370,17 +1535,7 @@ СозданныеРеквизиты.Удалить(Индекс); КонецЕсли; - // При обнаружении ошибок распознавания не прерываем генерацию. - Попытка - ОбъектКонтактнойИнформации.Комментарий = КомментарийКонтактнойИнформации(ОбъектКонтактнойИнформации.ЗначенияПолей); - Исключение - ЗаписьЖурналаРегистрации(УправлениеКонтактнойИнформациейСлужебный.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , ОбъектКонтактнойИнформации.ЗначенияПолей, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Некорректный формат контактной информации.'"), , - ОбъектКонтактнойИнформации.ИмяРеквизита); - КонецПопытки; + ОбработатьСведенияКонтактнойИнформации(ОбъектКонтактнойИнформации, Форма); КонецЕсли; КонецЦикла; @@ -1390,7 +1545,7 @@ КонецЕсли; ПараметрыКонтактнойИнформации = ПараметрыВыводаКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, - ОтложеннаяИнициализация, ИсключаемыеВиды); + ОтложеннаяИнициализация, ИсключаемыеВиды); ПараметрыКонтактнойИнформации.Владелец = СсылкаНаОбъект; ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения = ТипПомещения; @@ -1444,7 +1599,7 @@ КонецЕсли; Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(СтрокаТабличнойЧастиКИ.ИмяРеквизита, - 2, Ложь); + 2, Ложь); ДобавитьРеквизитВОписание(Форма, СтрокаТабличнойЧастиКИ, Ложь, Истина,, ИмяЭлементаДляРазмещения); ПредыдущийВидТЧ = ВидТЧ; @@ -1458,7 +1613,7 @@ Если СтрокиТаблицы.Количество() = 1 Тогда СтрокаТаблицы = СтрокиТаблицы[0]; - СтрокаТаблицы[СтрокаТабличнойЧастиКИ.ИмяРеквизита] = СтрокаТабличнойЧастиКИ.Представление; + СтрокаТаблицы[СтрокаТабличнойЧастиКИ.ИмяРеквизита] = СтрокаТабличнойЧастиКИ.Представление; СтрокаТаблицы[СтрокаТабличнойЧастиКИ.ИмяРеквизита + "ЗначенияПолей"] = СтрокаТабличнойЧастиКИ.ЗначенияПолей; КонецЕсли; КонецЦикла; @@ -1488,7 +1643,7 @@ Иначе СледующаяСтрока = ?(СозданныеЭлементы.Количество() = 0, Неопределено, - ОпределитьСледующуюСтроку(Форма, КонтактнаяИнформация, СтрокаКИ)); + ОпределитьСледующуюСтроку(Форма, КонтактнаяИнформация, СтрокаКИ)); Если НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация Тогда ДобавитьСтрокуКонтактнойИнформации(Форма, СтрокаКИ, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ, КоличествоАдресов, СледующаяСтрока); @@ -1507,23 +1662,23 @@ Если Не ОтложеннаяИнициализация И Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].СписокДобавляемыхЭлементов.Количество() > 0 Тогда Описание = НСтр("ru = 'Добавить дополнительное поле контактной информации'"); - ГруппаКоманды = Группа("ГруппаКонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения, Форма, Описание, ИмяЭлементаДляРазмещения); + ГруппаКоманды = Группа("ГруппаКонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения, Форма, Описание, ИмяЭлементаДляРазмещения); ГруппаКоманды.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; - ИмяКоманды = "КонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения; - Команда = Форма.Команды.Добавить(ИмяКоманды); - Команда.Подсказка = Описание; + ИмяКоманды = "КонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения; + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Подсказка = Описание; Команда.Отображение = ОтображениеКнопки.КартинкаИТекст; - Команда.Картинка = БиблиотекаКартинок.ДобавитьЭлементСписка; - Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Команда.Картинка = БиблиотекаКартинок.ДобавитьЭлементСписка; + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); - Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаКоманды); + Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаКоманды); Кнопка.Доступность = НЕ Форма.Элементы[ИмяЭлементаДляРазмещения].ТолькоПросмотр; - Кнопка.Заголовок = НСтр("ru = 'Добавить'"); + Кнопка.Заголовок = НСтр("ru = 'Добавить'"); Команда.ИзменяетСохраняемыеДанные = Истина; - Кнопка.ИмяКоманды = ИмяКоманды; + Кнопка.ИмяКоманды = ИмяКоманды; Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(ИмяКоманды, 2, Ложь); Иначе ГруппаДляРазмещения = Форма.Элементы[ИмяЭлементаДляРазмещения]; @@ -1544,10 +1699,10 @@ | • в открывшейся форме ""Настройка формы"" в меню Еще выбрать пункт ""Установить стандартные настройки"".'"); Декорация = Форма.Элементы.Добавить("КонтактнаяИнформацияЗаглушка", Тип("ДекорацияФормы"), ГруппаДляРазмещения); - Декорация.Заголовок = ПредупреждениеОРазмещении; - Декорация.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; - Декорация.Подсказка = ТекстПодсказки; - Декорация.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст; + Декорация.Заголовок = ПредупреждениеОРазмещении; + Декорация.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; + Декорация.Подсказка = ТекстПодсказки; + Декорация.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст; Декорация.АвтоМаксимальнаяВысота = Ложь; КонецЕсли; КонецЕсли; @@ -1839,7 +1994,6 @@ СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки; ЗначенияПолей = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "ЗначенияПолей"]; - ЗначенияПолей = ?(ЗначениеЗаполнено(СтрокаТаблицы.ЗначенияПолей), СтрокаТаблицы.ЗначенияПолей, СтрокаТаблицы.Представление); ЗаписатьКонтактнуюИнформацию(Объект, ЗначенияПолей, ВидИнформации, ТипИнформации, ИдентификаторСтроки); @@ -1851,9 +2005,7 @@ КонецЕсли; ДействуетС = ?(СтрокаТаблицы.Свойство("ДействуетС"), СтрокаТаблицы.ДействуетС, Неопределено); - ЗначенияПолей = ?(ЗначениеЗаполнено(СтрокаТаблицы.ЗначенияПолей), СтрокаТаблицы.ЗначенияПолей, СтрокаТаблицы.Представление); - - ЗаписатьКонтактнуюИнформацию(Объект, ЗначенияПолей, ВидИнформации, ТипИнформации,, ДействуетС); + ЗаписатьКонтактнуюИнформацию(Объект, СтрокаТаблицы.ЗначенияПолей, ВидИнформации, ТипИнформации,, ДействуетС); КонецЕсли; ПредыдущийВид = ВидИнформации; @@ -1863,7 +2015,7 @@ КонецПроцедуры // Добавляет (удаляет) поле ввода или комментарий на форму, обновляя данные. -// Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы. +// Вызывается из модуля формы объекта-владельца контактной информации. // // Параметры: // Форма - УправляемаяФорма - Форма объекта-владельца, предназначенная для вывода контактной информации. @@ -1898,8 +2050,8 @@ КомментарийПервыйЭлемент = НайденнаяСтрокаПервыйЭлемент.Комментарий; НайденнаяСтрокаПервыйЭлемент.Комментарий = НайденнаяСтрокаВторойЭлемент.Комментарий; НайденнаяСтрокаВторойЭлемент.Комментарий = КомментарийПервыйЭлемент; - Форма.Элементы[Результат.ПервыйЭлемент].Подсказка = НайденнаяСтрокаПервыйЭлемент.Комментарий; - Форма.Элементы[Результат.ВторойЭлемент].Подсказка = НайденнаяСтрокаВторойЭлемент.Комментарий; + Форма.Элементы[Результат.ПервыйЭлемент].РасширеннаяПодсказка.Заголовок = НайденнаяСтрокаПервыйЭлемент.Комментарий; + Форма.Элементы[Результат.ВторойЭлемент].РасширеннаяПодсказка.Заголовок = НайденнаяСтрокаВторойЭлемент.Комментарий; КонецЕсли; Если Результат.Свойство("ОбновитьКонтекстноеМеню") Тогда @@ -1948,11 +2100,12 @@ // Обработчик подписки события "ОбработкаЗаполнения" для документов. // // Параметры: -// Источник - Произвольный - Объект, содержащий контактную информацию. -// ДанныеЗаполнения - Структура - Данные с контактной информацией для заполнения объекта. -// СтандартнаяОбработка - Булево - Не используется. +// Источник - Произвольный - Объект, содержащий контактную информацию. +// ДанныеЗаполнения - Структура - Данные с контактной информацией для заполнения объекта. +// ТекстЗаполнения - Строка, Неопределено - Данные заполнения реквизита Наименование. +// СтандартнаяОбработка - Булево - Не используется. // -Процедура ОбработкаЗаполненияКонтактнойИнформацииДокумента(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт +Процедура ОбработкаЗаполненияКонтактнойИнформацииДокумента(Источник, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт ОбработкаЗаполненияКонтактнойИнформацииОбъекта(Источник, ДанныеЗаполнения); @@ -3191,7 +3344,6 @@ Процедура ИзменитьКомментарий(Форма, ИмяРеквизита, ИмяЭлементаДляРазмещения) ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); - Если ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.НайтиПоЗначению(ИмяРеквизита) = Неопределено Тогда Возврат; КонецЕсли; @@ -3202,7 +3354,7 @@ НайденнаяСтрока = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; ПолеВвода = Форма.Элементы.Найти(ИмяРеквизита); - ПолеВвода.Подсказка = НайденнаяСтрока.Комментарий; + ПолеВвода.РасширеннаяПодсказка.Заголовок = НайденнаяСтрока.Комментарий; КонецПроцедуры @@ -3247,15 +3399,15 @@ ИмяСледующегоРеквизита = ТаблицаКонтактнойИнформации[ИндексДобавляемойСтроки].ИмяРеквизита; КонецЕсли; - НоваяСтрока = ТаблицаКонтактнойИнформации.Вставить(ИндексДобавляемойСтроки); + НоваяСтрока = ТаблицаКонтактнойИнформации.Вставить(ИндексДобавляемойСтроки); ИмяРеквизита = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3", - "КонтактнаяИнформацияПоле", - СтрЗаменить(ДобавляемыйВид.УникальныйИдентификатор(), "-", "x"), - КоличествоСтрокВида + 1); - НоваяСтрока.ИмяРеквизита = ИмяРеквизита; - НоваяСтрока.Вид = ДобавляемыйВид; - НоваяСтрока.Тип = ИнформацияОВидеКИ.Тип; - НоваяСтрока.ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения; + "КонтактнаяИнформацияПоле", + СтрЗаменить(ДобавляемыйВид.УникальныйИдентификатор(), "-", "x"), + КоличествоСтрокВида + 1); + НоваяСтрока.ИмяРеквизита = ИмяРеквизита; + НоваяСтрока.Вид = ДобавляемыйВид; + НоваяСтрока.Тип = ИнформацияОВидеКИ.Тип; + НоваяСтрока.ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения; НоваяСтрока.ЭтоРеквизитТабличнойЧасти = Ложь; МассивДобавляемыхРеквизитов = Новый Массив; @@ -3297,17 +3449,50 @@ Форма.Элементы.Переместить(ГруппаСтроки, Родитель, СледующаяГруппа); КонецЕсли; - ПолеВвода = ПолеВвода(Форма, ГруппаСтроки, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ, ОбязательноеЗаполнение); + // Обработка ситуации, когда на форме выводится одновременно множественная динамическая и статическая контактная информация. + ИмяСледующейГруппыТекущегоВида = "Группа" + ИмяРеквизита; + Если Форма.Элементы.Найти(ИмяСледующейГруппыТекущегоВида) <> Неопределено Тогда + + Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита); + НайденныеСтрокиТекущегоВида = ТаблицаКонтактнойИнформации.НайтиСтроки(Отбор); + Если НайденныеСтрокиТекущегоВида.Количество() > 0 Тогда + ТекущийВид = НайденныеСтрокиТекущегоВида[0].Вид; + КонецЕсли; + + ИндексПредыдущейГруппыВида = Родитель.ПодчиненныеЭлементы.Индекс(Форма.Элементы[ИмяСледующейГруппыТекущегоВида]) - 1; + Если ИндексПредыдущейГруппыВида >= 0 Тогда + ПредыдущаяГруппаВида = Родитель.ПодчиненныеЭлементы.Получить(ИндексПредыдущейГруппыВида); + + Если ПредыдущаяГруппаВида <> Неопределено Тогда + + Отбор = Новый Структура("ИмяРеквизита", СтрЗаменить(ПредыдущаяГруппаВида.Имя, "Группа", "")); + НайденныеСтрокиПредыдущегоВида = ТаблицаКонтактнойИнформации.НайтиСтроки(Отбор); + Если НайденныеСтрокиПредыдущегоВида.Количество() > 0 Тогда + ПредыдущийВид = НайденныеСтрокиПредыдущегоВида[0].Вид; + КонецЕсли; + + Если ТекущийВид <> ПредыдущийВид Тогда + ЭтоНовыйВидКИ = Истина; + КонецЕсли; + КонецЕсли; + Иначе + ЭтоНовыйВидКИ = Истина; + КонецЕсли; + КонецЕсли; + + ПолеВвода = СоздатьПолеВвода(Форма, ГруппаСтроки, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ, ОбязательноеЗаполнение); + Если ЕстьКомментарий Тогда + ПолеВвода.РасширеннаяПодсказка.Заголовок = ИнформацияОВидеКИ.Комментарий; + ПолеВвода.РасширеннаяПодсказка.АвтоМаксимальнаяШирина = Ложь; + ПолеВвода.РасширеннаяПодсказка.МаксимальнаяШирина = ПолеВвода.Ширина; + ПолеВвода.РасширеннаяПодсказка.Ширина = ПолеВвода.Ширина; + КонецЕсли; Если КоличествоАдресов = Неопределено Тогда ОтборПоТипу = Новый Структура("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); КоличествоАдресов = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоТипу).Количество(); КонецЕсли; - Если ЕстьКомментарий Тогда - ПолеВвода.Подсказка = Результат.Комментарий; - КонецЕсли; - СоздатьДействие(Форма, ИнформацияОВидеКИ, ИмяРеквизита, ГруппаСтроки, КоличествоАдресов, ЕстьКомментарий, ИмяЭлементаДляРазмещения); Если Не ЭтоНовыйВидКИ Тогда @@ -3331,7 +3516,7 @@ КонецПроцедуры -Функция ПолеВвода(Форма, Родитель, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения,ЭтоНовыйВидКИ = Ложь, ОбязательноеЗаполнение = Ложь) +Функция СоздатьПолеВвода(Форма, Родитель, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения,ЭтоНовыйВидКИ = Ложь, ОбязательноеЗаполнение = Ложь) ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); @@ -3382,7 +3567,6 @@ КонецЕсли; Элемент.ПоложениеЗаголовка = ?(ЗаголовокСлева, ПоложениеЗаголовкаЭлементаФормы.Лево, ПоложениеЗаголовкаЭлементаФормы.Верх); - Если ЗаголовокСлева Тогда Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево; Иначе @@ -4147,6 +4331,39 @@ КонецФункции +// Получение и коррекция контактной информации +Процедура ОбработатьСведенияКонтактнойИнформации(СтрокаКИ, Форма) + + РезультатПреобразования = Новый Структура(); + Если ПустаяСтрока(СтрокаКИ.Представление) И ЗначениеЗаполнено(СтрокаКИ.ЗначенияПолей) Тогда + СтрокаКИ.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид); + Результат = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид, РезультатПреобразования, СтрокаКИ.Представление); + Иначе + Результат = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид, РезультатПреобразования, СтрокаКИ.Представление); + КонецЕсли; + + СтрокаКИ.Комментарий = ?(ЗначениеЗаполнено(Результат.Комментарий), Результат.Комментарий, ""); + + Если РезультатПреобразования.Количество() > 0 Тогда + + Если Не РезультатПреобразования.Свойство("СведенияИсправлены") ИЛИ РезультатПреобразования.СведенияИсправлены = Ложь Тогда + Возврат; + КонецЕсли; + + Если РезультатПреобразования.СведенияИсправлены Тогда + СтрокаКИ.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(Результат); + КонецЕсли; + + Если РезультатПреобразования.Свойство("ТекстОшибки") Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита); + КонецЕсли; + + Форма.Модифицированность = Истина; + + КонецЕсли; + +КонецПроцедуры + // Проверяет контактную информацию адреса и сообщает об ошибках. Возвращает флаг наличия ошибок. // // Параметры: @@ -4526,13 +4743,17 @@ КонецФункции -Функция ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация) +Функция ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата) Если ВидКонтактнойИнформации.РазрешитьВводНесколькихЗначений Тогда Возврат Ложь; КонецЕсли; Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда + Отбор.Вставить("ДействуетС", Дата); + КонецЕсли; + НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор); Возврат НайденныеСтроки.Количество() > 0; @@ -4549,7 +4770,7 @@ КонецПроцедуры -Процедура ОбработатьСтрокуКонтактнойИнформации(СтрокаКонтактнойИнформации, Периодическая) +Процедура ОбработатьСтрокуКонтактнойИнформации(СтрокаКонтактнойИнформации) Если ПустаяСтрока(СтрокаКонтактнойИнформации.Представление) И ПустаяСтрока(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда @@ -4569,12 +4790,6 @@ СтрокаКонтактнойИнформации.Тип = СтрокаКонтактнойИнформации.Вид.Тип; КонецЕсли; - Если Периодическая - И НЕ ЗначениеЗаполнено(СтрокаКонтактнойИнформации.Дата) - И СтрокаКонтактнойИнформации.Вид.ХранитьИсториюИзменений Тогда - СтрокаКонтактнойИнформации.Дата = ТекущаяДатаСеанса(); - КонецЕсли; - КонецПроцедуры // Приводит код страны к единому виду - строка длиной три символа. @@ -4600,52 +4815,65 @@ ВсеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; НайденныеСтроки = ВсеСтроки.НайтиСтроки( Новый Структура("Тип, ЭтоРеквизитТабличнойЧасти", Перечисления.ТипыКонтактнойИнформации.Адрес, Ложь) ); + ОбщееКоличествоКоманд = 0; Для Каждого СтрокаКИ Из ВсеСтроки Цикл - Если СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - ЭлементФормы = Форма.Элементы.Найти("ПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); - ЭлементФормыКонтекстноеПодменю = Форма.Элементы.Найти("КонтекстноеПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); - Если ЭлементФормыКонтекстноеПодменю <> Неопределено Тогда - - Для Каждого Адрес Из НайденныеСтроки Цикл - Если НЕ Адрес.ЭтоИсторическаяКонтактнаяИнформация - И Адрес.ИмяРеквизита <> СтрокаКИ.ИмяРеквизита Тогда - Если ЭлементФормы <> Неопределено Тогда - ИмяКоманды = "МенюПодменюАдрес" + СтрокаКИ.ИмяРеквизита + "_" + Адрес.ИмяРеквизита; - Кнопка = Форма.Элементы.Найти(ИмяКоманды); - Если Кнопка = Неопределено Тогда - Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ЭлементФормы); - Команда = Форма.Команды.Добавить(ИмяКоманды); - Команда.Подсказка = НСтр("ru = 'Скопировать адрес'"); - Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; - Команда.ИзменяетСохраняемыеДанные = Истина; - Кнопка.ИмяКоманды = ИмяКоманды; - - ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); - ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); - КонецЕсли; - Кнопка.Заголовок = Адрес.Представление; - Кнопка.Видимость = ЗначениеЗаполнено(Адрес.Представление); - КонецЕсли; - ИмяКоманды = "МенюПодменюАдрес" + СтрокаКИ.ИмяРеквизита + "_" + Адрес.ИмяРеквизита +"_"; - Кнопка = Форма.Элементы.Найти(ИмяКоманды); - Если Кнопка = Неопределено Тогда - Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ЭлементФормыКонтекстноеПодменю); - Кнопка.Заголовок = Адрес.Представление; - Команда = Форма.Команды.Добавить(ИмяКоманды); - Команда.Подсказка = НСтр("ru = 'Скопировать адрес'"); - Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; - Команда.ИзменяетСохраняемыеДанные = Истина; - Кнопка.ИмяКоманды = ИмяКоманды; - - ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); - ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); - КонецЕсли; - Кнопка.Заголовок = Адрес.Представление; - Кнопка.Видимость = ЗначениеЗаполнено(Адрес.Представление); + Если ОбщееКоличествоКоманд > 50 Тогда // Ограничение для большого количества адресов на форме + Прервать; + КонецЕсли; + Если СтрокаКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + Продолжить; + КонецЕсли; + ЭлементФормы = Форма.Элементы.Найти("ПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); + ЭлементФормыКонтекстноеПодменю = Форма.Элементы.Найти("КонтекстноеПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); + Если ЭлементФормыКонтекстноеПодменю <> Неопределено Тогда + + КоличествоКомандВПодменю = 0; + Для Каждого Адрес Из НайденныеСтроки Цикл + Если КоличествоКомандВПодменю > 7 Тогда // Ограничение для большого количества адресов на форме + Прервать; + КонецЕсли; + Если Адрес.ЭтоИсторическаяКонтактнаяИнформация Или Адрес.ИмяРеквизита = СтрокаКИ.ИмяРеквизита Тогда + Продолжить; + КонецЕсли; + Если ЭлементФормы <> Неопределено Тогда + ИмяКоманды = "МенюПодменюАдрес" + СтрокаКИ.ИмяРеквизита + "_" + Адрес.ИмяРеквизита; + Кнопка = Форма.Элементы.Найти(ИмяКоманды); + Если Кнопка = Неопределено Тогда + Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ЭлементФормы); + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Подсказка = НСтр("ru = 'Скопировать адрес'"); + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Команда.ИзменяетСохраняемыеДанные = Истина; + Кнопка.ИмяКоманды = ИмяКоманды; + ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); + ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); КонецЕсли; - КонецЦикла; - КонецЕсли; + Кнопка.Заголовок = Адрес.Представление; + Кнопка.Видимость = ЗначениеЗаполнено(Адрес.Представление); + + КоличествоКомандВПодменю = КоличествоКомандВПодменю + 1; + + КонецЕсли; + ИмяКоманды = "МенюПодменюАдрес" + СтрокаКИ.ИмяРеквизита + "_" + Адрес.ИмяРеквизита +"_"; + Кнопка = Форма.Элементы.Найти(ИмяКоманды); + Если Кнопка = Неопределено Тогда + Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ЭлементФормыКонтекстноеПодменю); + Кнопка.Заголовок = Адрес.Представление; + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Подсказка = НСтр("ru = 'Скопировать адрес'"); + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Команда.ИзменяетСохраняемыеДанные = Истина; + Кнопка.ИмяКоманды = ИмяКоманды; + + ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); + ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); + КонецЕсли; + Кнопка.Заголовок = Адрес.Представление; + Кнопка.Видимость = ЗначениеЗаполнено(Адрес.Представление); + + КонецЦикла; + ОбщееКоличествоКоманд = ОбщееКоличествоКоманд + КоличествоКомандВПодменю; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index f52f6aac3..a6f4786f2 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -139,26 +139,39 @@ Возврат; ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "Команда") Тогда + ИмяРеквизита = СтрЗаменить(ИмяКоманды, "Команда", ""); КомандаКонтекстногоМеню = Неопределено; + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "МенюПодменюАдрес") Тогда - ИмяРеквизита = СтрЗаменить(ИмяКоманды, "МенюПодменюАдрес", ""); - ИмяРеквизитаСтруктура = СтрРазделить(ИмяРеквизита, "_"); - ИмяРеквизитаИсточник = ИмяРеквизитаСтруктура[0]; - ИмяРеквизита = ИмяРеквизитаСтруктура[1]; + + ИмяРеквизита = СтрЗаменить(ИмяКоманды, "МенюПодменюАдрес", ""); + Позиция = СтрНайти(ИмяРеквизита, "_КонтактнаяИнформацияПоле"); + ИмяРеквизитаИсточник = Лев(ИмяРеквизита, Позиция -1); + ИмяРеквизита = Сред(ИмяРеквизита, Позиция + 1); КомандаКонтекстногоМеню = Неопределено; + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "КартаЯндексМеню") ИЛИ СтрНачинаетсяС(ИмяКоманды, "КартаGoogleМеню") Тогда + КомандаКонтекстногоМеню = КомандаКонтекстногоМеню(ИмяКоманды); ИмяРеквизита = Сред(КомандаКонтекстногоМеню.ИмяРеквизита, 5); + Иначе + КомандаКонтекстногоМеню = КомандаКонтекстногоМеню(ИмяКоманды); ИмяРеквизита = КомандаКонтекстногоМеню.ИмяРеквизита; + КонецЕсли; Результат = Новый Структура("ИмяРеквизита", ИмяРеквизита); - НайденнаяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0]; - ТипКонтактнойИнформации = НайденнаяСтрока.Тип; + НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат); + Если НайденныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НайденнаяСтрока = НайденныеСтроки[0]; + ТипКонтактнойИнформации = НайденнаяСтрока.Тип; ИмяЭлементаДляРазмещения = НайденнаяСтрока.ИмяЭлементаДляРазмещения; Результат.Вставить("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения); @@ -184,6 +197,7 @@ КонецЕсли; КонецЕсли; Результат = Новый Структура("ПоменятьМестамиЭлементы, ПервыйЭлемент, ВторойЭлемент", Истина, ПервыйЭлемент, ВторойЭлемент); + Форма.ТекущийЭлемент = Форма.Элементы[ВторойЭлемент]; ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); КонецЕсли; @@ -195,7 +209,8 @@ Форма[СтрокаПотребитель.ИмяРеквизита] = НайденнаяСтрока.Представление; Форма.Модифицированность = Истина; - Результат = Новый Структура("ОбновитьКонтекстноеМеню, ИмяЭлементаДляРазмещения", Истина, НайденнаяСтрока.ИмяЭлементаДляРазмещения); + Результат = Новый Структура("ОбновитьКонтекстноеМеню, ИмяРеквизита, ИмяЭлементаДляРазмещения", + Истина, СтрокаПотребитель.ИмяРеквизита, НайденнаяСтрока.ИмяЭлементаДляРазмещения); ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда @@ -505,9 +520,8 @@ СтрокаЗапуска = ИмяПротокола + ":" + НомерТелефона; - Оповещение = Новый ОписаниеОповещения("СовершитьЗвонок", ЭтотОбъект, СтрокаЗапуска); - ТекстСообщения = НСтр("ru = 'Для совершения звонка необходимо установить расширение работы с файлами.'"); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); + Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска, Оповещение); КонецПроцедуры @@ -560,9 +574,9 @@ КонецЕсли; Если СтрНайти(АдресСсылки, "://") > 0 Тогда - ПерейтиПоНавигационнойСсылке(АдресСсылки); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресСсылки); Иначе - ПерейтиПоНавигационнойСсылке("http://" + АдресСсылки); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://" + АдресСсылки); КонецЕсли; КонецПроцедуры @@ -580,7 +594,7 @@ СтрокаЗапуска = "https://maps.yandex.ru/?text=" + АдресКодированный; КонецЕсли; - ПерейтиПоНавигационнойСсылке(СтрокаЗапуска); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска); КонецПроцедуры @@ -597,7 +611,7 @@ СписокКонтактнойИнформации = Новый Массив; Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл - КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС"); + КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС, Комментарий"); ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); КонецЦикла; @@ -745,7 +759,7 @@ КонецЕсли; ДанныеЗаполнения = ДополнительныеПараметры.ДанныеЗаполнения; - НоваяСтрока = ДополнительныеПараметры.ДанныеСтроки; + ДанныеНаФорме = ДополнительныеПараметры.ДанныеСтроки; Результат = ДополнительныеПараметры.Результат; Элемент = ДополнительныеПараметры.Элемент; Форма = ДополнительныеПараметры.Форма; @@ -754,20 +768,20 @@ ЗначенияПолей = РезультатЗакрытия.КонтактнаяИнформация; Комментарий = РезультатЗакрытия.Комментарий; - Если НоваяСтрока.Свойство("ХранитьИсториюИзменений") И НоваяСтрока.ХранитьИсториюИзменений Тогда + Если ДанныеНаФорме.Свойство("ХранитьИсториюИзменений") И ДанныеНаФорме.ХранитьИсториюИзменений Тогда КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = ДанныеЗаполнения.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - Отбор = Новый Структура("Вид", НоваяСтрока.Вид); + Отбор = Новый Структура("Вид", ДанныеНаФорме.Вид); НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); Для Каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации); КонецЦикла; - Отбор = Новый Структура("Вид", НоваяСтрока.Вид); + Отбор = Новый Структура("Вид", ДанныеНаФорме.Вид); НайденныеСтроки = РезультатЗакрытия.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); ЭтоИсторическаяКонтактнаяИнформация = Ложь; ПоследниеЗначениеПолей = ""; - Если НайденныеСтроки.Количество() > 1 Тогда + Если НайденныеСтроки.Количество() > 1 Тогда СтрокаСДействующимАдресом = Неопределено; МинимальнаяДата = Неопределено; @@ -808,7 +822,7 @@ НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, НайденныеСтроки[0],, "ДействуетС"); НоваяКонтактнаяИнформация.ИмяЭлементаДляРазмещения = ДополнительныеПараметры.ИмяЭлементаРазмещения; - НоваяСтрока.ДействуетС = Дата(1, 1, 1); + ДанныеНаФорме.ДействуетС = Дата(1, 1, 1); КонецЕсли; КонецЕсли; @@ -817,26 +831,11 @@ ДанныеЗаполнения[Элемент.Имя + "ЗначенияПолей"] = РезультатЗакрытия.КонтактнаяИнформация; Иначе - Если ПустаяСтрока(НоваяСтрока.Комментарий) И Не ПустаяСтрока(РезультатЗакрытия.Комментарий) Тогда - Результат.Вставить("ЭтоДобавлениеКомментария", Истина); - - ИначеЕсли Не ПустаяСтрока(НоваяСтрока.Комментарий) И ПустаяСтрока(РезультатЗакрытия.Комментарий) Тогда - Результат.Вставить("ЭтоДобавлениеКомментария", Ложь); - - Иначе - Если Не ПустаяСтрока(НоваяСтрока.Комментарий) Тогда - ЭлементКомментария = Форма.Элементы.Найти("Комментарий" + Элемент.Имя); - Если ЭлементКомментария <> Неопределено Тогда - ЭлементКомментария.Заголовок = РезультатЗакрытия.Комментарий; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - Результат.Вставить("ИмяЭлементаДляРазмещения", ДополнительныеПараметры.ИмяЭлементаРазмещения); + Форма.Элементы.Найти(Элемент.Имя).РасширеннаяПодсказка.Заголовок = Комментарий; - НоваяСтрока.Представление = ТекстПредставления; - НоваяСтрока.ЗначенияПолей = ЗначенияПолей; - НоваяСтрока.Комментарий = Комментарий; + ДанныеНаФорме.Представление = ТекстПредставления; + ДанныеНаФорме.ЗначенияПолей = ЗначенияПолей; + ДанныеНаФорме.Комментарий = Комментарий; КонецЕсли; Если РезультатЗакрытия.Свойство("АдресВВидеГиперссылки") @@ -872,8 +871,15 @@ ОбновитьКонтактнуюИнформациюФормы(ДополнительныеПараметры.Форма, Результат); КонецПроцедуры -Процедура ПослеЗапускаПриложения(ВыбранныйЭлемент, Параметры) Экспорт - // Процедура заглушка, т.к. НачатьЗапускПриложения требуется наличие обработчика оповещения. +Процедура ПослеЗапускаПриложения(ПриложениеЗапущено, Параметры) Экспорт + + Если Не ПриложениеЗапущено Тогда + СтрокаСПредупреждением = Новый ФорматированнаяСтрока( + НСтр("ru = 'Для совершения звонка требуется установить программу телефонии, например'"), + " ", Новый ФорматированнаяСтрока("Skype",,,, "http://www.skype.com"), "."); + ПоказатьПредупреждение(Неопределено, СтрокаСПредупреждением); + КонецЕсли; + КонецПроцедуры ////////////////////////////////////////////////////////////////////////////////////////////////// @@ -881,7 +887,7 @@ // Завершение модального диалога создания письма. Процедура СоздатьПисьмоПоКонтактнойИнформацииЗавершение(Действие, АдресПочты) Экспорт - ПерейтиПоНавигационнойСсылке("mailto:" + АдресПочты); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("mailto:" + АдресПочты); КонецПроцедуры @@ -923,27 +929,8 @@ КонецЕсли; #КонецЕсли - Оповещение = Новый ОписаниеОповещения("ЗапускSkype", ЭтотОбъект, СтрокаЗапуска); - ТекстСообщения = НСтр("ru = 'Для запуска Skype необходимо установить расширение работы с файлами.'"); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); - -КонецПроцедуры - -Процедура ЗапускSkype(РасширениеПодключено, СтрокаЗапуска) Экспорт - - Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, СтрокаЗапуска); - КонецЕсли; - -КонецПроцедуры - -Процедура СовершитьЗвонок(РасширениеПодключено, СтрокаЗапуска) Экспорт - - Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, СтрокаЗапуска); - КонецЕсли; + Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска, Оповещение); КонецПроцедуры @@ -1166,7 +1153,9 @@ КонецЕсли; КонецЕсли; - Возврат ""; + // Считаем что для Linux и MacOS всегда есть программа. + // если будет ошибка - она будет обработана в момент запуска. + Возврат ИмяПротокола; КонецФункции Функция ИмяПротоколаЗарегистрированоВРеестре(ИмяПротокола) diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index fdee485d0..3ee83277c 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -163,6 +163,7 @@ Возврат РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу(ТипКИ, ФорматАдреса); Иначе + Если ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда Возврат СтруктураПолейАдреса(); ИначеЕсли ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда @@ -172,7 +173,6 @@ КонецЕсли; КонецЕсли; - КонецФункции diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl index 93c40bc48..6f92727f2 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl @@ -215,7 +215,7 @@ |До завершения обработки данные документов будут отображаться некорректно.'"); Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.1.72"; + Обработчик.Версия = "2.4.3.4"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("dfc6a0fa-7c7b-4096-9d04-2c67d5eb17a4"); Обработчик.Процедура = "Справочники.СтраныМира.ОбновитьСтраныМираПоОКСМ"; Обработчик.РежимВыполнения = "Отложенно"; @@ -385,6 +385,7 @@ Страна.Записать(); ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); Инфо = ИнформацияОбОшибке(); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), Выборка.Код, Выборка.Наименование, КраткоеПредставлениеОшибки(Инфо)); @@ -392,7 +393,6 @@ УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); ВсеОшибки = ВсеОшибки + Символы.ПС + ТекстОшибки; - ОтменитьТранзакцию(); КонецПопытки; КонецЦикла; @@ -692,7 +692,7 @@ Возврат Результат; КонецФункции -Функция СобытиеЖурналаРегистрации() Экспорт +Функция СобытиеЖурналаРегистрации() Возврат НСтр("ru = 'Контактная информация'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); @@ -739,10 +739,15 @@ // Возвращаемое значение: // ОбъектXDTO - контактная информация, соответствующая XDTO-пакету КонтактнаяИнформация. // -Функция КонтактнаяИнформацияИзXML(Знач Текст, Знач ОжидаемыйВид = Неопределено, РезультатПреобразования = Неопределено) Экспорт +Функция КонтактнаяИнформацияИзXML(Знач Текст, Знач ОжидаемыйВид = Неопределено, РезультатПреобразования = Неопределено, Знач Представление = "") Экспорт ОжидаемыйТип = ТипВидаКонтактнойИнформации(ОжидаемыйВид); + Если РезультатПреобразования = Неопределено Или ТипЗнч(РезультатПреобразования) <> Тип("Структура") Тогда + РезультатПреобразования = Новый Структура; + КонецЕсли; + РезультатПреобразования.Вставить("СведенияИсправлены", Ложь); + ПеречислениеАдрес = Перечисления.ТипыКонтактнойИнформации.Адрес; ПеречислениеАдресЭлектроннойПочты = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; ПеречислениеSkype = Перечисления.ТипыКонтактнойИнформации.Skype; @@ -766,35 +771,53 @@ Попытка Результат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Исключение + + ОписаниеПричиныОшибки = НСтр("ru='Сведения контактной информации были восстановлены после сбоя.'"); + Если ЗначениеЗаполнено(Представление) Тогда + Результат = КонтактнаяИнформацияXDTOПоПредставлению(Представление, ОжидаемыйВид); + ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(Представление, ОжидаемыйВид); + НовоеПредставление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(ЗначенияПолей, ОжидаемыйВид); + Если СтрСравнить(НовоеПредставление, Представление) <> 0 Тогда + ТекстОшибки = ОписаниеПричиныОшибки; + РезультатПреобразования.Вставить("ТекстОшибки", ТекстОшибки); + КонецЕсли; + + КонецЕсли; + // Некорректный формат XML ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , Текст, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - Если ТипЗнч(ОжидаемыйВид) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректный формат XML контактной информации для ""%1"", значения полей были очищены.'"), - Строка(ОжидаемыйВид)); - Иначе - ТекстОшибки = НСтр("ru = 'Некорректный формат XML контактной информации, значения полей были очищены.'"); - КонецЕсли; + УровеньЖурналаРегистрации.Предупреждение, , Текст, ОписаниеПричиныОшибки + Символы.ПС + + ИнформацияОбОшибке().Описание); + + РезультатПреобразования.Вставить("СведенияИсправлены", Истина); КонецПопытки; - Если ТекстОшибки = Неопределено Тогда - // Контролируем соответствие типов. - НайденТип = ?(Результат.Состав = Неопределено, Неопределено, Результат.Состав.Тип()); - Если ОжидаемыйТип = ПеречислениеАдрес И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается адрес'"); - ИначеЕсли ОжидаемыйТип = ПеречислениеАдресЭлектроннойПочты И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда - ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается адрес электронной почты'"); - ИначеЕсли ОжидаемыйТип = ПеречислениеВебСтраница И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда - ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается веб-страница'"); - ИначеЕсли ОжидаемыйТип = ПеречислениеТелефон И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда - ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон'"); - ИначеЕсли ОжидаемыйТип = ПеречислениеФакс И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда - ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон'"); - ИначеЕсли ОжидаемыйТип = ПеречислениеSkype И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Skype") Тогда - ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается Skype'"); - ИначеЕсли ОжидаемыйТип = ПеречислениеДругое И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Прочее") Тогда - ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается ""другое""'"); + Если ТекстОшибки = Неопределено И ОжидаемыйТип <> Неопределено Тогда + + Если Результат = Неопределено Тогда + ТекстОшибки = СтрЗаменить(НСтр("ru='Сведения контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), + "%ОжидаемыйВид%", Строка(ОжидаемыйВид)); + Иначе + // Контролируем соответствие типов. + НайденТип = ?(Результат.Состав = Неопределено, Неопределено, Результат.Состав.Тип()); + + ШаблонСообщения = СтрЗаменить(НСтр("ru='Сведения %1 контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), + "%ОжидаемыйВид%", Строка(ОжидаемыйВид)); + Если ОжидаемыйТип = ПеречислениеАдрес И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='об адресе'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеАдресЭлектроннойПочты И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='электронной почты'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеВебСтраница И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='веб-страницы'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеТелефон И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о номере телефона'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеФакс И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о номере факса'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеSkype И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Skype") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о логине Skype'")); + ИначеЕсли ОжидаемыйТип = ПеречислениеДругое И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Прочее") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о дополнительной'")); + КонецЕсли; КонецЕсли; КонецЕсли; @@ -803,12 +826,6 @@ Возврат Результат; КонецЕсли; - // Проверим ошибку и вернем расширенную информацию. - Если РезультатПреобразования = Неопределено Тогда - ВызватьИсключение ТекстОшибки; - ИначеЕсли ТипЗнч(РезультатПреобразования) <> Тип("Структура") Тогда - РезультатПреобразования = Новый Структура; - КонецЕсли; РезультатПреобразования.Вставить("ТекстОшибки", ТекстОшибки); // Будет возвращен пустой объект. @@ -818,9 +835,11 @@ Если ТипЗнч(Текст) = Тип("СписокЗначений") Тогда Представление = ""; ЭтоНовый = Текст.Количество() = 0; - Иначе + ИначеЕсли ПустаяСтрока(Представление) Тогда Представление = Строка(Текст); ЭтоНовый = ПустаяСтрока(Текст); + Иначе + ЭтоНовый = Ложь; КонецЕсли; Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -870,20 +889,19 @@ Если ЭтоНовый Тогда Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); Иначе - Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) + Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) КонецЕсли; Иначе - ТекстОшибки = НСтр("ru = 'Сведения о виде контактной информации %1 были повреждены или некорректно заполнены, |т.к. обязательное поле тип не заполнено.'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ?(ЗначениеЗаполнено(ОжидаемыйВид), """" + ОжидаемыйВид.Наименование + """", "")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ?(ЗначениеЗаполнено(ОжидаемыйВид), """" + ОжидаемыйВид.Наименование + """", "")); + РезультатПреобразования.Вставить("ТекстОшибки", ТекстОшибки); КонецЕсли; Возврат Результат; КонецФункции - // Разбирает представление КИ и возвращает XDTO. // // Параметры: @@ -1123,7 +1141,8 @@ ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); ТипИнформации = Информация.Состав.Тип(); Если ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - Возврат ПредставлениеАдреса(Информация.Состав, ВидИнформации); + ПредставлениеАдреса = ПредставлениеАдреса(Информация.Состав, ВидИнформации); + Возврат ПредставлениеАдреса; ИначеЕсли ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда ПредставлениеТелефона = ПредставлениеТелефона(Информация.Состав); @@ -1150,7 +1169,7 @@ Возврат СокрЛП(Информация); КонецФункции -// Возвращает флаг того, что переданный адрес - российский. +// Возвращает флаг того, что переданный адрес - российский. // // Параметры: // XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. @@ -1351,7 +1370,7 @@ Запрос.УстановитьПараметр("КонтактнаяИнформация", КонтактнаяИнформация); РезультатЗапроса = Запрос.Выполнить(); - ВыборкаВид = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + ВыборкаВид = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаВид.Следующий() Цикл ВыборкаДетальныеЗаписи = ВыборкаВид.Выбрать(); @@ -1362,27 +1381,26 @@ Иначе ДействуетС = Дата(1,1,1); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Если ЗначениеЗаполнено(ВыборкаВид.ДействуетС) Тогда - ДействуетС = ВыборкаВид.ДействуетС; + Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ДействуетС) Тогда + ДействуетС = ВыборкаДетальныеЗаписи.ДействуетС; КонецЕсли; КонецЦикла; - Для каждого СтрокаСКонтактнойИнформацией Из КонтактнаяИнформация Цикл - Если СтрокаСКонтактнойИнформацией.Вид = ВыборкаВид.Вид - И СтрокаСКонтактнойИнформацией.ДействуетС = ДействуетС Тогда - СтрокаСКонтактнойИнформацией.ВидДляСписка = ВыборкаВид.Вид; - КонецЕсли; + НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВыборкаВид.Вид)); + Для каждого СтрокаСКонтактнойИнформацией Из НайденныеСтроки Цикл + СтрокаСКонтактнойИнформацией.ВидДляСписка = ?(СтрокаСКонтактнойИнформацией.ДействуетС = ДействуетС, + ВыборкаВид.Вид, Справочники.ВидыКонтактнойИнформации.ПустаяСсылка()); КонецЦикла; КонецЕсли; ИначеЕсли ВыборкаВид.Количество > 1 Тогда - СтрокаТаблиц = КонтактнаяИнформация.Добавить(); - СтрокаТаблиц.ВидДляСписка = ВыборкаВид.Вид; - Разделитель = ""; - Представление = ""; + ЭлементыКонтактнойИнформации = Новый Массив; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Представление = Представление +Разделитель + ВыборкаДетальныеЗаписи.Представление; - Разделитель = ", "; + Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Представление) Тогда + ЭлементыКонтактнойИнформации.Добавить(ВыборкаДетальныеЗаписи.Представление); + КонецЕсли; КонецЦикла; - СтрокаТаблиц.Представление = Представление; + СтрокаТаблиц = КонтактнаяИнформация.Добавить(); + СтрокаТаблиц.ВидДляСписка = ВыборкаВид.Вид; + СтрокаТаблиц.Представление = СтрСоединить(ЭлементыКонтактнойИнформации, ", "); КонецЕсли; КонецЦикла; @@ -1673,10 +1691,10 @@ Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); - ИначеЕсли ОжидаемыйТип=Перечисления.ТипыКонтактнойИнформации.Факс Тогда + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); - ИначеЕсли ОжидаемыйТип=Неопределено Тогда + ИначеЕсли ОжидаемыйТип = Неопределено Тогда // Считаем телефоном Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl index 6878cbcba..acd238467 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl @@ -267,7 +267,7 @@ // Функция XSLT_СписокЗначенийВСтруктуру() Экспорт Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSL(" + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" | Неопределено Тогда - Продолжить; - Иначе - ТипыДокументов.Добавить(ТипДокумента); - КонецЕсли; - Если ПравоДоступа("Проведение", Метаданные.НайтиПоТипу(ТипДокумента)) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; -КонецФункции - Процедура СообщитьПечатнаяФормаНедоступна(Объект) ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Печать %1 не выполнена: выбранная печатная форма недоступна.'"), Объект); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Объект); diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index b658452f7..82ff846f3 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -45,7 +45,7 @@ НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); КонецПопытки; - + НастройкиСтраницыМакета = Макет; // Для обратной совместимости (изменен тип входного параметра функции). Если ТипЗнч(Макет) = Тип("Структура") Тогда НастройкиСтраницыМакета = Макет.НастройкиСтраницыМакета; @@ -68,7 +68,7 @@ КонецЦикла; КонецЕсли; // Запомнить вид просмотра документа. - Handler.Вставить("ViewType", COMОбъект.Application.ActiveWindow.View.Type); + Handler.Вставить("ViewType", COMОбъект.Application.ActiveWindow.View.Type); Возврат Handler; diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index eb405121d..0b36682e6 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -115,7 +115,7 @@ #Если Не ВебКлиент Тогда ПараметрыДокумента.SetValue(0, СвойствоЗначение(ServiceManager, "Hidden", Истина)); #КонецЕсли - + // Параметры открытия: отключение исполнения макросов. РежимЗапуска = СвойствоЗначение(ServiceManager, "MacroExecutionMode", diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl index e8d36585b..88b649ca0 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl @@ -53,7 +53,7 @@ // Возвращает истину, если есть право проведения хотя бы для одного документа. Функция ДоступноПравоПроведения(СписокДокументов) Экспорт - Возврат УправлениеПечатью.ДоступноПравоПроведения(СписокДокументов); + Возврат СтандартныеПодсистемыСервер.ДоступноПравоПроведения(СписокДокументов); КонецФункции // См. УправлениеПечатью.ПакетДокументов. diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index 969fe25dc..045014e99 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -876,6 +876,8 @@ Возврат Новый Массив; КонецЕсли; + ПолучатьДопСведения = ПолучатьДопСведения И ПравоДоступа("Чтение", Метаданные.РегистрыСведений.ДополнительныеСведения); + НаборыСвойствОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта( ВладелецСвойств); @@ -921,29 +923,42 @@ КонецФункции -// Возвращает значения дополнительных свойств объекта. +// Возвращает значения дополнительных свойств объектов. // // Параметры: -// ВладелецСвойств - Ссылка - например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя, ... -// ПолучатьДопРеквизиты - Булево - в результат включать дополнительные реквизиты. -// ПолучатьДопСведения - Булево - в результат включать дополнительные сведения. -// МассивСвойств - Массив - свойства: +// ОбъектыСоСвойствами - Массив - объекты, для которых нужно получить значения дополнительных свойств. +// - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура, +// ДокументСсылка.ЗаказПокупателя, ... +// ПолучатьДопРеквизиты - Булево - в результат включать дополнительные реквизиты. По умолчанию Истина. +// ПолучатьДопСведения - Булево - в результат включать дополнительные сведения. По умолчанию Истина. +// Свойства - Массив - свойства: // * ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - значения // которых следует получить. -// - Неопределено - получить значения всех свойств владельца. +// * Строка - уникальное имя дополнительного свойства. +// - Неопределено - по умолчанию, получить значения всех свойств владельца. +// // Возвращаемое значение: // ТаблицаЗначений - колонки: // * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство владельца. // * Значение - Произвольный - значения любого типа из описания типов свойства объекта метаданных: // "Метаданные.ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Тип". +// * ВладелецСвойств - ЛюбаяСсылка - ссылка на объект. // -Функция ПолучитьЗначенияСвойств(ВладелецСвойств, - ПолучатьДопРеквизиты = Истина, - ПолучатьДопСведения = Истина, - МассивСвойств = Неопределено) Экспорт +Функция ЗначенияСвойств(ОбъектыСоСвойствами, + ПолучатьДопРеквизиты = Истина, + ПолучатьДопСведения = Истина, + Свойства = Неопределено) Экспорт - Если МассивСвойств = Неопределено Тогда - МассивСвойств = ПолучитьСписокСвойств(ВладелецСвойств, ПолучатьДопРеквизиты, ПолучатьДопСведения); + ПолучатьДопСведения = ПолучатьДопСведения И ПравоДоступа("Чтение", Метаданные.РегистрыСведений.ДополнительныеСведения); + + Если ТипЗнч(ОбъектыСоСвойствами) = Тип("Массив") Тогда + ВладелецСвойств = ОбъектыСоСвойствами[0]; + Иначе + ВладелецСвойств = ОбъектыСоСвойствами; + КонецЕсли; + + Если Свойства = Неопределено Тогда + Свойства = ПолучитьСписокСвойств(ВладелецСвойств, ПолучатьДопРеквизиты, ПолучатьДопСведения); КонецЕсли; ИмяОбъектаСоСвойствами = ОбщегоНазначения.ИмяТаблицыПоСсылке(ВладелецСвойств); @@ -952,25 +967,31 @@ "ВЫБРАТЬ [РАЗРЕШЕННЫЕ] | ТаблицаСвойств.Свойство КАК Свойство, | ТаблицаСвойств.Значение КАК Значение, - | ТаблицаСвойств.ТекстоваяСтрока + | ТаблицаСвойств.ТекстоваяСтрока, + | ТаблицаСвойств.Ссылка КАК ВладелецСвойств |ИЗ | [ИмяОбъектаСоСвойствами].ДополнительныеРеквизиты КАК ТаблицаСвойств | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения - | ПО ТаблицаСвойств.Свойство = ДополнительныеРеквизитыИСведения.Ссылка + | ПО ДополнительныеРеквизитыИСведения.Ссылка = ТаблицаСвойств.Свойство |ГДЕ - | ТаблицаСвойств.Ссылка = &ВладелецСвойств - | И ТаблицаСвойств.Свойство В (&МассивСвойств)"; + | ТаблицаСвойств.Ссылка В (&ОбъектыСоСвойствами) + | И (ДополнительныеРеквизитыИСведения.Ссылка В (&Свойства) + | ИЛИ ДополнительныеРеквизитыИСведения.Имя В (&Свойства))"; ТекстЗапросаДопСведения = "ВЫБРАТЬ [РАЗРЕШЕННЫЕ] | ТаблицаСвойств.Свойство КАК Свойство, | ТаблицаСвойств.Значение КАК Значение, - | """" КАК ТекстоваяСтрока + | """" КАК ТекстоваяСтрока, + | ТаблицаСвойств.Объект КАК ВладелецСвойств |ИЗ | РегистрСведений.ДополнительныеСведения КАК ТаблицаСвойств + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения + | ПО ДополнительныеРеквизитыИСведения.Ссылка = ТаблицаСвойств.Свойство |ГДЕ - | ТаблицаСвойств.Объект = &ВладелецСвойств - | И ТаблицаСвойств.Свойство В (&МассивСвойств)"; + | ТаблицаСвойств.Объект В (&ОбъектыСоСвойствами) + | И (ДополнительныеРеквизитыИСведения.Ссылка В (&Свойства) + | ИЛИ ДополнительныеРеквизитыИСведения.Имя В (&Свойства))"; Запрос = Новый Запрос; @@ -989,8 +1010,8 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяОбъектаСоСвойствами]", ИмяОбъектаСоСвойствами); - Запрос.Параметры.Вставить("ВладелецСвойств", ВладелецСвойств); - Запрос.Параметры.Вставить("МассивСвойств", МассивСвойств); + Запрос.Параметры.Вставить("ОбъектыСоСвойствами", ОбъектыСоСвойствами); + Запрос.Параметры.Вставить("Свойства", Свойства); Запрос.Текст = ТекстЗапроса; Результат = Запрос.Выполнить().Выгрузить(); @@ -1000,7 +1021,7 @@ ТекстоваяСтрока = ЗначениеСвойства.ТекстоваяСтрока; Если Не ПустаяСтрока(ТекстоваяСтрока) Тогда Если РезультатСТекстовымиСтроками = Неопределено Тогда - РезультатСТекстовымиСтроками = Результат.Скопировать(,"Свойство"); + РезультатСТекстовымиСтроками = Результат.Скопировать(,"Свойство, ВладелецСвойств"); РезультатСТекстовымиСтроками.Колонки.Добавить("Значение"); РезультатСТекстовымиСтроками.ЗагрузитьКолонку(Результат.ВыгрузитьКолонку("Значение"), "Значение"); КонецЕсли; @@ -1010,7 +1031,27 @@ КонецЦикла; Возврат ?(РезультатСТекстовымиСтроками <> Неопределено, РезультатСТекстовымиСтроками, Результат); +КонецФункции + +// Возвращает значение дополнительного свойства объекта. +// +// Параметры: +// Объект - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура, +// ДокументСсылка.ЗаказПокупателя, ... +// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на +// дополнительный реквизит, значение которого нужно получить. +// - Строка - Имя дополнительного свойства. +// +// Возвращаемое значение: +// Произвольный - любое значение, допустимое для свойства. +// +Функция ЗначениеСвойства(Объект, Свойство) Экспорт + ПолучатьРеквизиты = УправлениеСвойствамиСлужебный.ЭтоОбъектМетаданныхСДополнительнымиРеквизитами(Объект.Метаданные()); + Результат = ЗначенияСвойств(Объект, ПолучатьРеквизиты, Истина, Свойство); + Если Результат.Количество() = 1 Тогда + Возврат Результат[0].Значение; + КонецЕсли; КонецФункции // Проверяет, есть ли у объекта свойство. @@ -1303,6 +1344,36 @@ КонецФункции +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ЗначенияСвойств или ЗначенияСвойства. +// Возвращает значения дополнительных свойств объекта. +// +// Параметры: +// ВладелецСвойств - Ссылка - например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя, ... +// ПолучатьДопРеквизиты - Булево - в результат включать дополнительные реквизиты. +// ПолучатьДопСведения - Булево - в результат включать дополнительные сведения. +// МассивСвойств - Массив - свойства: +// * ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - значения +// которых следует получить. +// - Неопределено - получить значения всех свойств владельца. +// Возвращаемое значение: +// ТаблицаЗначений - колонки: +// * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство владельца. +// * Значение - Произвольный - значения любого типа из описания типов свойства объекта метаданных: +// "Метаданные.ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Тип". +// +Функция ПолучитьЗначенияСвойств(ВладелецСвойств, + ПолучатьДопРеквизиты = Истина, + ПолучатьДопСведения = Истина, + МассивСвойств = Неопределено) Экспорт + + Возврат ЗначенияСвойств(ВладелецСвойств, ПолучатьДопРеквизиты, ПолучатьДопСведения, МассивСвойств); + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index 20dc62b4d..113c932f4 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -198,38 +198,32 @@ Процедура ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты) Экспорт Если УправлениеСвойствами.ИспользоватьДопРеквизиты(Объект.Ссылка) Тогда - Для Каждого ЗначениеСвойства Из УправлениеСвойствами.ПолучитьЗначенияСвойств(Объект.Ссылка, Истина, Ложь) Цикл + Для Каждого ЗначениеСвойства Из УправлениеСвойствами.ЗначенияСвойств(Объект.Ссылка) Цикл Реквизит = ДополнительныеРеквизиты.Добавить(); Реквизит.Наименование = ЗначениеСвойства.Свойство; Реквизит.Значение = ЗначениеСвойства.Значение; КонецЦикла; КонецЕсли; - Если УправлениеСвойствами.ИспользоватьДопСведения(Объект.Ссылка) Тогда - Для Каждого ЗначениеСвойства Из УправлениеСвойствами.ПолучитьЗначенияСвойств(Объект.Ссылка, Ложь, Истина) Цикл - Реквизит = ДополнительныеРеквизиты.Добавить(); - Реквизит.Идентификатор = ЗначениеСвойства.Свойство; - Реквизит.Наименование = ЗначениеСвойства.Свойство; - Реквизит.Значение = ЗначениеСвойства.Значение; - КонецЦикла; - КонецЕсли; - КонецПроцедуры // Восстанавливает значения реквизитов объекта, хранящихся отдельно от объекта. Процедура ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты) Экспорт Для Каждого Реквизит Из ДополнительныеРеквизиты Цикл - Если ТипЗнч(Реквизит.Идентификатор) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда - НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Объект.Установить(Объект.Ссылка); - НаборЗаписей.Отбор.Свойство.Установить(Реквизит.Идентификатор); - - Запись = НаборЗаписей.Добавить(); - Запись.Свойство = Реквизит.Идентификатор; - Запись.Значение = Реквизит.Значение; - Запись.Объект = Объект.Ссылка; - НаборЗаписей.Записать(); + Если ТипЗнч(Реквизит.Наименование) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда + ЭтоДополнительноеСведение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Реквизит.Наименование, "ЭтоДополнительноеСведение"); + Если ЭтоДополнительноеСведение Тогда + НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Объект.Ссылка); + НаборЗаписей.Отбор.Свойство.Установить(Реквизит.Наименование); + + Запись = НаборЗаписей.Добавить(); + Запись.Свойство = Реквизит.Наименование; + Запись.Значение = Реквизит.Значение; + Запись.Объект = Объект.Ссылка; + НаборЗаписей.Записать(); + КонецЕсли; КонецЕсли; КонецЦикла; @@ -1011,7 +1005,7 @@ Обновить = Истина; КонецЕсли; - Если НЕ Обновить Тогда + Если Не Обновить Тогда Индекс = 0; Для каждого Строка Из ГруппаОбъект.ДополнительныеРеквизиты Цикл Если Строка.Свойство <> ДополнительныеРеквизитыГруппы[Индекс].Свойство Тогда @@ -1021,7 +1015,7 @@ КонецЦикла; КонецЕсли; - Если НЕ Обновить Тогда + Если Не Обновить Тогда Индекс = 0; Для каждого Строка Из ГруппаОбъект.ДополнительныеСведения Цикл Если Строка.Свойство <> ДополнительныеСведенияГруппы[Индекс].Свойство Тогда @@ -1029,6 +1023,9 @@ КонецЕсли; Индекс = Индекс + 1; КонецЦикла; + КонецЕсли; + + Если Не Обновить Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 319444254..82586ac55 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -224,8 +224,7 @@ Попытка - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP - И Не СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ВыборкаПисьма.СерверИсходящейПочты) Тогда + Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, "IMAP"); ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщения; КонецЕсли; @@ -428,13 +427,12 @@ Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, - | ЭлектронноеПисьмоИсходящее.Ссылка КАК Ссылка, - | ПРЕДСТАВЛЕНИЕ(ЭлектронноеПисьмоИсходящее.Ссылка) КАК ПредставлениеПисьма, - | ЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки КАК УдалятьПослеОтправки, - | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки, - | ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) КАК КоличествоПопыток, - | УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты КАК СерверИсходящейПочты + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, + | ЭлектронноеПисьмоИсходящее.Ссылка, + | ПРЕДСТАВЛЕНИЕ(ЭлектронноеПисьмоИсходящее.Ссылка) КАК ПредставлениеПисьма, + | ЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки, + | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки, + | ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) КАК КоличествоПопыток |ИЗ | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты @@ -571,8 +569,7 @@ Попытка - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP - И НЕ СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ВыборкаПисьма.СерверИсходящейПочты) Тогда + Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, "IMAP"); ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщения; КонецЕсли; @@ -741,6 +738,7 @@ КонецФункции + // Заполняет ИнтернетПочтовыеАдреса в объекте ИнтернетПочтовоеСообщение по переданной таблице адресов. // // Параметры: @@ -1005,8 +1003,8 @@ Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ - | ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма КАК ИдентификаторПисьма, - | ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере КАК ИдентификаторНаСервере + | ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма, + | ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере |ПОМЕСТИТЬ ИдентификаторыПисемКЗагрузке |ИЗ | &ИдентификаторыПисемКЗагрузке КАК ИдентификаторыПисемКЗагрузке @@ -1014,17 +1012,17 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма КАК ИдентификаторПисьма, - | ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере КАК ИдентификаторНаСервере + | ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма, + | ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере |ИЗ | ИдентификаторыПисемКЗагрузке КАК ИдентификаторыПисемКЗагрузке | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее | ПО ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма = ЭлектронноеПисьмоВходящее.ИдентификаторСообщения | И (ЭлектронноеПисьмоВходящее.УчетнаяЗапись = &УчетнаяЗапись) | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее - | ПО (ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма = ЭлектронноеПисьмоИсходящее.ИдентификаторСообщения + | ПО (ЭлектронноеПисьмоИсходящее.УчетнаяЗапись = &УчетнаяЗапись) + | И (ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма = ЭлектронноеПисьмоИсходящее.ИдентификаторСообщения | ИЛИ ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма = ЭлектронноеПисьмоИсходящее.ИдентификаторСообщенияОтправкаIMAP) - | И (ЭлектронноеПисьмоИсходящее.УчетнаяЗапись = &УчетнаяЗапись) |ГДЕ | ЭлектронноеПисьмоВходящее.Ссылка ЕСТЬ NULL | И ЭлектронноеПисьмоИсходящее.Ссылка ЕСТЬ NULL"; @@ -2281,6 +2279,7 @@ Исключение + ОтменитьТранзакцию(); ТекстСообщения = НСтр("ru = 'Не установить письмо основание у %Ссылка% по причине: %Причина%'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Письмо); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -2289,7 +2288,6 @@ МетаданныеДокумента, Выборка.Письмо, ТекстСообщения); - ОтменитьТранзакцию(); КонецПопытки; @@ -2765,15 +2763,6 @@ //////////////////////////////////////////////////////////////////////////////// // Прочее -Функция СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ИмяСервераИсходящейПочты) Экспорт - - МассивСерверовИсключений = Новый Массив; - МассивСерверовИсключений.Добавить("smtp.gmail.com"); - - Возврат МассивСерверовИсключений.Найти(ИмяСервераИсходящейПочты) <> Неопределено; - -КонецФункции - Функция ПолучитьВажностьЭлектронногоПисьма(Важность) Если (Важность = ВажностьИнтернетПочтовогоСообщения.Высокая) diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index 2a5f4b3ba..a3f888d74 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -59,32 +59,69 @@ // Параметры: // ЭлементСписок - ЭлементФормы - Элемент формы, который необходимо обновить, после получения писем. // -Процедура ОтправитьЗагрузитьПочтуПользователя(ЭлементСписок = Неопределено) Экспорт +Процедура ОтправитьЗагрузитьПочтуПользователя(УникальныйИдентификатор, Форма, ЭлементСписок = Неопределено) Экспорт - ПолученоПисем = 0; - ДоступноУчетныхЗаписей = 0; - ЕстьОшибки = Ложь; - - ВзаимодействияВызовСервера.ОтправитьЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки); - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загружено писем: %1'"), ПолученоПисем); - Если ДоступноУчетныхЗаписей > 1 Тогда - ТекстСообщения = ТекстСообщения + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '(учетных записей: %1)'"), ДоступноУчетныхЗаписей); + ДлительнаяОперация = ВзаимодействияВызовСервера.ОтправитьПолучитьПочтуПользователяВФоне(УникальныйИдентификатор); + Если ДлительнаяОперация = Неопределено Тогда + Возврат; КонецЕсли; - Если ЭлементСписок <> Неопределено Тогда - ЭлементСписок.Обновить(); - КонецЕсли; - - ПоказатьОповещениеПользователя(ТекстСообщения); - - Если ЕстьОшибки Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'При получении почты были ошибки. Подробности см. в журнале регистрации'")); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ЭлементСписок", ЭлементСписок); + Если ДлительнаяОперация.Статус = "Выполнено" Тогда + ОтправитьЗагрузитьПочтуПользователяЗавершение(ДлительнаяОперация, ДополнительныеПараметры); + ИначеЕсли ДлительнаяОперация.Статус = "Выполняется" Тогда + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Форма); + ОповещениеОЗавершении = Новый ОписаниеОповещения("ОтправитьЗагрузитьПочтуПользователяЗавершение", ЭтотОбъект, ДополнительныеПараметры); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); КонецЕсли; КонецПроцедуры +Процедура ОтправитьЗагрузитьПочтуПользователяЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + ИначеЕсли Результат.Статус = "Ошибка" Тогда + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + ИначеЕсли Результат.Статус = "Выполнено" Тогда + + РезультатВыполнения = ВзаимодействияВызовСервера.РезультатОтправкиПолученияПочтыПользователя(Результат.АдресРезультата); + Если РезультатВыполнения = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ДополнительныеПараметры.Свойство("ЭлементСписок") + И ДополнительныеПараметры.ЭлементСписок <> Неопределено Тогда + ДополнительныеПараметры.ЭлементСписок.Обновить(); + КонецЕсли; + + ТекстСообщения = ПредставлениеРезультатаОтправкиПолученияПисемПользователя(РезультатВыполнения); + ПоказатьОповещениеПользователя(ТекстСообщения); + + Если РезультатВыполнения.ЕстьОшибки Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'При получении почты были ошибки. Подробности см. в журнале регистрации'")); + + КонецЕсли; + + Оповестить("ВыполненаОтправкаПолучениеПисем"); + КонецЕсли; + +КонецПроцедуры + +Функция ПредставлениеРезультатаОтправкиПолученияПисемПользователя(РезультатВыполнения) + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загружено писем: %1'"), РезультатВыполнения.ПолученоПисем); + Если РезультатВыполнения.ДоступноУчетныхЗаписей > 1 Тогда + ТекстСообщения = ТекстСообщения + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '(учетных записей: %1)'"), + РезультатВыполнения.ДоступноУчетныхЗаписей); + КонецЕсли; + + Возврат ТекстСообщения; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl index c7bcf2c1f..90e5c4b0e 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl @@ -82,13 +82,13 @@ Обработчик.ОбщиеДанные = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.2.95"; + Обработчик.Версия = "2.4.3.89"; Обработчик.ОбщиеДанные = Истина; Обработчик.Процедура = "ФайловыеФункцииСлужебныйВМоделиСервиса.ОчиститьРегистрСведенийУдалитьОчередьИзвлеченияТекста"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.2.95"; + Обработчик.Версия = "2.4.3.89"; Обработчик.ОбщиеДанные = Ложь; Обработчик.Процедура = "ФайловыеФункцииСлужебныйВМоделиСервиса.УдалитьУстаревшиеОбработчикиОбновления"; Обработчик.РежимВыполнения = "Оперативно"; @@ -171,7 +171,8 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - ОбновитьСостояниеОчередиИзвлеченияТекста(Выборка.Ссылка, Выборка.СтатусИзвлеченияТекста); + ОбновитьСостояниеОчередиИзвлеченияТекста(Выборка.Ссылка, + Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен); КонецЦикла; КонецПроцедуры @@ -249,5 +250,4 @@ КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl index 888e09dfa..26377d55d 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl @@ -4,11 +4,13 @@ Окна = ПолучитьОкна(); АктивныхОкон = 0; - Для Каждого ТекОкно Из Окна Цикл - Если Не ТекОкно.Основное Тогда - АктивныхОкон = АктивныхОкон + 1; - КонецЕсли; - КонецЦикла; + Если Окна <> Неопределено Тогда + Для Каждого ТекОкно Из Окна Цикл + Если Не ТекОкно.Основное Тогда + АктивныхОкон = АктивныхОкон + 1; + КонецЕсли; + КонецЦикла; + КонецЕсли; ПараметрыПриложенияЦентрМониторинга = ПолучитьПараметрыПриложения(); ПараметрыПриложенияЦентрМониторинга["ИнформацияКлиента"].Вставить("АктивныхОкон", АктивныхОкон); diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl index 25278463e..5db3bf0ce 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl @@ -5,7 +5,7 @@ // // Параметры: // ИмяРегламентногоЗадания - Строка - имя регламентного задания. -// СоздатьНовое - Булево - в случае отсутствия создается новое. +// СоздатьНовое - Булево - в случае отсутствия создается новое. // Функция ПолучитьРегламентноеЗаданиеВнешнийВызов(ИмяРегламентногоЗадания, СоздатьНовое = Истина) Экспорт Возврат ПолучитьРегламентноеЗадание(ИмяРегламентногоЗадания, СоздатьНовое); @@ -33,8 +33,8 @@ // // Параметры: // Параметр - Строка - Ключ параметра центра мониторинга, возможные значения ключа -// см. в процедуре ПолучитьПараметрыПоУмолчанию в модуле ЦентрМониторингаСлужебный. -// Значение - Произвольный тип - значение параметра центра мониторинга. +// см. в процедуре ПолучитьПараметрыПоУмолчанию в модуле ЦентрМониторингаСлужебный. +// Значение - Произвольный тип - значение параметра центра мониторинга. // Функция УстановитьПараметрЦентраМониторингаВнешнийВызов(Параметр, Значение) Экспорт УстановитьПараметрЦентраМониторинга(Параметр, Значение); @@ -42,7 +42,7 @@ // Получает параметры центра мониторинга по умолчанию. // Возвращаемое значение -// Структура +// Структура - значение константы ПараметрыЦентраМониторинга. // Функция ПолучитьПараметрыПоУмолчаниюВнешнийВызов() Экспорт Возврат ПолучитьПараметрыПоУмолчанию(); @@ -50,9 +50,9 @@ // Получает параметры центра мониторинга. // Параметры: -// Параметры - Структура - где ключи необходимые параметры, значения которых необходимо получить. +// Параметры - Структура - где ключи необходимые параметры, значения которых необходимо получить. // Возвращаемое значение -// Структура - значение константы ПараметрыЦентраМониторинга. +// Структура - значение константы ПараметрыЦентраМониторинга. // Функция ПолучитьПараметрыЦентраМониторингаВнешнийВызов(Параметры = Неопределено) Экспорт Возврат ПолучитьПараметрыЦентраМониторинга(Параметры); @@ -60,7 +60,7 @@ // Устанавливает параметры центра мониторинга. // Параметры: -// Параметры - Структура - необходимые параметры, значения которых необходимо получить. +// Параметры - Структура - необходимые параметры, значения которых необходимо получить. // Функция УстановитьПараметрыЦентраМониторингаВнешнийВызов(НовыеПараметры) Экспорт УстановитьПараметрыЦентраМониторинга(НовыеПараметры); @@ -82,17 +82,17 @@ Обработчик = Обработчики.Добавить(); Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "ЦентрМониторингаСлужебный.ПервоначальноеЗаполнение"; - - Обработчик = Обработчики.Добавить(); + + Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = "Оперативно"; - Обработчик.ОбщиеДанные = Истина; + Обработчик.ОбщиеДанные = Истина; Обработчик.Версия = "2.4.1.7"; Обработчик.Процедура = "ЦентрМониторингаСлужебный.ДобавитьИдентификаторИнформационнойБазыПостоянный"; Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() И НЕ РазделениеПоОбластямДанныхВключено() Тогда Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Версия = "2.4.2.158"; + Обработчик.Версия = "2.4.3.156"; Обработчик.Комментарий = НСтр("ru = 'Включает отправку сведений об использовании программы в фирму ""1С"". Отключить отправку сведений можно в разделе Администрирование / Интернет-поддержка и сервисы / Центр мониторинга'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("68c8c60c-5b23-436a-9555-a6f24a6b1ffd"); Обработчик.Процедура = "ЦентрМониторингаСлужебный.ВключитьОтправкуСведений"; @@ -106,57 +106,61 @@ // См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт - - ПараметрыРаботыКлиента = Новый Структура("ЧасовойПоясСеанса, ХешПользователя, РегистрироватьБизнесСтатистику"); - - УникальныйИдентификаторПользователя = Строка(ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); - НомерСеанса = Формат(НомерСеансаИнформационнойБазы(), "ЧГ=0"); - ХешПользователя = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(УникальныйИдентификаторПользователя + НомерСеанса); - - РегистрироватьБизнесСтатистику = ПолучитьПараметрыЦентраМониторинга("РегистрироватьБизнесСтатистику"); - - ПараметрыРаботыКлиента.ЧасовойПоясСеанса = ЧасовойПоясСеанса(); - ПараметрыРаботыКлиента.ХешПользователя = ХешПользователя; - ПараметрыРаботыКлиента.РегистрироватьБизнесСтатистику = РегистрироватьБизнесСтатистику; - - Параметры.Вставить("ЦентрМониторинга", Новый ФиксированнаяСтруктура(ПараметрыРаботыКлиента)); + + ПараметрыРаботыКлиента = Новый Структура("ЧасовойПоясСеанса, ХешПользователя, РегистрироватьБизнесСтатистику"); + + УникальныйИдентификаторПользователя = Строка(ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); + НомерСеанса = Формат(НомерСеансаИнформационнойБазы(), "ЧГ=0"); + ХешПользователя = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(УникальныйИдентификаторПользователя + НомерСеанса); + + РегистрироватьБизнесСтатистику = ПолучитьПараметрыЦентраМониторинга("РегистрироватьБизнесСтатистику"); + + ПараметрыРаботыКлиента.ЧасовойПоясСеанса = ЧасовойПоясСеанса(); + ПараметрыРаботыКлиента.ХешПользователя = ХешПользователя; + ПараметрыРаботыКлиента.РегистрироватьБизнесСтатистику = РегистрироватьБизнесСтатистику; + + Параметры.Вставить("ЦентрМониторинга", Новый ФиксированнаяСтруктура(ПараметрыРаботыКлиента)); КонецПроцедуры Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры) Экспорт - - РегистрироватьБизнесСтатистику = ПолучитьПараметрыЦентраМониторинга("РегистрироватьБизнесСтатистику"); - - ПараметрыНовые = Новый Соответствие(Параметры); - ПараметрыНовые.Вставить("РегистрироватьБизнесСтатистику", РегистрироватьБизнесСтатистику); - - КлючФоновогоЗадания = "ПриВыполненииСтандартныхПериодическихПроверокНаСервереВФоне" + Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; - - Отбор = Новый Структура; - Отбор.Вставить("Ключ", КлючФоновогоЗадания); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - - Если АктивныеФоновыеЗадания.Количество() = 0 Тогда - ПараметрыФоновогоЗадания = Новый Массив; - ПараметрыФоновогоЗадания.Добавить(Параметры); - ФоновыеЗадания.Выполнить("ЦентрМониторингаСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервереВФоне", - ПараметрыФоновогоЗадания, - КлючФоновогоЗадания, - "ЦентрМониторингаСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервере"); - КонецЕсли; - - Параметры = Новый ФиксированноеСоответствие(ПараметрыНовые); - + + Если Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["РегистрироватьБизнесСтатистику"] Тогда + + РегистрироватьБизнесСтатистику = ПолучитьПараметрыЦентраМониторинга("РегистрироватьБизнесСтатистику"); + + ПараметрыНовые = Новый Соответствие(Параметры); + ПараметрыНовые.Вставить("РегистрироватьБизнесСтатистику", РегистрироватьБизнесСтатистику); + + КлючФоновогоЗадания = "ПриВыполненииСтандартныхПериодическихПроверокНаСервереВФоне" + Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; + + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Если АктивныеФоновыеЗадания.Количество() = 0 Тогда + ПараметрыФоновогоЗадания = Новый Массив; + ПараметрыФоновогоЗадания.Добавить(Параметры); + ФоновыеЗадания.Выполнить("ЦентрМониторингаСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервереВФоне", + ПараметрыФоновогоЗадания, + КлючФоновогоЗадания, + "ЦентрМониторингаСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервере"); + КонецЕсли; + + Параметры = Новый ФиксированноеСоответствие(ПараметрыНовые); + + КонецЕсли; + КонецПроцедуры Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервереВФоне(Параметры) Экспорт - - ЗаписатьСтатистикуЭкрановКлиента(Параметры); - ЗаписатьИнформациюОСистеме(Параметры); - ЗаписатьИнформацияКлиента(Параметры); - ЗаписатьДанныеСКлиента(Параметры); - + + ЗаписатьСтатистикуЭкрановКлиента(Параметры); + ЗаписатьИнформациюОСистеме(Параметры); + ЗаписатьИнформацияКлиента(Параметры); + ЗаписатьДанныеСКлиента(Параметры); + КонецПроцедуры #КонецОбласти @@ -588,7 +592,7 @@ ПараметрыЦентраМониторинга = Новый Структура(); ПараметрыЦентраМониторинга.Вставить("ИдентификаторИнформационнойБазы"); - ПараметрыЦентраМониторинга.Вставить("ИдентификаторИнформационнойБазыПостоянный"); + ПараметрыЦентраМониторинга.Вставить("ИдентификаторИнформационнойБазыПостоянный"); ПараметрыЦентраМониторинга.Вставить("РегистрироватьИнформациюОСистеме"); ПараметрыЦентраМониторинга.Вставить("РегистрироватьВерсииПодсистем"); ПараметрыЦентраМониторинга.Вставить("РегистрироватьДампы"); @@ -618,8 +622,8 @@ КонецЕсли; Если ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику Тогда - - РезультатЗапроса = РегистрыСведений.ЗамерыОперацииСтатистики.ПолучитьЗамеры(ДатаНачала, ДатаОкончания, ПериодУдаления); + + РезультатЗапроса = РегистрыСведений.ЗамерыОперацииСтатистики.ПолучитьЗамеры(ДатаНачала, ДатаОкончания, ПериодУдаления); КолонкиИндекса = Новый Соответствие; КолонкиИндекса.Вставить("ОперацияСтатистики", Новый Соответствие); КолонкиИндекса.Вставить("Период", Новый Соответствие); @@ -661,25 +665,25 @@ СекцияОбластиСтатистики["StatisticalAreas"]["columnsValueIndex"].Удалить("ОперацияСтатистики"); СекцияОбластиСтатистики["StatisticalAreas"]["columnsValueIndex"].Удалить("Период"); СекцияОбластиСтатистики["StatisticalAreas"].Вставить("AggregationPeriod", ПериодУдаления); - - РезультатЗапроса = РегистрыСведений.ЗамерыСтатистики.ПолучитьЗамерыЧаса(ДатаНачала, ДатаОкончания); - КолонкиИндекса = Новый Соответствие; + + РезультатЗапроса = РегистрыСведений.ЗамерыСтатистики.ПолучитьЗамерыЧаса(ДатаНачала, ДатаОкончания); + КолонкиИндекса = Новый Соответствие; КолонкиИндекса.Вставить("ОперацияСтатистики", Новый Соответствие); КолонкиИндекса.Вставить("Период", Новый Соответствие); - - ДополнительныеПараметры = Новый Соответствие; + + ДополнительныеПараметры = Новый Соответствие; ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); СекцияОперацииСтатистикиКлиентЧас = СформироватьJSONСтруктуру("OperationStatisticsClientHour", РезультатЗапроса, ДополнительныеПараметры); - - РезультатЗапроса = РегистрыСведений.ЗамерыСтатистики.ПолучитьЗамерыСутки(ДатаНачала, ДатаОкончания); - КолонкиИндекса = Новый Соответствие; + + РезультатЗапроса = РегистрыСведений.ЗамерыСтатистики.ПолучитьЗамерыСутки(ДатаНачала, ДатаОкончания); + КолонкиИндекса = Новый Соответствие; КолонкиИндекса.Вставить("ОперацияСтатистики", Новый Соответствие); КолонкиИндекса.Вставить("Период", Новый Соответствие); - - ДополнительныеПараметры = Новый Соответствие; + + ДополнительныеПараметры = Новый Соответствие; ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); СекцияОперацииСтатистикиКлиентСутки = СформироватьJSONСтруктуру("OperationStatisticsClientDay", РезультатЗапроса, ДополнительныеПараметры); - + КонецЕсли; РазделениеПоОбластямДанныхВключено = РазделениеПоОбластямДанныхВключено(); @@ -725,11 +729,17 @@ СекцияСтатистикаКонфигурации.StatisticsConfiguration.StatisticsConfigurationByRegions.Вставить(ОбластьДанныхСтрока, СтатистикаКонфигурацииОбласти[ОбластьДанныхСтрока]); КонецЕсли; КонецЦикла; + ДанныеОбИспользуемыхРасширениях = Новый Структура; Иначе РезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьСтатистику(0); ДопПараметры = Новый Структура("MetadataName", Метаданные.Имя); ДопПараметры.Вставить("WorkingMode", ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), "F", "S")); ДопПараметры.Вставить("DivisionByRegions", РазделениеПоОбластямДанныхВключено); + ДопПараметры.Вставить("CompatibilityMode", Строка(Метаданные.РежимСовместимости)); + ДопПараметры.Вставить("InterfaceCompatibilityMode", Строка(Метаданные.РежимСовместимостиИнтерфейса)); + ДопПараметры.Вставить("ModalityUseMode", Строка(Метаданные.РежимИспользованияМодальности)); + ДанныеОбИспользуемыхРасширениях = ДанныеОбИспользуемыхРасширениях(); + ДопПараметры.Вставить("UsingExtensions", ДанныеОбИспользуемыхРасширениях.ИспользованиеРасширений); ДополнительныеПараметры = Новый Соответствие; ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); @@ -827,10 +837,10 @@ КонецЕсли; ИдентификаторИнформационнойБазы = Строка(ПараметрыЦентраМониторинга.ИдентификаторИнформационнойБазы); - ИдентификаторИнформационнойБазыПостоянный = Строка(ПараметрыЦентраМониторинга.ИдентификаторИнформационнойБазыПостоянный); + ИдентификаторИнформационнойБазыПостоянный = Строка(ПараметрыЦентраМониторинга.ИдентификаторИнформационнойБазыПостоянный); JSONСтруктура = Новый Структура; JSONСтруктура.Вставить("ib", ИдентификаторИнформационнойБазы); - JSONСтруктура.Вставить("ibConst", ИдентификаторИнформационнойБазыПостоянный); + JSONСтруктура.Вставить("ibConst", ИдентификаторИнформационнойБазыПостоянный); JSONСтруктура.Вставить("versionPacket", "1.0.3.0"); JSONСтруктура.Вставить("datePacket", ТекущаяУниверсальнаяДата()); @@ -851,13 +861,14 @@ БизнесСтатистика.Вставить("OperationStatistics", СекцияОперацииСтатистики["OperationStatistics"]); БизнесСтатистика.Вставить("CommentsStatistics", СекцияКомментарииСтатистики["CommentsStatistics"]); БизнесСтатистика.Вставить("StatisticalAreas", СекцияОбластиСтатистики["StatisticalAreas"]); - БизнесСтатистика.Вставить("OperationStatisticsClientHour", СекцияОперацииСтатистикиКлиентЧас["OperationStatisticsClientHour"]); - БизнесСтатистика.Вставить("OperationStatisticsClientDay", СекцияОперацииСтатистикиКлиентСутки["OperationStatisticsClientDay"]); + БизнесСтатистика.Вставить("OperationStatisticsClientHour", СекцияОперацииСтатистикиКлиентЧас["OperationStatisticsClientHour"]); + БизнесСтатистика.Вставить("OperationStatisticsClientDay", СекцияОперацииСтатистикиКлиентСутки["OperationStatisticsClientDay"]); JSONСтруктура.Вставить("business", БизнесСтатистика); КонецЕсли; Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда JSONСтруктура.Вставить("config", СекцияСтатистикаКонфигурации["StatisticsConfiguration"]); + JSONСтруктура.Вставить("extensionsInfo", ДанныеОбИспользуемыхРасширениях); КонецЕсли; Если ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда @@ -950,11 +961,8 @@ КонецФункции Функция ЗаписатьДанныеВАрхив(Данные) - ВременныйКаталог = КаталогВременныхФайлов(); - - ИдентификаторФайла = Строка(Новый УникальныйИдентификатор()); - ИмяФайлаДанных = ВременныйКаталог + ИдентификаторФайла + ".txt"; - ИмяФайлаАрхива = ВременныйКаталог + ИдентификаторФайла + ".zip"; + ИмяФайлаДанных = ПолучитьИмяВременногоФайла("txt"); + ИмяФайлаАрхива = ПолучитьИмяВременногоФайла("zip"); ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаДанных); ЗаписьТекста.Записать(Данные); @@ -1080,10 +1088,10 @@ // #Область СтатистикаКонфигурацииБазовая - Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации ИЛИ ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда - - НеобходимаЗаписьОценкиПроизводительности = Ложь; - + Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации ИЛИ ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда + + НеобходимаЗаписьОценкиПроизводительности = Ложь; + РегистрыСведений.СтатистикаКонфигурации.ОчиститьСтатистикуКонфигурации(); ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); @@ -1095,14 +1103,14 @@ СтатистикаКонфигурации = Неопределено; Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда РегистрыСведений.СтатистикаКонфигурации.ЗаписатьСтатистикуКонфигурации(); - НеобходимаЗаписьОценкиПроизводительности = Истина; + НеобходимаЗаписьОценкиПроизводительности = Истина; КонецЕсли; Если ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда СтатистикаКонфигурации = РегистрыСведений.СтатистикаКонфигурации.ЗаписатьНастройкиКонфигурации(); - НеобходимаЗаписьОценкиПроизводительности = Истина; + НеобходимаЗаписьОценкиПроизводительности = Истина; КонецЕсли; - + Если ОценкаПроизводительностиСуществует И НеобходимаЗаписьОценкиПроизводительности Тогда МодульОценкаПроизводительности.ЗакончитьЗамерВремени("ЦентрМониторингаСобратьСтатистикуКонфигурацииБазовая", ВремяНачала); КонецЕсли; @@ -1110,7 +1118,7 @@ #КонецОбласти - // Собирает статистику по стандартным подсистемам конфигурации + // Собирает статистику по конфигурации // в случае существования подсистемы оценки производительности // замеряет длительность выполнения. // @@ -1137,19 +1145,21 @@ УровеньЖурналаРегистрации.Ошибка, ,, НСтр("ru = 'Не удалось установить разделение сеанса.Область данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + " = " + Формат(Выборка.ОбластьДанных, "ЧГ=0") - +Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); + + Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); УстановитьРазделениеСеанса(Ложь); Продолжить; КонецПопытки; - СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации(); + ИнтеграцияПодсистемБСП.ПриСбореПоказателейСтатистикиКонфигурации(); + ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации(); УстановитьРазделениеСеанса(Ложь); КонецЕсли; КонецЦикла; Иначе - СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации(); + ИнтеграцияПодсистемБСП.ПриСбореПоказателейСтатистикиКонфигурации(); + ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации(); КонецЕсли; - + Если ОценкаПроизводительностиСуществует Тогда МодульОценкаПроизводительности.ЗакончитьЗамерВремени("ЦентрМониторингаСобратьСтатистикуКонфигурацииСтандартныеПодсистемы", ВремяНачала); КонецЕсли; @@ -1157,52 +1167,6 @@ #КонецОбласти - // Собирает переопределенную статистику по конфигурации - // в случае существования подсистемы оценки производительности - // замеряет длительность выполнения. - // - #Область СтатистикаКонфигурацииПереопределяемая - - Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда - Если ОценкаПроизводительностиСуществует Тогда - ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени(); - КонецЕсли; - - РазделениеПоОбластямДанныхВключено = РазделениеПоОбластямДанныхВключено(); - Если РазделениеПоОбластямДанныхВключено Тогда - ОбластиДанныхРезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьОбластиДанныхРезультатЗапроса(); - Выборка = ОбластиДанныхРезультатЗапроса.Выбрать(); - Пока Выборка.Следующий() Цикл - ОбластьДанныхСтрока = Строка(Выборка.ОбластьДанных); - ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); - Если РегистрыСведений.ОбластиСтатистики.СобиратьСтатистикуКонфигурации(ОбластьДанныхСтрока) Тогда - Попытка - УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); - Исключение - Инфо = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Статистика конфигурации переопределяемая'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - ,, - НСтр("ru = 'Не удалось установить разделение сеанса.Область данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + " = " + Формат(Выборка.ОбластьДанных, "ЧГ=0") - +Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); - - УстановитьРазделениеСеанса(Ложь); - Продолжить; - КонецПопытки; - ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации(); - УстановитьРазделениеСеанса(Ложь); - КонецЕсли; - КонецЦикла; - Иначе - ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации(); - КонецЕсли; - - Если ОценкаПроизводительностиСуществует Тогда - МодульОценкаПроизводительности.ЗакончитьЗамерВремени("ЦентрМониторингаСобратьСтатистикуКонфигурацииПереопределяемая", ВремяНачала); - КонецЕсли; - КонецЕсли; - - #КонецОбласти КонецПроцедуры #КонецОбласти @@ -1334,9 +1298,9 @@ // Идентификатор информационной базы. // - ИдентификаторИнформационнойБазы = Новый УникальныйИдентификатор(); + ИдентификаторИнформационнойБазы = Новый УникальныйИдентификатор(); ПараметрыКонстанты.Вставить("ИдентификаторИнформационнойБазы", ИдентификаторИнформационнойБазы); - ПараметрыКонстанты.Вставить("ИдентификаторИнформационнойБазыПостоянный", ИдентификаторИнформационнойБазы); + ПараметрыКонстанты.Вставить("ИдентификаторИнформационнойБазыПостоянный", ИдентификаторИнформационнойБазы); // Параметры сбора информации о системе. // @@ -1424,11 +1388,11 @@ КонецЦикла; ИначеЕсли ТипЗнч(Параметры) = Тип("Строка") Тогда Параметры = ПараметрыКонстанты[Параметры]; - КонецЕсли; + КонецЕсли; КонецЕсли; ПараметрыКонстанты.Вставить("ВыполнятьЗамерыПроизводительности", ВыполнятьЗамерыПроизводительности()); - + Возврат Параметры; КонецФункции @@ -1496,7 +1460,7 @@ Если Параметры.Свойство("deliveryIntervalHours") Тогда ПараметрыОтправки.Вставить("ОтправкаДанныхПериодФормирования", Параметры.deliveryIntervalHours * 60 * 60); КонецЕсли; - + Если ПараметрыОтправки["РегистрироватьПроизводительность"] ИЛИ ПараметрыОтправки["РегистрироватьПроизводительностьТехнологическую"] Тогда // Подсистемы оценки производительности нет. Если ПараметрыОтправки.ВыполнятьЗамерыПроизводительности = Неопределено Тогда @@ -1519,7 +1483,7 @@ // Включен оценкой производительности. ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 2 И ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда ПараметрыОтправки.ОценкаПроизводительностиВключена = 2; - КонецЕсли; + КонецЕсли; Иначе // Подсистемы оценки производительности нет. Если ПараметрыОтправки.ВыполнятьЗамерыПроизводительности = Неопределено Тогда @@ -1543,12 +1507,12 @@ ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 2 И ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда ПараметрыОтправки.ОценкаПроизводительностиВключена = 2; КонецЕсли; - КонецЕсли; - - Если Параметры.Свойство("foundCopy") И Параметры.foundCopy Тогда - ВыполнитьДействияПриОбнаруженииКопии(); - КонецЕсли; - + КонецЕсли; + + Если Параметры.Свойство("foundCopy") И Параметры.foundCopy Тогда + ВыполнитьДействияПриОбнаруженииКопии(); + КонецЕсли; + НачатьТранзакцию(); Попытка Если ПараметрыОтправки.ОценкаПроизводительностиВключена = 0 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности = Неопределено Тогда @@ -1575,7 +1539,7 @@ Функция УстановитьПараметрыЦентраМониторинга(НовыеПараметры) Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); - + НачатьТранзакцию(); Попытка @@ -1610,14 +1574,14 @@ Функция УдалитьПараметрыЦентраМониторинга() Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); - + НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); Параметры = Новый Структура; - + Хранилище = Новый ХранилищеЗначения(Параметры); Константы.ПараметрыЦентраМониторинга.Установить(Хранилище); @@ -1634,7 +1598,7 @@ Функция УстановитьПараметрЦентраМониторинга(Параметр, Значение) Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); - + НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); @@ -1693,12 +1657,12 @@ // Получает каталог сбора дампов на сервере. Экспортная для проведения тестирования обработкой. // Возвращаемое значение -// Структура +// Структура - содержит путь к каталогу дампов и признак удаления дампов. // Функция ПолучитьКаталогДампов() Экспорт КаталогНастроек = ПолучитьКаталогНастроекТехнологическогоЖурнала(); КаталогДампов = НайтиКаталогДампов(КаталогНастроек); - + Возврат КаталогДампов; КонецФункции @@ -1730,7 +1694,7 @@ ПараметрыДампов = Новый Структура; Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда Пока ЧтениеXML.ПрочитатьАтрибут() Цикл - ПараметрыДампов.Вставить(ЧтениеXML.ЛокальноеИмя, ЧтениеXML.Значение); + ПараметрыДампов.Вставить(ЧтениеXML.ЛокальноеИмя, ЧтениеXML.Значение); КонецЦикла; КонецЕсли; КонецЕсли; @@ -1835,6 +1799,13 @@ КонецЕсли; КонецФункции +// Генерирует путь к каталогу дампов. +// Каталог дампов очищается автоматически методом РегистрацияДампов. +// Параметры: +// ПутьКаталога - Строка - путь к каталогу, в котором хранится файл настроек технологического журнала. +// Возвращаемое значение: +// КаталогДампов - Строка - путь к каталогу, в котором будут храниться минидампы. +// Функция СоздатьФайлНастроекСбораДампов(ПутьКаталога) ИмяФайлаНастроек = "logcfg.xml"; @@ -1920,7 +1891,6 @@ КонецЕсли; КонецЕсли; - Счетчик = Счетчик + 1; Если Счетчик >= 100 Тогда @@ -1935,7 +1905,7 @@ КаталогНастроек = Новый Структура("Путь, Существует, ОписаниеОшибки", "", Ложь, ""); СтрокаПоиска = "ConfLocation="; - ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска); + ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска); Текст = Новый ЧтениеТекста(ФайлКонфигурацииНастроек.ПолноеИмя); Данные = Текст.Прочитать(); @@ -1988,7 +1958,7 @@ + Лев(СтрПолучитьСтроку(ВерсияПлатформы, 2) + "000000", 6) + Лев(СтрПолучитьСтроку(ВерсияПлатформы, 3) + "000000", 6) + Лев(СтрПолучитьСтроку(ВерсияПлатформы, 4) + "000000", 6)); - + Возврат ВерсияПлатформыЧисло; КонецФункции @@ -1997,8 +1967,8 @@ #Область РаботаССистемнойИнформацией Функция ПолучитьСистемнуюИнформацию() СисИнфо = Новый СистемнаяИнформация; - - Результат = Новый Структура; + + Результат = Новый Структура; Результат.Вставить("ИмяКомпьютера", ОбщегоНазначения.КонтрольнаяСуммаСтрокой(ИмяКомпьютера())); Результат.Вставить("ВерсияОС", Строка(СисИнфо.ВерсияОС)); Результат.Вставить("ВерсияПриложения", Строка(СисИнфо.ВерсияПриложения)); @@ -2016,7 +1986,7 @@ КонецФункции Функция ВерсииПодсистем() - + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -2035,9 +2005,146 @@ Возврат Подсистемы; КонецФункции - + #КонецОбласти +#Область РаботаСРасширениямиКонфигурации + +Функция ДанныеОбИспользуемыхРасширениях() + + СтруктураРасширения = Новый Структура; + + МассивРасширений = РасширенияКонфигурации.Получить(); + ИспользуютсяРасширения = МассивРасширений.Количество()>0; + СтруктураРасширения.Вставить("ИспользованиеРасширений", ИспользуютсяРасширения); + + Если Не ИспользуютсяРасширения Тогда + Возврат СтруктураРасширения; + КонецЕсли; + + МассивОписанийРасширений = Новый Массив; + Для Каждого Расширение Из МассивРасширений Цикл + ОписаниеРасширения = Новый Структура("Имя, Версия, Назначение, БезопасныйРежим, ЗащитаОтОпасныхДействий, Синоним"); + ЗаполнитьЗначенияСвойств(ОписаниеРасширения, Расширение); + ОписаниеРасширения.Вставить("ЗащитаОтОпасныхДействий", ?(ОписаниеРасширения.ЗащитаОтОпасныхДействий = Неопределено, Ложь, ОписаниеРасширения.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях)); + ОписаниеРасширения.Вставить("Назначение", Строка(ОписаниеРасширения.Назначение)); + МассивОписанийРасширений.Добавить(ОписаниеРасширения); + КонецЦикла; + + СтруктураРасширения.Вставить("ОписанияРасширений", МассивОписанийРасширений); + + МетаданныеРасширений = Новый Соответствие; + ОписаниеМетаданных = ОписаниеМетаданных(); + Для Каждого СтрЗапись Из ОписаниеМетаданных Цикл + ДобавитьИнформациюОРасширениях(СтрЗапись.Ключ, СтрЗапись.Значение, МетаданныеРасширений); + КонецЦикла; + + СтруктураРасширения.Вставить("МетаданныеРасширений", МетаданныеРасширений); + + Возврат СтруктураРасширения; + +КонецФункции + +Процедура ДобавитьИнформациюОРасширениях(КлассОбъекта, АрхитектураОбъекта, МетаданныеРасширений) + Для Каждого ОбъектМетаданных Из Метаданные[КлассОбъекта] Цикл + // Сначала обходим подчиненные. + Для Каждого ЭлементСтруктуры Из АрхитектураОбъекта Цикл + Если ЭлементСтруктуры.Значение = "Рекурсивно" Тогда + ДобавитьИнформациюОРасширенияхРекурсивно(ОбъектМетаданных, ЭлементСтруктуры.Ключ, АрхитектураОбъекта, МетаданныеРасширений); + КонецЕсли; + Для Каждого ПодчиненныйОбъект Из ОбъектМетаданных[ЭлементСтруктуры.Ключ] Цикл + РасширениеОбъекта = ПодчиненныйОбъект.РасширениеКонфигурации(); + Если РасширениеОбъекта = Неопределено Тогда + Продолжить; + КонецЕсли; + МетаданныеРасширений.Вставить(ПодчиненныйОбъект.ПолноеИмя(), РасширениеОбъекта.Имя); + КонецЦикла; + КонецЦикла; + + РасширениеОбъекта = ОбъектМетаданных.РасширениеКонфигурации(); + Если РасширениеОбъекта = Неопределено Тогда + Если ОбъектМетаданных.ЕстьИзмененияРасширениямиКонфигурации() Тогда + МетаданныеРасширений.Вставить(ОбъектМетаданных.ПолноеИмя(), Истина); + КонецЕсли; + Продолжить; + КонецЕсли; + МетаданныеРасширений.Вставить(ОбъектМетаданных.ПолноеИмя(), РасширениеОбъекта.Имя); + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьИнформациюОРасширенияхРекурсивно(Объект, ИмяРекурсивногоАтрибута, АрхитектураОбъекта, МетаданныеРасширений) + Для Каждого РекурсивныйОбъект Из Объект[ИмяРекурсивногоАтрибута] Цикл + Для Каждого ЭлементСтруктуры Из АрхитектураОбъекта Цикл + Если ЭлементСтруктуры.Значение = "Рекурсивно" Тогда + ДобавитьИнформациюОРасширенияхРекурсивно(РекурсивныйОбъект, ЭлементСтруктуры.Ключ, АрхитектураОбъекта, МетаданныеРасширений); + КонецЕсли; + Для Каждого ПодчиненныйОбъект Из РекурсивныйОбъект[ЭлементСтруктуры.Ключ] Цикл + РасширениеОбъекта = ПодчиненныйОбъект.РасширениеКонфигурации(); + Если РасширениеОбъекта = Неопределено Тогда + Продолжить; + КонецЕсли; + МетаданныеРасширений.Вставить(ПодчиненныйОбъект.ПолноеИмя(), РасширениеОбъекта.Имя); + КонецЦикла; + КонецЦикла; + + РасширениеОбъекта = РекурсивныйОбъект.РасширениеКонфигурации(); + Если РасширениеОбъекта = Неопределено Тогда + Продолжить; + КонецЕсли; + МетаданныеРасширений.Вставить(РекурсивныйОбъект.ПолноеИмя(), РасширениеОбъекта.Имя); + КонецЦикла; +КонецПроцедуры + +Функция ОписаниеМетаданных() + ОписаниеМетаданных = Новый Соответствие; + ОписаниеМетаданных.Вставить("Подсистемы", Новый Структура("Подсистемы", "Рекурсивно")); + ОписаниеМетаданных.Вставить("ОбщиеМодули", Новый Структура); + ОписаниеМетаданных.Вставить("ПараметрыСеанса", Новый Структура); + ОписаниеМетаданных.Вставить("ОбщиеРеквизиты", Новый Структура); + ОписаниеМетаданных.Вставить("ОбщиеРеквизиты", Новый Структура); + ОписаниеМетаданных.Вставить("ПланыОбмена", Новый Структура("Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("КритерииОтбора", Новый Структура("Формы, Команды")); + ОписаниеМетаданных.Вставить("ПодпискиНаСобытия", Новый Структура); + ОписаниеМетаданных.Вставить("РегламентныеЗадания", Новый Структура); + ОписаниеМетаданных.Вставить("ФункциональныеОпции", Новый Структура); + ОписаниеМетаданных.Вставить("ПараметрыФункциональныхОпций", Новый Структура); + ОписаниеМетаданных.Вставить("ОпределяемыеТипы", Новый Структура); + ОписаниеМетаданных.Вставить("ХранилищаНастроек", Новый Структура("Формы, Макеты")); + ОписаниеМетаданных.Вставить("ОбщиеФормы", Новый Структура); + ОписаниеМетаданных.Вставить("ОбщиеКоманды", Новый Структура); + ОписаниеМетаданных.Вставить("ГруппыКоманд", Новый Структура); + ОписаниеМетаданных.Вставить("ОбщиеМакеты", Новый Структура); + ОписаниеМетаданных.Вставить("ОбщиеКартинки", Новый Структура); + ОписаниеМетаданных.Вставить("ПакетыXDTO", Новый Структура); + ОписаниеМетаданных.Вставить("WebСервисы", Новый Структура); + ОписаниеМетаданных.Вставить("HTTPСервисы", Новый Структура); + ОписаниеМетаданных.Вставить("WSСсылки", Новый Структура); + ОписаниеМетаданных.Вставить("ЭлементыСтиля", Новый Структура); + ОписаниеМетаданных.Вставить("Языки", Новый Структура); + ОписаниеМетаданных.Вставить("Константы", Новый Структура); + ОписаниеМетаданных.Вставить("Справочники", Новый Структура("Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("Документы", Новый Структура("Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("ЖурналыДокументов", Новый Структура("Графы, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("Перечисления", Новый Структура("ЗначенияПеречисления, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("Отчеты", Новый Структура("Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("Обработки", Новый Структура("Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("ПланыВидовХарактеристик", Новый Структура("Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("ПланыСчетов", Новый Структура("Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("ПланыВидовРасчета", Новый Структура("Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("РегистрыСведений", Новый Структура("Измерения, Ресурсы, Реквизиты, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("РегистрыНакопления", Новый Структура("Измерения, Ресурсы, Реквизиты, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("РегистрыБухгалтерии", Новый Структура("Измерения, Ресурсы, Реквизиты, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("РегистрыРасчета", Новый Структура("Измерения, Ресурсы, Реквизиты, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("БизнесПроцессы", Новый Структура("Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + ОписаниеМетаданных.Вставить("Задачи", Новый Структура("РеквизитыАдресации, Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты")); + + Возврат ОписаниеМетаданных; +КонецФункции + +#КонецОбласти + + #Область РаботаВРежимеРазделенияПоОбластямДанных Функция РазделениеПоОбластямДанныхВключено() Экспорт @@ -2079,96 +2186,96 @@ #Область ИнформацияКлиента Процедура ЗаписатьСтатистикуЭкрановКлиента(Параметры) - - Экраны = Параметры["ИнформацияКлиента"]["ЭкраныКлиента"]; - ХешПользователя = Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; - - Для Каждого ТекЭкран Из Экраны Цикл - - ИмяОперацииСтатистики = "СтатистикаКлиента.ИнформацияОСистеме.РазрешениеМонитора." + ТекЭкран; - ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиСутки(ИмяОперацииСтатистики, ХешПользователя, 1); - - ИмяОперацииСтатистики = ИмяОперацииСтатистики + "." + Параметры["ИнформацияКлиента"]["ИнформацияОСистеме"]["ИнформацияПрограммыПросмотра"]; - ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиСутки(ИмяОперацииСтатистики, ХешПользователя, 1); - - КонецЦикла; - - КоличествоМониторовСтрока = Формат(Экраны.Количество(), "ЧГ=0"); - ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиСутки("СтатистикаКлиента.ИнформацияОСистеме.КоличествоМониторов." + КоличествоМониторовСтрока, ХешПользователя, 1); - + + Экраны = Параметры["ИнформацияКлиента"]["ЭкраныКлиента"]; + ХешПользователя = Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; + + Для Каждого ТекЭкран Из Экраны Цикл + + ИмяОперацииСтатистики = "СтатистикаКлиента.ИнформацияОСистеме.РазрешениеМонитора." + ТекЭкран; + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиСутки(ИмяОперацииСтатистики, ХешПользователя, 1); + + ИмяОперацииСтатистики = ИмяОперацииСтатистики + "." + Параметры["ИнформацияКлиента"]["ИнформацияОСистеме"]["ИнформацияПрограммыПросмотра"]; + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиСутки(ИмяОперацииСтатистики, ХешПользователя, 1); + + КонецЦикла; + + КоличествоМониторовСтрока = Формат(Экраны.Количество(), "ЧГ=0"); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиСутки("СтатистикаКлиента.ИнформацияОСистеме.КоличествоМониторов." + КоличествоМониторовСтрока, ХешПользователя, 1); + КонецПроцедуры Процедура ЗаписатьИнформациюОСистеме(Параметры) - - ХешПользователя = Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; - - Для Каждого ТекИнфоОСистеме Из Параметры["ИнформацияКлиента"]["ИнформацияОСистеме"] Цикл - ИмяОперацииСтатистики = "СтатистикаКлиента.ИнформацияОСистеме." + ТекИнфоОСистеме.Ключ + "." + ТекИнфоОСистеме.Значение; - ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиСутки(ИмяОперацииСтатистики, ХешПользователя, 1); - КонецЦикла; - + + ХешПользователя = Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; + + Для Каждого ТекИнфоОСистеме Из Параметры["ИнформацияКлиента"]["ИнформацияОСистеме"] Цикл + ИмяОперацииСтатистики = "СтатистикаКлиента.ИнформацияОСистеме." + ТекИнфоОСистеме.Ключ + "." + ТекИнфоОСистеме.Значение; + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиСутки(ИмяОперацииСтатистики, ХешПользователя, 1); + КонецЦикла; + КонецПроцедуры Процедура ЗаписатьИнформацияКлиента(Параметры) - - ХешПользователя = Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; - - ИмяОперацииСтатистики = "СтатистикаКлиента.АктивныхПользователей"; - ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиЧас(ИмяОперацииСтатистики, ХешПользователя, 1); - - ИмяОперацииСтатистики = "СтатистикаКлиента.АктивныхОкон"; - Значение = Параметры["ИнформацияКлиента"]["АктивныхОкон"]; - ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиЧас(ИмяОперацииСтатистики, ХешПользователя, Значение); - + + ХешПользователя = Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; + + ИмяОперацииСтатистики = "СтатистикаКлиента.АктивныхПользователей"; + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиЧас(ИмяОперацииСтатистики, ХешПользователя, 1); + + ИмяОперацииСтатистики = "СтатистикаКлиента.АктивныхОкон"; + Значение = Параметры["ИнформацияКлиента"]["АктивныхОкон"]; + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистикиЧас(ИмяОперацииСтатистики, ХешПользователя, Значение); + КонецПроцедуры Процедура ЗаписатьДанныеСКлиента(Параметры) - - ТекДата = ТекущаяУниверсальнаяДата(); - - Замеры = Параметры["Замеры"]; - Для Каждого ЗамерыТипа Из Замеры Цикл - - ТипЗаписи = ЗамерыТипа.Ключ; - - Если ТипЗаписи = 0 Тогда - ЗаписатьДанныеСКлиентаТочные(ЗамерыТипа.Значение); - Иначе - ЗаписатьДанныеСКлиентаУникальные(ЗамерыТипа.Значение, ТипЗаписи, ТекДата); - КонецЕсли; - - КонецЦикла; - + + ТекДата = ТекущаяУниверсальнаяДата(); + + Замеры = Параметры["Замеры"]; + Для Каждого ЗамерыТипа Из Замеры Цикл + + ТипЗаписи = ЗамерыТипа.Ключ; + + Если ТипЗаписи = 0 Тогда + ЗаписатьДанныеСКлиентаТочные(ЗамерыТипа.Значение); + Иначе + ЗаписатьДанныеСКлиентаУникальные(ЗамерыТипа.Значение, ТипЗаписи, ТекДата); + КонецЕсли; + + КонецЦикла; + КонецПроцедуры Процедура ЗаписатьДанныеСКлиентаТочные(Замеры) - - РегистрыСведений.БуферОперацийСтатистики.ЗаписатьОперацииБизнесСтатистики(Замеры); - + + РегистрыСведений.БуферОперацийСтатистики.ЗаписатьОперацииБизнесСтатистики(Замеры); + КонецПроцедуры Процедура ЗаписатьДанныеСКлиентаУникальные(Замеры, ТипЗаписи, ТекДата) - - Если ТипЗаписи = 1 Тогда - ПериодЗаписи = НачалоЧаса(ТекДата); - ИначеЕсли ТипЗаписи = 2 Тогда - ПериодЗаписи = НачалоДня(ТекДата); - КонецЕсли; - - ПараметрыЗаписи = Новый Структура("ИмяОперации, КлючУникальности, Значение, Замещать, ТипЗаписи, ПериодЗаписи"); - Для Каждого ТекЗамер Из Замеры Цикл - - ПараметрыЗаписи.ИмяОперации = ТекЗамер.Значение.ОперацияСтатистики; - ПараметрыЗаписи.КлючУникальности = ТекЗамер.Значение.Ключ; - ПараметрыЗаписи.Значение = ТекЗамер.Значение.Значение; - ПараметрыЗаписи.Замещать = ТекЗамер.Значение.Замещать; - ПараметрыЗаписи.ТипЗаписи = ТипЗаписи; - ПараметрыЗаписи.ПериодЗаписи = ПериодЗаписи; - - ЗаписатьОперациюБизнесСтатистикиСлужебная(ПараметрыЗаписи); - - КонецЦикла; - + + Если ТипЗаписи = 1 Тогда + ПериодЗаписи = НачалоЧаса(ТекДата); + ИначеЕсли ТипЗаписи = 2 Тогда + ПериодЗаписи = НачалоДня(ТекДата); + КонецЕсли; + + ПараметрыЗаписи = Новый Структура("ИмяОперации, КлючУникальности, Значение, Замещать, ТипЗаписи, ПериодЗаписи"); + Для Каждого ТекЗамер Из Замеры Цикл + + ПараметрыЗаписи.ИмяОперации = ТекЗамер.Значение.ОперацияСтатистики; + ПараметрыЗаписи.КлючУникальности = ТекЗамер.Значение.Ключ; + ПараметрыЗаписи.Значение = ТекЗамер.Значение.Значение; + ПараметрыЗаписи.Замещать = ТекЗамер.Значение.Замещать; + ПараметрыЗаписи.ТипЗаписи = ТипЗаписи; + ПараметрыЗаписи.ПериодЗаписи = ПериодЗаписи; + + ЗаписатьОперациюБизнесСтатистикиСлужебная(ПараметрыЗаписи); + + КонецЦикла; + КонецПроцедуры #КонецОбласти @@ -2241,37 +2348,37 @@ КонецПроцедуры Процедура ЗаписатьОперациюБизнесСтатистикиСлужебная(ПараметрыЗаписи) Экспорт - - ПериодЗаписи = ПараметрыЗаписи.ПериодЗаписи; - ТипЗаписи = ПараметрыЗаписи.ТипЗаписи; - Ключ = ПараметрыЗаписи.КлючУникальности; - ОперацияСтатистики = ЦентрМониторингаПовтИсп.ПолучитьСсылкуОперацииСтатистики(ПараметрыЗаписи.ИмяОперации); - Значение = ПараметрыЗаписи.Значение; - Замещать = ПараметрыЗаписи.Замещать; - - РегистрыСведений.ЗамерыСтатистики.ЗаписатьОперациюБизнесСтатистики(ПериодЗаписи, ТипЗаписи, Ключ, ОперацияСтатистики, Значение, Замещать); - + + ПериодЗаписи = ПараметрыЗаписи.ПериодЗаписи; + ТипЗаписи = ПараметрыЗаписи.ТипЗаписи; + Ключ = ПараметрыЗаписи.КлючУникальности; + ОперацияСтатистики = ЦентрМониторингаПовтИсп.ПолучитьСсылкуОперацииСтатистики(ПараметрыЗаписи.ИмяОперации); + Значение = ПараметрыЗаписи.Значение; + Замещать = ПараметрыЗаписи.Замещать; + + РегистрыСведений.ЗамерыСтатистики.ЗаписатьОперациюБизнесСтатистики(ПериодЗаписи, ТипЗаписи, Ключ, ОперацияСтатистики, Значение, Замещать); + КонецПроцедуры Процедура ВыполнитьДействияПриОбнаруженииКопии() - - ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); - ПараметрыЦентраМониторинга.ИдентификаторИнформационнойБазы = Новый УникальныйИдентификатор(); - ПараметрыЦентраМониторинга.НомерКрайнегоПакета = 0; - - УстановитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); - - РегистрыСведений.ПакетыДляОтправки.Очистить(); - + + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); + ПараметрыЦентраМониторинга.ИдентификаторИнформационнойБазы = Новый УникальныйИдентификатор(); + ПараметрыЦентраМониторинга.НомерКрайнегоПакета = 0; + + УстановитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + РегистрыСведений.ПакетыДляОтправки.Очистить(); + КонецПроцедуры Процедура УстановитьРазделениеСеанса(Использование, ОбластьДанных = Неопределено) - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - МодульРаботаВМоделиСервиса.УстановитьРазделениеСеанса(Использование, ОбластьДанных); - КонецЕсли; - + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.УстановитьРазделениеСеанса(Использование, ОбластьДанных); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/Module.bsl new file mode 100644 index 000000000..37f2ffa71 --- /dev/null +++ b/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/Module.bsl @@ -0,0 +1,26 @@ +#Область СлужебныеПроцедурыИФункции + +Функция ШаблонПоВладельцу(ВладелецШаблона) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ШаблоныСообщений.Ссылка КАК Ссылка + |ИЗ + | Справочник.ШаблоныСообщений КАК ШаблоныСообщений + |ГДЕ + | ШаблоныСообщений.ВладелецШаблона = &ВладелецШаблона"; + + Запрос.УстановитьПараметр("ВладелецШаблона", ВладелецШаблона); + + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + Возврат РезультатЗапроса.Выгрузить()[0].Ссылка; + Иначе + Возврат Справочники.ШаблоныСообщений.ПустаяСсылка(); + КонецЕсли; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/ШаблоныСообщенийВызовСервера.mdo b/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/ШаблоныСообщенийВызовСервера.mdo new file mode 100644 index 000000000..2a70c558d --- /dev/null +++ b/SSL/src/CommonModules/ШаблоныСообщенийВызовСервера/ШаблоныСообщенийВызовСервера.mdo @@ -0,0 +1,10 @@ + + + ШаблоныСообщенийВызовСервера + + ru + Шаблоны сообщений вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl index 6b5188be2..75ce74615 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl @@ -637,7 +637,8 @@ // Ошибка при создании внешний печатной формы. Создаем дальше письмо, без этой печатной формы. ЗаписьЖурналаРегистрации( ИмяСобытияЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, НСтр("ru = 'Ошибка при создании внешний печатной формы.'")); + УровеньЖурналаРегистрации.Ошибка,,, НСтр("ru = 'Ошибка при создании внешний печатной формы. По причине:'") + + Символы.ПС + ОписаниеОшибки()); Прервать; КонецПопытки; @@ -1593,7 +1594,7 @@ ПолучатьДопРеквизиты = МодульУправлениеСвойствами.ИспользоватьДопРеквизиты(Предмет); Если ПолучатьДопРеквизиты Или ПолучатьДопСведения Тогда - ЗначенияСвойств = МодульУправлениеСвойствами.ПолучитьЗначенияСвойств(Предмет, ПолучатьДопРеквизиты, ПолучатьДопСведения); + ЗначенияСвойств = МодульУправлениеСвойствами.ЗначенияСвойств(Предмет, ПолучатьДопРеквизиты, ПолучатьДопСведения); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl index 3883905fe..c61083712 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl @@ -45,7 +45,6 @@ КонецФункции - // Получает подписи объекта и возвращает их. // // Параметры: @@ -74,7 +73,7 @@ // Функция УстановленныеПодписи(Объект) Экспорт - ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.УстановленныеПодписи",, Истина); + ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.УстановленныеПодписи", Истина); УстановитьПривилегированныйРежим(Истина); @@ -268,7 +267,7 @@ // Процедура ОбновитьПодпись(Объект, Знач СвойстваПодписи) Экспорт - ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.ОбновитьПодпись",, Истина); + ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.ОбновитьПодпись", Истина); Если ТипЗнч(Объект) = Тип("СправочникСсылка." + "ВерсииФайлов") Или ТипЗнч(Объект) = Тип("СправочникОбъект." + "ВерсииФайлов") Тогда @@ -390,7 +389,6 @@ КонецПроцедуры - // Получает массив сертификатов шифрования. // Параметры: // Объект - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы", "ВерсииФайлов" или "Файлы". @@ -400,7 +398,7 @@ // Функция СертификатыШифрования(Объект) Экспорт - ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.СертификатыШифрования", Ложь, Истина); + ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.СертификатыШифрования", Истина); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ЭлектроннаяПодпись.СертификатыШифрования", "Объект", Объект, Новый ОписаниеТипов(Метаданные.РегистрыСведений.СертификатыШифрования.Измерения.ЗашифрованныйОбъект.Тип,, @@ -514,7 +512,6 @@ КонецПроцедуры - // Возвращает дату, извлеченную из двоичных данных подписи или Неопределено. // // Параметры: @@ -808,6 +805,8 @@ #Область ДляВызоваИзДругихПодсистем +// ЭлектронноеВзаимодействие + // Следующие процедуры и функции предназначены для интеграции с 1С:Библиотека электронных документов. // Возвращает менеджер криптографии (на сервере) для указанной программы. @@ -1157,6 +1156,8 @@ КонецФункции +// Конец ЭлектронноеВзаимодействие + #КонецОбласти #КонецОбласти @@ -1471,10 +1472,10 @@ КонецПроцедуры -Процедура ПроверитьПараметрОбъект(Объект, ИмяПроцедуры, РегистрПодписей = Истина, ТолькоСсылки = Ложь) +Процедура ПроверитьПараметрОбъект(Объект, ИмяПроцедуры, ТолькоСсылки = Ложь) ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Объект", Объект, - ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыВладельцев(РегистрПодписей, ТолькоСсылки)); + ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыВладельцев(ТолькоСсылки)); ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index e3c0b1984..3f9a69795 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -878,7 +878,7 @@ // Процедура ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами() Экспорт - ПерейтиПоНавигационнойСсылке("http://its.1c.ru/bmk/dsig/errors"); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/dsig/errors"); КонецПроцедуры @@ -907,6 +907,8 @@ #Область ДляВызоваИзДругихПодсистем +// ЭлектронноеВзаимодействие + // Следующие процедуры и функции предназначены для интеграции с 1С:Библиотека электронных документов. // Создает и возвращает менеджер криптографии (на клиенте) для указанной программы. @@ -1125,6 +1127,8 @@ КонецПроцедуры +// Конец ЭлектронноеВзаимодействие + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl index 31b665594..c693fa88a 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl @@ -277,6 +277,7 @@ // процедуры ПроверитьСертификатСправочника общего модуля ЭлектроннаяПодписьКлиент, кроме того // параметр МенеджерКриптографии не будет определен в процедурах ПриДополнительнойПроверкеСертификата // общих модулей ЭлектроннаяПодписьПереопределяемый и ЭлектроннаяПодписьКлиентПереопределяемый. +// // ВводитьПароль - Булево - если установить Ложь, тогда ввод пароля для закрытой части ключа сертификата будет скрыт. // Не учитывается, если параметр СтандартныеПроверки не установлен в Ложь. // diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl index 90fb9ba36..4439751e3 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl @@ -45,10 +45,40 @@ КонецПроцедуры -// Определяет доступность электронной подписи для файла по его типу -Функция ДоступнаЭлектроннаяПодпись(ТипФайла) Экспорт +// Определяет доступность электронной подписи для объекта (по его типу) +Функция ДоступнаЭлектроннаяПодпись(ТипОбъекта) Экспорт - Возврат Метаданные.ОпределяемыеТипы.ПодписанныйОбъект.Тип.СодержитТип(ТипФайла); + Возврат ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыВладельцев().Получить(ТипОбъекта) <> Неопределено; + +КонецФункции + +// Возвращает адрес сертификата во временном хранилище и его расширение. +// +// Параметры: +// СведенияОЭлектроннойПодписи - Структура - Строка с подписями из массива полученного методом ЭлектроннаяПодпись.УстановленныеПодписи. +// УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы. +// +// Возвращаемое значение: +// Структура - +// * РасширениеСертификата - Строка - Расширение файла сертификата. +// * АдресСертификата - Строка - Адрес во временном хранилище, по которому был помещен сертификат. +// +Функция ДанныеПоСертификату(СведенияОЭлектроннойПодписи, УникальныйИдентификатор) Экспорт + + Результат = Новый Структура("РасширениеСертификата, АдресСертификата"); + ДанныеСертификата = СведенияОЭлектроннойПодписи.Сертификат.Получить(); + + Если ТипЗнч(ДанныеСертификата) = Тип("Строка") Тогда + Результат.РасширениеСертификата = "txt"; + Результат.АдресСертификата = ПоместитьВоВременноеХранилище( + ДвоичныеДанныеСтроки(ДанныеСертификата), УникальныйИдентификатор); + Иначе + Результат.РасширениеСертификата = "cer"; + Результат.АдресСертификата = ПоместитьВоВременноеХранилище( + ДанныеСертификата, УникальныйИдентификатор); + КонецЕсли; + + Возврат Результат; КонецФункции @@ -554,37 +584,28 @@ МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты).ПолучитьВсе(); - Если Не Личные Тогда - Массив = МенеджерКриптографии.ПолучитьХранилищеСертификатов( - ТипХранилищаСертификатовКриптографии.СертификатыПолучателей).ПолучитьВсе(); - - Для каждого Сертификат Из Массив Цикл - МассивСертификатов.Добавить(Сертификат); - КонецЦикла; - КонецЕсли; - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( ТаблицаСвойствСертификатов, МассивСертификатов, БезОтбора); + + Если Не Личные Тогда + МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( + ТипХранилищаСертификатовКриптографии.СертификатыПолучателей).ПолучитьВсе(); + + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( + ТаблицаСвойствСертификатов, МассивСертификатов, БезОтбора); + КонецЕсли; КонецЕсли; КонецЕсли; Если ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда - МодульЭлектроннаяПодписьВМоделиСервисаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьВМоделиСервисаКлиентСервер"); - Если МодульЭлектроннаяПодписьВМоделиСервисаКлиентСервер.ИспользованиеВозможно() Тогда - - МассивСертификатов = Новый Массив; - МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); - ПерсональныеСертификаты = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); - Для Каждого ПерсональныйСертификат Из ПерсональныеСертификаты Цикл - МассивСертификатов.Добавить(ПерсональныйСертификат); - КонецЦикла; - - Если Не Личные Тогда - СертификатыПолучателей = МодульХранилищеСертификатов.Получить("СертификатыПолучателей"); - Для Каждого СертификатПолучателя Из СертификатыПолучателей Цикл - МассивСертификатов.Добавить(СертификатПолучателя); - КонецЦикла; - КонецЕсли; + МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); + МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); + + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( + ТаблицаСвойствСертификатов, МассивСертификатов, БезОтбора, , Истина); + + Если Не Личные Тогда + МассивСертификатов = МодульХранилищеСертификатов.Получить("СертификатыПолучателей"); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( ТаблицаСвойствСертификатов, МассивСертификатов, БезОтбора, , Истина); @@ -1585,6 +1606,22 @@ КонецФункции +Функция ДвоичныеДанныеСтроки(ДанныеСтроки) + + ВременныйФайл = ПолучитьИмяВременногоФайла(); + + ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл, КодировкаТекста.UTF8); + ЗаписьТекста.Записать(ДанныеСтроки); + ЗаписьТекста.Закрыть(); + + ДвоичныеДанныеСертификата = Новый ДвоичныеДанные(ВременныйФайл); + + УдалитьФайлы(ВременныйФайл); + + Возврат ДвоичныеДанныеСертификата; + +КонецФункции + // Для процедур НастроитьФормуПодписанияШифрованияРасшифровки, СертификатПриИзмененииНаСервере. Процедура ЗаполнитьСуществующиеСертификатыПользователя(СписокВыбора, ОтпечаткиСертификатовНаКлиенте, @@ -1847,13 +1884,15 @@ Функция ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ЭлектроннаяПодписьВМоделиСервиса") Тогда - МодульЭлектроннаяПодписьВМоделиСервисаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьВМоделиСервисаКлиентСервер"); - Возврат МодульЭлектроннаяПодписьВМоделиСервисаКлиентСервер.ИспользованиеВозможно(); + Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ЭлектроннаяПодписьВМоделиСервиса") Тогда + Возврат Ложь; КонецЕсли; - Возврат Ложь; + МодульЭлектроннаяПодписьВМоделиСервисаКлиентСервер = + ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьВМоделиСервисаКлиентСервер"); + + Возврат МодульЭлектроннаяПодписьВМоделиСервисаКлиентСервер.ИспользованиеВозможно(); КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl index 075a7f052..76021a2d6 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl @@ -34,19 +34,11 @@ КонецЕсли; Если ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда - МодульЭлектроннаяПодписьВМоделиСервисаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьВМоделиСервисаКлиентСервер"); - Если МодульЭлектроннаяПодписьВМоделиСервисаКлиентСервер.ИспользованиеВозможно() Тогда - - МассивСертификатов = Новый Массив; - МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); - ПерсональныеСертификаты = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); - Для Каждого ПерсональныйСертификат Из ПерсональныеСертификаты Цикл - МассивСертификатов.Добавить(ПерсональныйСертификат); - КонецЦикла; - - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( - ТаблицаСвойствСертификатов, МассивСертификатов, Истина, , Истина); - КонецЕсли; + МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); + МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); + + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( + ТаблицаСвойствСертификатов, МассивСертификатов, Истина, , Истина); КонецЕсли; Возврат ОбработатьЛичныеСертификаты(ТаблицаСвойствСертификатов, Отбор); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl index 07e347143..8cf41d09d 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl @@ -2173,8 +2173,8 @@ Возврат; ИначеЕсли Не Результат.Свойство("ПолноеИмяФайла") - Или ТипЗнч(Результат.ПолноеИмяФайла) <> Тип("Строка") - Или ПустаяСтрока(Результат.ПолноеИмяФайла) Тогда + Или ТипЗнч(Результат.ПолноеИмяФайла) <> Тип("Строка") + Или ПустаяСтрока(Результат.ПолноеИмяФайла) Тогда Если Контекст.ОбработкаРезультата <> Неопределено Тогда ВыполнитьОбработкуОповещения(Контекст.ОбработкаРезультата, Ложь); @@ -2240,11 +2240,12 @@ Контекст.Вставить("ИмяФайлаПодписи", Контекст.ОписаниеПодписи.ИмяФайлаПодписи); Если ПустаяСтрока(Контекст.ИмяФайлаПодписи) Тогда - Контекст.ИмяФайлаПодписи = Контекст.СоставИмениФайлаДанных.ИмяБезРасширения + " - " - + Строка(Контекст.ОписаниеПодписи.КомуВыданСертификат) + "." + Контекст.РасширениеДляФайловПодписи; + Контекст.ИмяФайлаПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаПодписи(Контекст.СоставИмениФайлаДанных.ИмяБезРасширения, + Строка(Контекст.ОписаниеПодписи.КомуВыданСертификат), Контекст.РасширениеДляФайловПодписи); + Иначе + Контекст.ИмяФайлаПодписи = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(Контекст.ИмяФайлаПодписи); КонецЕсли; - Контекст.ИмяФайлаПодписи = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(Контекст.ИмяФайлаПодписи); СоставИмениФайлаПодписи = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ИмяФайлаПодписи); Контекст.Вставить("ИмяФайлаПодписиБезРасширения", СоставИмениФайлаПодписи.ИмяБезРасширения); @@ -2295,10 +2296,8 @@ Возврат; КонецЕсли; - Контекст.ИмяФайлаПодписи = Контекст.ИмяФайлаПодписиБезРасширения - + " (" + Строка(Контекст.Счетчик) + ")" + "." + Контекст.РасширениеДляФайловПодписи; - - Контекст.ИмяФайлаПодписи = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(Контекст.ИмяФайлаПодписи); + Контекст.ИмяФайлаПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаПодписи(Контекст.ИмяФайлаПодписиБезРасширения, + "(" + Строка(Контекст.Счетчик) + ")", Контекст.РасширениеДляФайловПодписи, Ложь); СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклНачало(Контекст); @@ -2365,10 +2364,8 @@ Возврат; КонецЕсли; - Контекст.ИмяФайлаСертификата = Контекст.ИмяФайлаСертификатаБезРасширения - + " (" + Строка(Контекст.Счетчик) + ")" + "." + Контекст.ОписаниеПодписи.РасширениеСертификата; - - Контекст.ИмяФайлаСертификата = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(Контекст.ИмяФайлаСертификата); + Контекст.ИмяФайлаСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаСертификата(Контекст.ИмяФайлаСертификатаБезРасширения, + "(" + Строка(Контекст.Счетчик) + ")", Контекст.ОписаниеПодписи.РасширениеСертификата, Ложь); СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклНачало(Контекст); @@ -2379,11 +2376,10 @@ Контекст.Вставить("ИмяФайлаСертификата", ""); - Контекст.ИмяФайлаСертификата = Контекст.СоставИмениФайлаДанных.ИмяБезРасширения + " - " - + Строка(Контекст.ОписаниеПодписи.КомуВыданСертификат) + "." + Контекст.ОписаниеПодписи.РасширениеСертификата; + Контекст.ИмяФайлаСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаСертификата(Контекст.СоставИмениФайлаДанных.ИмяБезРасширения, + Строка(Контекст.ОписаниеПодписи.КомуВыданСертификат), Контекст.ОписаниеПодписи.РасширениеСертификата); - Контекст.ИмяФайлаСертификата = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(Контекст.ИмяФайлаСертификата); - СоставИмениФайлаСертификата = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ИмяФайлаСертификата); + СоставИмениФайлаСертификата = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ИмяФайлаСертификата); Контекст.Вставить("ИмяФайлаСертификатаБезРасширения", СоставИмениФайлаСертификата.ИмяБезРасширения); СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклНачало(Контекст); @@ -2518,9 +2514,9 @@ ЭлектроннаяПодписьКлиентПереопределяемый.ПриОпределенииРазделаСтатьиНаИТС(Раздел); Если Раздел = "УчетВГосударственныхУчреждениях" Тогда - ПерейтиПоНавигационнойСсылке("http://its.1c.ru/bmk/bud/digsig"); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/bud/digsig"); Иначе - ПерейтиПоНавигационнойСсылке("http://its.1c.ru/bmk/comm/digsig"); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/comm/digsig"); КонецЕсли; КонецПроцедуры @@ -4001,7 +3997,6 @@ КонецПроцедуры - Процедура НачатьПроверкуПодписиСообщенияSOAP(ИнформацияМодуляКриптографии, Контекст) Экспорт ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); @@ -4665,7 +4660,7 @@ Контекст.СвойстваСертификатов[Контекст.Индекс].Сертификат, Контекст); КонецПроцедуры - + // Продолжение процедуры ВыполнитьНаСтороне. Процедура ВыполнитьНаСторонеПодготовкаСертификатовПослеИнициализацииСертификатаВМоделиСервиса(СертификатКриптографии, Контекст) diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl index b76d359c5..af5e6e0e7 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl @@ -62,6 +62,36 @@ КонецФункции +// Формирует имя файла подписи по шаблону. +// +Функция ИмяФайлаПодписи(ИмяБезРасширения, КомуВыданСертификат, РасширениеДляФайловПодписи = Неопределено, ТребуетсяРазделитель = Истина) Экспорт + + Если НЕ ЗначениеЗаполнено(РасширениеДляФайловПодписи) Тогда + РасширениеДляФайловПодписи = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляФайловПодписи; + КонецЕсли; + + Разделитель = ?(ТребуетсяРазделитель, " - ", " "); + + ИмяФайлаПодписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3.%4", + ИмяБезРасширения, Разделитель, КомуВыданСертификат, РасширениеДляФайловПодписи); + + Возврат ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаПодписи); + +КонецФункции + +// Формирует имя файла сертификата по шаблону. +// +Функция ИмяФайлаСертификата(ИмяБезРасширения, КомуВыданСертификат, РасширениеДляФайловСертификата, ТребуетсяРазделитель = Истина) Экспорт + + Разделитель = ?(ТребуетсяРазделитель, " - ", " "); + + ИмяФайлаСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3.%4", + ИмяБезРасширения, Разделитель, КомуВыданСертификат, РасширениеДляФайловСертификата); + + Возврат ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаСертификата); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl index 168d0c3dd..2f723e6b2 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl @@ -120,16 +120,10 @@ КонецФункции -Функция ТипыВладельцев(РегистрПодписей = Истина, ТолькоСсылки = Ложь) Экспорт +Функция ТипыВладельцев(ТолькоСсылки = Ложь) Экспорт - МассивТипов = Новый Массив; - Если РегистрПодписей Тогда - Типы = Метаданные.РегистрыСведений.ЭлектронныеПодписи.Измерения.ПодписанныйОбъект.Тип.Типы(); - Иначе - Типы = Метаданные.РегистрыСведений.СертификатыШифрования.Измерения.ЗашифрованныйОбъект.Тип.Типы(); - КонецЕсли; - - МассивТипов = Новый Массив; + Результат = Новый Соответствие; + Типы = Метаданные.ОпределяемыеТипы.ПодписанныйОбъект.Тип.Типы(); Для Каждого Тип Из Типы Цикл Если Тип = Тип("Неопределено") @@ -137,19 +131,14 @@ Или Тип = Тип("СправочникСсылка." + "ВерсииФайлов") Тогда Продолжить; КонецЕсли; - МассивТипов.Добавить(Тип); + Результат.Вставить(Тип, Истина); Если Не ТолькоСсылки Тогда - ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); - Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда - ИмяТипаОбъекта = СтрЗаменить(ПолноеИмя, ".", "Объект."); - Иначе - ИмяТипаОбъекта = СтрЗаменить(ПолноеИмя, ".", "Object."); - КонецЕсли; - МассивТипов.Добавить(Тип(ИмяТипаОбъекта)); + ИмяТипаОбъекта = СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), ".", "Объект."); + Результат.Вставить(Тип(ИмяТипаОбъекта), Истина); КонецЕсли; КонецЦикла; - Возврат МассивТипов; + Возврат Новый ФиксированноеСоответствие(Результат); КонецФункции diff --git a/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png b/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png new file mode 100644 index 000000000..a16dbb8df Binary files /dev/null and b/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png differ diff --git a/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.zip b/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.zip deleted file mode 100644 index 1b98385c8..000000000 Binary files a/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.zip and /dev/null differ diff --git a/SSL/src/CommonPictures/ЗначокЩита/Picture.zip b/SSL/src/CommonPictures/ЗначокЩита/Picture.zip new file mode 100644 index 000000000..de6d6fcda Binary files /dev/null and b/SSL/src/CommonPictures/ЗначокЩита/Picture.zip differ diff --git a/SSL/src/CommonPictures/ЗначокЩита/ЗначокЩита.mdo b/SSL/src/CommonPictures/ЗначокЩита/ЗначокЩита.mdo new file mode 100644 index 000000000..d22af02b7 --- /dev/null +++ b/SSL/src/CommonPictures/ЗначокЩита/ЗначокЩита.mdo @@ -0,0 +1,8 @@ + + + ЗначокЩита + + ru + Значок щита + + diff --git a/SSL/src/CommonPictures/ПолнотекстовыйПоискДалее/Picture.zip b/SSL/src/CommonPictures/ПолнотекстовыйПоискДалее/Picture.zip deleted file mode 100644 index 8eb4f7b79..000000000 Binary files a/SSL/src/CommonPictures/ПолнотекстовыйПоискДалее/Picture.zip and /dev/null differ diff --git a/SSL/src/CommonPictures/ПолнотекстовыйПоискДалее/ПолнотекстовыйПоискДалее.mdo b/SSL/src/CommonPictures/ПолнотекстовыйПоискДалее/ПолнотекстовыйПоискДалее.mdo deleted file mode 100644 index 72aa1acb2..000000000 --- a/SSL/src/CommonPictures/ПолнотекстовыйПоискДалее/ПолнотекстовыйПоискДалее.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ПолнотекстовыйПоискДалее - - ru - Полнотекстовый поиск далее - - diff --git a/SSL/src/CommonPictures/ПолнотекстовыйПоискНазад/Picture.zip b/SSL/src/CommonPictures/ПолнотекстовыйПоискНазад/Picture.zip deleted file mode 100644 index 7517d0d04..000000000 Binary files a/SSL/src/CommonPictures/ПолнотекстовыйПоискНазад/Picture.zip and /dev/null differ diff --git a/SSL/src/CommonPictures/ПолнотекстовыйПоискНазад/ПолнотекстовыйПоискНазад.mdo b/SSL/src/CommonPictures/ПолнотекстовыйПоискНазад/ПолнотекстовыйПоискНазад.mdo deleted file mode 100644 index 8503aad4a..000000000 --- a/SSL/src/CommonPictures/ПолнотекстовыйПоискНазад/ПолнотекстовыйПоискНазад.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ПолнотекстовыйПоискНазад - - ru - Полнотекстовый поиск назад - - diff --git a/SSL/src/CommonPictures/УдалитьПиктограммыПараметровИОтборов/Picture.zip b/SSL/src/CommonPictures/УдалитьПиктограммыПараметровИОтборов/Picture.zip deleted file mode 100644 index bed281ecf..000000000 Binary files a/SSL/src/CommonPictures/УдалитьПиктограммыПараметровИОтборов/Picture.zip and /dev/null differ diff --git a/SSL/src/CommonPictures/УдалитьПиктограммыПараметровИОтборов/УдалитьПиктограммыПараметровИОтборов.mdo b/SSL/src/CommonPictures/УдалитьПиктограммыПараметровИОтборов/УдалитьПиктограммыПараметровИОтборов.mdo deleted file mode 100644 index fd26ebc13..000000000 --- a/SSL/src/CommonPictures/УдалитьПиктограммыПараметровИОтборов/УдалитьПиктограммыПараметровИОтборов.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - УдалитьПиктограммыПараметровИОтборов - - ru - (не используется) Пиктограммы параметров и отборов - - diff --git a/SSL/src/CommonPictures/УдалитьПиктограммыСтруктурыОтчета/Picture.zip b/SSL/src/CommonPictures/УдалитьПиктограммыСтруктурыОтчета/Picture.zip deleted file mode 100644 index 641ee967a..000000000 Binary files a/SSL/src/CommonPictures/УдалитьПиктограммыСтруктурыОтчета/Picture.zip and /dev/null differ diff --git a/SSL/src/CommonPictures/УдалитьПиктограммыСтруктурыОтчета/УдалитьПиктограммыСтруктурыОтчета.mdo b/SSL/src/CommonPictures/УдалитьПиктограммыСтруктурыОтчета/УдалитьПиктограммыСтруктурыОтчета.mdo deleted file mode 100644 index 043ee435c..000000000 --- a/SSL/src/CommonPictures/УдалитьПиктограммыСтруктурыОтчета/УдалитьПиктограммыСтруктурыОтчета.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - УдалитьПиктограммыСтруктурыОтчета - - ru - (не используется) Пиктограммы структуры отчета - - diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index ed4da6f31..3754a2924 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,17 +1,17 @@ - + БиблиотекаСтандартныхПодсистем ru Библиотека стандартных подсистем, редакция 2.3 - - - - - - - + + + + + + + ManagedApplication PersonalComputer Russian @@ -19,7 +19,7 @@ Role.АдминистраторСистемы Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Фирма "1С" - 2.4.2.164 + 2.4.3.162 http://downloads.v8.1c.ru/tmplts/ true @@ -108,6 +108,7 @@ StyleItem.ФайлЗанятыйТекущимПользователем StyleItem.ФонУправляющегоПоля StyleItem.ЦветПустойГиперссылки + StyleItem.ЦветРазделаПанелиФункций CommonPicture.GoogleMaps CommonPicture.Skype CommonPicture.АрхивАнкета @@ -186,6 +187,7 @@ CommonPicture.ЗнакСтоп CommonPicture.ЗнакСтопЧБ CommonPicture.ЗначокЗаставкиВнешнейОперации + CommonPicture.ЗначокЩита CommonPicture.ИерархическийСписок CommonPicture.ИзменитьШрифт CommonPicture.Информация @@ -276,8 +278,6 @@ CommonPicture.ПозвонитьИлиОтправитьSMS CommonPicture.ПоказатьОтличия CommonPicture.ПоказатьТолькоВыбранныеРоли - CommonPicture.ПолнотекстовыйПоискДалее - CommonPicture.ПолнотекстовыйПоискНазад CommonPicture.ПолужирноеНачертание CommonPicture.ПользовательскийМакетУдалить CommonPicture.ПоляИСортировки @@ -374,8 +374,6 @@ CommonPicture.ТолстаяГраницаСверху CommonPicture.ТолстаяГраницаСнизу CommonPicture.УвеличитьШрифт - CommonPicture.УдалитьПиктограммыПараметровИОтборов - CommonPicture.УдалитьПиктограммыСтруктурыОтчета CommonPicture.УменьшитьШрифт CommonPicture.Успешно CommonPicture.Успешно32 @@ -416,6 +414,7 @@ SessionParameter.ОбластьДанныхИспользование SessionParameter.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных SessionParameter.ОграничениеДоступаНаУровнеЗаписейВключено + SessionParameter.ОтмененныеДлительныеОперации SessionParameter.ОшибкаРасхожденияВерсийПриПолученииДанных SessionParameter.ПараметрыКлиентаНаСервере SessionParameter.ПараметрыОбработчикаОбновления @@ -504,6 +503,7 @@ Role.ЧтениеИнформацииОВерсияхОбъектов Role.ЧтениеКурсовВалют Role.ЧтениеОтветовНаВопросыАнкет + Role.ЧтениеРезультатовПроверкиУчета CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную CommonTemplate.КомпонентаTWAIN CommonTemplate.КомпонентаПечатиQRКода @@ -609,8 +609,8 @@ CommonModule.ЗащитаПерсональныхДанныхКлиент CommonModule.ЗащитаПерсональныхДанныхПереопределяемый CommonModule.ЗащитаПерсональныхДанныхПовтИсп - CommonModule.ИнтеграцияСтандартныхПодсистем - CommonModule.ИнтеграцияСтандартныхПодсистемКлиент + CommonModule.ИнтеграцияПодсистемБСП + CommonModule.ИнтеграцияПодсистемБСПКлиент CommonModule.ИнтеграцияСТехнологиейСервиса CommonModule.ИнтеграцияСТехнологиейСервисаКлиент CommonModule.ИнтерфейсыСообщенийВМоделиСервиса @@ -621,6 +621,12 @@ CommonModule.КалендарныеГрафики CommonModule.КалендарныеГрафикиПереопределяемый CommonModule.КалендарныеГрафикиСлужебныйВМоделиСервиса + CommonModule.КонтрольВеденияУчета + CommonModule.КонтрольВеденияУчетаКлиент + CommonModule.КонтрольВеденияУчетаПереопределяемый + CommonModule.КонтрольВеденияУчетаПовтИсп + CommonModule.КонтрольВеденияУчетаСлужебный + CommonModule.КонтрольВеденияУчетаСлужебныйКлиент CommonModule.КурсыВалютСлужебныйВМоделиСервиса CommonModule.НапоминанияПользователяВызовСервера CommonModule.НапоминанияПользователяГлобальный @@ -683,11 +689,13 @@ CommonModule.ОтправкаSMSПереопределяемый CommonModule.ОтправкаSMSПовтИсп CommonModule.ОтправкаSMSЧерезGSMINFORM + CommonModule.ОтправкаSMSЧерезSMS4B CommonModule.ОтправкаSMSЧерезSMSRU CommonModule.ОтправкаSMSЧерезSMSЦЕНТР CommonModule.ОтправкаSMSЧерезБилайн CommonModule.ОтправкаSMSЧерезМТС CommonModule.ОтправкаSMSЧерезСМСУслуги + CommonModule.ОтчетОДвиженияхДокументаСлужебныйКлиент CommonModule.ОтчетыКлиент CommonModule.ОтчетыКлиентПереопределяемый CommonModule.ОтчетыКлиентСервер @@ -891,6 +899,7 @@ CommonModule.ЦентрМониторингаПовтИсп CommonModule.ЦентрМониторингаСлужебный CommonModule.ШаблоныСообщений + CommonModule.ШаблоныСообщенийВызовСервера CommonModule.ШаблоныСообщенийКлиент CommonModule.ШаблоныСообщенийКлиентСервер CommonModule.ШаблоныСообщенийПереопределяемый @@ -914,6 +923,7 @@ XDTOPackage.AgentScripts XDTOPackage.ApdexExport XDTOPackage.ApdexExport_1_0_0_2 + XDTOPackage.ApdexExport_1_0_0_3 XDTOPackage.ApplicationExtensionsManifest_1_0_0_1 XDTOPackage.ApplicationExtensionsPermissions_1_0_0_1 XDTOPackage.ApplicationPermissions_1_0_0_1 @@ -922,6 +932,7 @@ XDTOPackage.EnterpriseData_1_2_3 XDTOPackage.EnterpriseData_1_3_8 XDTOPackage.EnterpriseData_1_4_4 + XDTOPackage.EnterpriseData_1_5_2 XDTOPackage.EnterpriseDataExchange_1_0_1_1 XDTOPackage.ExchangeMessage XDTOPackage.SuppliedData @@ -1025,6 +1036,7 @@ ScheduledJob.ПланированиеИзвлеченияТекстаВМоделиСервиса ScheduledJob.ПланированиеОбработкиЗаданий ScheduledJob.ПолучениеИОтправкаЭлектронныхПисем + ScheduledJob.ПроверкаВеденияУчета ScheduledJob.РассылкаОтчетов ScheduledJob.СборИОтправкаСтатистики ScheduledJob.СинхронизацияДанных @@ -1115,6 +1127,7 @@ DefinedType.ЗначениеДоступаСГруппамиЗначенийДоступаОбъект DefinedType.Интервьюер DefinedType.КонтактВзаимодействия + DefinedType.КонтекстПроверокВеденияУчета DefinedType.МестоХраненияФункциональныхОпций DefinedType.ОбъектАдресации DefinedType.ОбъектСДополнительнымиКомандами @@ -1137,6 +1150,7 @@ DefinedType.ПрисоединенныйФайлОбъект DefinedType.Респондент DefinedType.СубъектПерсональныхДанных + DefinedType.УточнениеКонтекстаПроверкиСостоянияСистемы DefinedType.ФизическоеЛицо CommonCommand.ВерсииФайла CommonCommand.ВремяТекущегоСеанса @@ -1414,6 +1428,7 @@ Catalog.ВерсииРасширений Catalog.ВерсииФайлов Catalog.ВидыКонтактнойИнформации + Catalog.ВидыПроверок Catalog.ВнешниеКомпоненты Catalog.ВнешниеПользователи Catalog.ВопросыШаблонаАнкеты @@ -1442,11 +1457,13 @@ Catalog.ПользовательскиеНастройкиОтчетов Catalog.ПоставляемыеДанные Catalog.ПравилаОбработкиЭлектроннойПочты + Catalog.ПравилаПроверкиУчета Catalog.ПредопределенныеВариантыОтчетов Catalog.ПредопределенныеВариантыОтчетовРасширений Catalog.ПрограммыЭлектроннойПодписиИШифрования Catalog.ПроизводственныеКалендари Catalog.ПрофилиГруппДоступа + Catalog.ПрофилиКлючевыхОпераций Catalog.РассылкиОтчетов Catalog.РолиИсполнителей Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования @@ -1479,6 +1496,7 @@ Document.ЭлектронноеПисьмоИсходящее DocumentJournal.Взаимодействия DocumentJournal.СогласияНаОбработкуПерсональныхДанных + Enum.ВажностьПроблемыУчета Enum.ВариантыSMTPАутентификации Enum.ВариантыВажностиВзаимодействия Enum.ВариантыВажностиЗадачи @@ -1518,6 +1536,7 @@ Enum.СостоянияЗаявленияНаВыпускСертификата Enum.СостоянияПроцессовДляЗапуска Enum.СостоянияСообщенияSMS + Enum.СпособВыполненияПроверки Enum.СпособыPOP3Аутентификации Enum.СпособыSMTPАутентификации Enum.СпособыВызоваДополнительныхОбработок @@ -1567,10 +1586,13 @@ Report.ИспользуемыеВнешниеРесурсы Report.МестаИспользованияСсылок Report.ОбъемНенужныхФайлов + Report.ОтчетОДвиженияхДокумента + Report.ОценкаПроизводительности Report.ПраваДоступа Report.ПроверкаЦелостностиТома Report.ПрогрессОтложенногоОбновления Report.ПросроченныеЗадачи + Report.РезультатыПроверкиУчета Report.СведенияОПользователях Report.СогласияНаОбработкуПерсональныхДанныхДействующие Report.СогласияНаОбработкуПерсональныхДанныхИстекающие @@ -1716,12 +1738,14 @@ InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений InformationRegister.ПричиныИзмененияАдресныхСведений InformationRegister.ПроцессыДляЗапуска + InformationRegister.ПсевдонимыПредопределенныхУзлов InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux InformationRegister.РабочиеКаталогиФайлов InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов InformationRegister.РежимыПодключенияВнешнихМодулей InformationRegister.РезультатыОбменаДанными + InformationRegister.РезультатыПроверкиУчета InformationRegister.РейтингАктивностиОбластейДанных InformationRegister.РучныеИзмененияГрафиковРаботы InformationRegister.СведенияОПользователях @@ -1751,6 +1775,7 @@ InformationRegister.УдалитьГруппыЗначенийДоступа InformationRegister.УдалитьЗамерыВремени InformationRegister.УдалитьЗамерыВремени2 + InformationRegister.УдалитьЗамерыВремени3 InformationRegister.УдалитьЗамерыВремениТехнологические InformationRegister.УдалитьНаборыЗначенийДоступа InformationRegister.УдалитьНастройкиВерсионированияОбъектов diff --git a/SSL/src/Configuration/MainSectionPicture.png b/SSL/src/Configuration/MainSectionPicture.png deleted file mode 100644 index 061357c46..000000000 Binary files a/SSL/src/Configuration/MainSectionPicture.png and /dev/null differ diff --git a/SSL/src/Configuration/MainSectionPicture.zip b/SSL/src/Configuration/MainSectionPicture.zip new file mode 100644 index 000000000..5c1f44036 Binary files /dev/null and b/SSL/src/Configuration/MainSectionPicture.zip differ diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index 6f9a2b000..3dd5b39bd 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,b4e68803-d24f-4803-b66f-46ba7ef2cc4d,1,8c30dfa2-be0c-4c2c-984d-083fb7a51ec0,"2.4.2.164","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5408,1,0,e9f2f169-02a4-4b4a-bb6d-dd6f760eaca5,e9f2f169-02a4-4b4a-bb6d-dd6f760eaca5,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,1,0,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,1,0,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,1,0,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,1,0,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,1,0,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,1,0,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,1,0,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,1,0,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,1,0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,1,0,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,1,0,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,1,0,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,1,0,ad73f3a3-1dad-4920-af41-bda2b947a2f7,ad73f3a3-1dad-4920-af41-bda2b947a2f7,1,0,98b67b5a-3550-4a64-9e07-07fcc9154c73,98b67b5a-3550-4a64-9e07-07fcc9154c73,1,0,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,1,0,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,1,0,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,1,0,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,1,0,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,1,0,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,1,0,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,1,0,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,1,0,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,1,0,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,1,0,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,1,0,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,1,0,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,1,0,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,1,0,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,1,0,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,1,0,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,1,0,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,1,0,d5a5f53b-9cd5-4036-a379-31680cec3c24,d5a5f53b-9cd5-4036-a379-31680cec3c24,1,0,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,1,0,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,1,0,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,1,0,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,1,0,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,1,0,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,1,0,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,1,0,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,1,0,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,1,0,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,1,0,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,1,0,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,1,0,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,1,0,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,1,0,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,1,0,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,1,0,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,1,0,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,1,0,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,1,0,5a88f624-7b7e-43fe-8bc4-ae85d832a855,5a88f624-7b7e-43fe-8bc4-ae85d832a855,1,0,42e39ef7-268f-4053-b4e5-4bceab17d3e4,42e39ef7-268f-4053-b4e5-4bceab17d3e4,1,0,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,1,0,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,1,0,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,1,0,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,1,0,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,1,0,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,1,0,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,1,0,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,1,0,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,1,0,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,1,0,9200527c-b6b9-4962-9440-10449583e1e3,9200527c-b6b9-4962-9440-10449583e1e3,1,0,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,1,0,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,1,0,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,1,0,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,1,0,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,1,0,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,1,0,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,1,0,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,1,0,8b4614aa-c769-49f4-a281-a0ffb101abf1,8b4614aa-c769-49f4-a281-a0ffb101abf1,1,0,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,1,0,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,1,0,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,1,0,4c3a39e3-40ee-423b-91f0-14b60e045b40,4c3a39e3-40ee-423b-91f0-14b60e045b40,1,0,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,1,0,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,1,0,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,1,0,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,1,0,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,1,0,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,1,0,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,1,0,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,1,0,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,1,0,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,1,0,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,1,0,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,1,0,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,1,0,7185a8f8-48c4-43a9-b31f-102302b8f152,7185a8f8-48c4-43a9-b31f-102302b8f152,1,0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,1,0,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,1,0,c573a29f-4c39-402d-8af4-e0fff80877f8,c573a29f-4c39-402d-8af4-e0fff80877f8,1,0,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,1,0,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,1,0,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,1,0,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,1,0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,1,0,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,1,0,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,1,0,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,1,0,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,1,0,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,1,0,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,1,0,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,1,0,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,1,0,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,1,0,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,1,0,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,1,0,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,1,0,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,1,0,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,1,0,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,1,0,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,1,0,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,1,0,7f7598e5-ca54-487e-b95c-b18d330b034c,7f7598e5-ca54-487e-b95c-b18d330b034c,1,0,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,1,0,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,1,0,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,1,0,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,1,0,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,1,0,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,1,0,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,1,0,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,1,0,64e03321-33a4-424d-a101-90f1e0da4c2e,64e03321-33a4-424d-a101-90f1e0da4c2e,1,0,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,1,0,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,1,0,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,1,0,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,1,0,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,1,0,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,1,0,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,1,0,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,1,0,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,1,0,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,1,0,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,1,0,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,1,0,691f9902-6b95-4579-a3d9-3b2b5b548776,691f9902-6b95-4579-a3d9-3b2b5b548776,1,0,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,1,0,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,1,0,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,1,0,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,1,0,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,1,0,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,1,0,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,1,0,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,1,0,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,1,0,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,1,0,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,1,0,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,1,0,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,1,0,a3131bf3-88b1-431c-a01c-be6e26396f91,a3131bf3-88b1-431c-a01c-be6e26396f91,1,0,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,1,0,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,1,0,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1,0,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,1,0,2a12ce95-3214-4bd2-a0e6-c2af41875821,2a12ce95-3214-4bd2-a0e6-c2af41875821,1,0,bf05548c-babf-402b-b698-9a62e7c69add,bf05548c-babf-402b-b698-9a62e7c69add,1,0,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,1,0,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,1,0,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,1,0,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,1,0,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,1,0,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,1,0,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,1,0,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,1,0,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,1,0,ed4edc6f-048a-40d5-8f61-989895c95cf3,ed4edc6f-048a-40d5-8f61-989895c95cf3,1,0,c2049ace-3095-4dd7-9cc0-7721118451ad,c2049ace-3095-4dd7-9cc0-7721118451ad,1,0,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,1,0,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,1,0,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,1,0,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,1,0,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,1,0,022f99dd-e1b7-42a7-8141-a8c2e8628901,022f99dd-e1b7-42a7-8141-a8c2e8628901,1,0,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,1,0,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,1,0,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,1,0,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,1,0,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,1,0,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,1,0,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,1,0,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,1,0,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,1,0,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,1,0,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,1,0,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,1,0,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,1,0,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,1,0,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,1,0,2997e4da-d831-48e4-96e2-c29f9d077302,2997e4da-d831-48e4-96e2-c29f9d077302,1,0,30f59002-a23d-4eff-b84f-f280f11b220e,30f59002-a23d-4eff-b84f-f280f11b220e,1,0,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,1,0,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,1,0,14583452-805e-423d-be9a-e04683c7c46f,14583452-805e-423d-be9a-e04683c7c46f,1,0,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,1,0,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,1,0,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,1,0,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,1,0,b1e837ff-0edd-4525-b2e2-92cc7990e00e,b1e837ff-0edd-4525-b2e2-92cc7990e00e,1,0,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,1,0,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,1,0,cafbea88-86f0-4a44-98f4-70d1837da452,cafbea88-86f0-4a44-98f4-70d1837da452,1,0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,1,0,ceb286e9-4e7c-49fa-a695-424073e0dffc,ceb286e9-4e7c-49fa-a695-424073e0dffc,1,0,727689c3-c0d8-496f-a47b-4f3243ad8974,727689c3-c0d8-496f-a47b-4f3243ad8974,1,0,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,1,0,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,1,0,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,1,0,4bad7c64-131a-42cb-9be7-d61f14f456d0,4bad7c64-131a-42cb-9be7-d61f14f456d0,1,0,d46e141b-7a10-4d65-971f-3a35f2114017,d46e141b-7a10-4d65-971f-3a35f2114017,1,0,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,1,0,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,1,0,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,1,0,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,1,0,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1,0,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,1,0,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,1,0,e70a6eab-791f-4c70-bb92-f069c7486d1b,e70a6eab-791f-4c70-bb92-f069c7486d1b,1,0,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,1,0,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,1,0,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,1,0,772e7011-0019-4edc-b673-b7151cf4fa6c,772e7011-0019-4edc-b673-b7151cf4fa6c,1,0,21ac47fa-12c2-43e2-9b57-afdf521d3485,21ac47fa-12c2-43e2-9b57-afdf521d3485,1,0,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,1,0,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,1,0,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,1,0,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,1,0,8d1c44d7-52f2-4089-9d77-2f03bf051455,8d1c44d7-52f2-4089-9d77-2f03bf051455,1,0,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,1,0,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,1,0,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,1,0,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,1,0,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,1,0,529cc5b5-835f-4e70-9232-a9649fdc7ae5,529cc5b5-835f-4e70-9232-a9649fdc7ae5,1,0,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,1,0,4875a235-bcc8-47eb-83e3-a66f0f690b97,4875a235-bcc8-47eb-83e3-a66f0f690b97,1,0,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,1,0,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,1,0,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,1,0,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,1,0,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,1,0,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,1,0,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,1,0,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,1,0,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,1,0,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,1,0,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,1,0,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,1,0,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,1,0,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,1,0,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,1,0,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,1,0,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,1,0,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,1,0,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,1,0,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,1,0,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,1,0,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,1,0,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,1,0,3fe0ef25-ce56-435d-b343-eadfec91a636,3fe0ef25-ce56-435d-b343-eadfec91a636,1,0,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,1,0,62ef3558-5ad3-44ab-8578-1acbbfa54135,62ef3558-5ad3-44ab-8578-1acbbfa54135,1,0,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,1,0,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,1,0,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,1,0,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,1,0,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,1,0,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,1,0,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,1,0,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,1,0,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,1,0,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,1,0,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,1,0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1,0,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,1,0,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,1,0,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,1,0,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,1,0,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,1,0,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,1,0,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,1,0,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,1,0,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,1,0,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,1,0,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,1,0,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,1,0,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,1,0,6f21c34c-26aa-493d-aa08-2d4366b4064a,6f21c34c-26aa-493d-aa08-2d4366b4064a,1,0,0f55650a-2422-42a9-8258-61df4c17f1ef,0f55650a-2422-42a9-8258-61df4c17f1ef,1,0,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,1,0,3eaece9d-c9be-4b0b-a6f6-a3932274b806,3eaece9d-c9be-4b0b-a6f6-a3932274b806,1,0,5d9427ec-981d-4fb5-878b-8dba0d3a5536,5d9427ec-981d-4fb5-878b-8dba0d3a5536,1,0,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,1,0,a0047712-5769-495d-97af-20d06751a5b4,a0047712-5769-495d-97af-20d06751a5b4,1,0,e729c3c6-16e5-405b-99b1-a88022300c6d,e729c3c6-16e5-405b-99b1-a88022300c6d,1,0,9c089520-8233-42f6-8eee-9839ac708c6f,9c089520-8233-42f6-8eee-9839ac708c6f,1,0,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,1,0,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,1,0,89055896-49dd-4cfd-ab78-8ac3698e12d5,89055896-49dd-4cfd-ab78-8ac3698e12d5,1,0,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,1,0,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,1,0,672c4741-6d7b-4d3e-baa7-389bef0625d7,672c4741-6d7b-4d3e-baa7-389bef0625d7,1,0,04398ec0-1c13-43f8-8f5d-7b7619592a4d,04398ec0-1c13-43f8-8f5d-7b7619592a4d,1,0,ce463861-92df-47f2-bd0f-4a2dbf72aacc,ce463861-92df-47f2-bd0f-4a2dbf72aacc,1,0,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,1,0,1487d68c-7a2f-48cf-8c80-4074072ed52c,1487d68c-7a2f-48cf-8c80-4074072ed52c,1,0,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,1,0,d97c6536-fd62-4c9a-b83e-490a29a0721b,d97c6536-fd62-4c9a-b83e-490a29a0721b,1,0,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,1,0,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,1,0,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,1,0,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,1,0,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,1,0,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,1,0,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,1,0,057aadbd-f41f-4de4-95f4-9301557e6a0e,057aadbd-f41f-4de4-95f4-9301557e6a0e,1,0,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,1,0,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,1,0,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,1,0,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,1,0,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,1,0,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,1,0,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,1,0,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,1,0,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,1,0,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,1,0,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,1,0,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,1,0,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,1,0,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,1,0,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,1,0,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,1,0,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,1,0,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,1,0,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,1,0,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,1,0,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,1,0,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,1,0,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,1,0,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,1,0,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,1,0,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1,0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,1,0,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,1,0,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,1,0,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,1,0,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,1,0,aa8c4a71-3276-4b83-8be2-3528129e58b3,aa8c4a71-3276-4b83-8be2-3528129e58b3,1,0,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,1,0,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,1,0,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,1,0,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,1,0,0072986b-0463-4a39-9851-f9adeda99716,0072986b-0463-4a39-9851-f9adeda99716,1,0,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,1,0,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,1,0,0d4a26fb-7176-43f2-8767-d3e227c7306a,0d4a26fb-7176-43f2-8767-d3e227c7306a,1,0,933cbafc-5667-4a91-8b1d-dca3d7662522,933cbafc-5667-4a91-8b1d-dca3d7662522,1,0,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,1,0,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,1,0,b6e98aee-4936-491d-8c67-8490e1af2e34,b6e98aee-4936-491d-8c67-8490e1af2e34,1,0,b292eb46-df87-43c0-9a37-93c5a22af252,b292eb46-df87-43c0-9a37-93c5a22af252,1,0,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,1,0,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,1,0,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,1,0,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,1,0,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,1,0,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,1,0,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,1,0,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,1,0,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,1,0,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,1,0,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,1,0,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,1,0,e3b84128-95e1-45df-84db-5e1791779543,e3b84128-95e1-45df-84db-5e1791779543,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,e9d95895-8708-4035-89ad-72573b870491,e9d95895-8708-4035-89ad-72573b870491,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f0152598-ffa3-4eb7-811f-906e569373e6,f0152598-ffa3-4eb7-811f-906e569373e6,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,89318397-b3a6-4468-985b-ed5cb8ab5cdb,89318397-b3a6-4468-985b-ed5cb8ab5cdb,1,0,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,4436b2cf-2d71-401f-99fd-012ff0c91fbd,4436b2cf-2d71-401f-99fd-012ff0c91fbd,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,5396be45-d7c0-43df-aed4-cad062a02b11,5396be45-d7c0-43df-aed4-cad062a02b11,1,0,017e3da8-e48e-488b-9bbf-4fef1a4f3417,017e3da8-e48e-488b-9bbf-4fef1a4f3417,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,1e015740-5b45-4729-9732-57359a7c602f,1e015740-5b45-4729-9732-57359a7c602f,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,cd74d617-8ebe-4a7d-b011-38c98d856d8c,cd74d617-8ebe-4a7d-b011-38c98d856d8c,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,8de2c020-0ebe-4374-93d7-d2e19ed82470,8de2c020-0ebe-4374-93d7-d2e19ed82470,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,789a2027-8601-434c-bf47-37696a3966ad,789a2027-8601-434c-bf47-37696a3966ad,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,4c3085e1-2f86-4af4-a392-ab45e30a7152,4c3085e1-2f86-4af4-a392-ab45e30a7152,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,1,0,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,1,0,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1,0,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,1,0,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,1,0,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,1,0,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,1,0,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,1,0,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,1,0,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,1,0,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,1,0,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1,0,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,1,0,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,1,0,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,1,0,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,1,0,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,1,0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,1,0,23314bcd-2dd4-43f1-9fdb-ae182a48c886,23314bcd-2dd4-43f1-9fdb-ae182a48c886,1,0,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,1,0,9440a132-366f-4fc9-bd72-2544ba2b072a,9440a132-366f-4fc9-bd72-2544ba2b072a,1,0,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,1,0,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,1,0,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,1,0,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,1,0,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,1,0,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,1,0,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,1,0,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,1,0,cadb54f0-dcff-4f96-983e-a309fd72f330,cadb54f0-dcff-4f96-983e-a309fd72f330,1,0,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,1,0,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,1,0,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,1,0,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,1,0,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,1,0,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,1,0,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,1,0,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,1,0,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,1,0,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,1,0,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,1,0,9ff1c73e-71be-4ea6-97fb-e710d995ee62,9ff1c73e-71be-4ea6-97fb-e710d995ee62,1,0,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,1,0,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,1,0,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,1,0,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,1,0,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,1,0,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,1,0,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,1,0,9d669d30-a0af-4095-852a-96b4224ee933,9d669d30-a0af-4095-852a-96b4224ee933,1,0,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,1,0,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,1,0,126d5d78-a2b0-4c16-b429-bf8d251280e7,126d5d78-a2b0-4c16-b429-bf8d251280e7,1,0,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,1,0,12443114-1931-4eb7-968a-7dbe166b7298,12443114-1931-4eb7-968a-7dbe166b7298,1,0,0080c29d-ec54-43a8-aab8-c67e0279b6b7,0080c29d-ec54-43a8-aab8-c67e0279b6b7,1,0,a0271f6e-dc70-4dfe-a395-203e8a89f933,a0271f6e-dc70-4dfe-a395-203e8a89f933,1,0,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,1,0,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,1,0,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,1,0,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,1,0,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,1,0,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,1,0,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,1,0,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,1,0,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,1,0,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,1,0,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,1,0,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,1,0,70f156d8-9cb4-442d-a36b-7a43d03bcd12,70f156d8-9cb4-442d-a36b-7a43d03bcd12,1,0,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,1,0,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,1,0,f0a6de82-45ab-4153-bccf-df82fc960aa1,f0a6de82-45ab-4153-bccf-df82fc960aa1,1,0,77adf47b-6015-46fc-9e29-f1c025ea0d81,77adf47b-6015-46fc-9e29-f1c025ea0d81,1,0,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,1,0,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,1,0,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,1,0,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,1,0,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,1,0,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,1,0,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,1,0,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,1,0,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,1,0,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,1,0,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,1,0,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,1,0,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,1,0,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,1,0,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,1,0,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,1,0,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,1,0,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,1,0,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,1,0,f41e5a5b-394b-423a-bee5-ed4d1da0be71,f41e5a5b-394b-423a-bee5-ed4d1da0be71,1,0,23db175f-ddfb-4af7-9c0c-232b6adb7daf,23db175f-ddfb-4af7-9c0c-232b6adb7daf,1,0,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,1,0,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,1,0,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,1,0,84f05fe4-51d3-49a8-83e7-1cae2028147e,84f05fe4-51d3-49a8-83e7-1cae2028147e,1,0,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,1,0,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,1,0,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,1,0,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,1,0,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,1,0,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,1,0,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,1,0,c6267c5a-3878-4d0c-8674-4d4dd672b99c,c6267c5a-3878-4d0c-8674-4d4dd672b99c,1,0,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,1,0,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,1,0,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,1,0,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,1,0,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,1,0,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,1,0,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,1,0,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,1,0,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,1,0,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,1,0,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,1,0,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,1,0,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,1,0,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,1,0,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,1,0,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,1,0,0b303d25-e141-431f-828c-1778d3c247f6,0b303d25-e141-431f-828c-1778d3c247f6,1,0,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,1,0,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,1,0,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,1,0,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,1,0,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,1,0,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,1,0,edf81bbb-905a-474d-959a-db5629a8e104,edf81bbb-905a-474d-959a-db5629a8e104,1,0,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,1,0,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,1,0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,1,0,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1,0,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,1,0,a84891cc-e996-489a-abde-5b5af166a057,a84891cc-e996-489a-abde-5b5af166a057,1,0,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,1,0,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,1,0,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,1,0,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,1,0,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,1,0,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,1,0,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,1,0,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,1,0,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,1,0,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,1,0,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,1,0,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,1,0,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,1,0,f20a04a7-84fa-48e3-8ac5-28176c1fcada,f20a04a7-84fa-48e3-8ac5-28176c1fcada,1,0,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,1,0,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,1,0,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,1,0,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,1,0,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,1,0,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,1,0,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,1,0,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,1,0,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,1,0,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,1,0,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,1,0,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,1,0,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,1,0,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,1,0,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,1,0,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,1,0,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,1,0,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,1,0,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,1,0,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,1,0,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,1,0,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,1,0,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,1,0,646def82-bc88-4187-8be0-93938656a20f,646def82-bc88-4187-8be0-93938656a20f,1,0,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,1,0,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,1,0,06323ebd-5f74-494a-99a5-eb77e23d8637,06323ebd-5f74-494a-99a5-eb77e23d8637,1,0,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,1,0,7f6222c1-1a50-4565-b66b-bcb430674efc,7f6222c1-1a50-4565-b66b-bcb430674efc,1,0,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,1,0,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,1,0,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,1,0,52ae6431-afb3-4dea-b106-00e11b174ec7,52ae6431-afb3-4dea-b106-00e11b174ec7,1,0,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,1,0,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,1,0,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,1,0,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,1,0,8b83324c-e10e-49d1-99d7-5bc468c25975,8b83324c-e10e-49d1-99d7-5bc468c25975,1,0,ddb75923-27bf-4996-b024-4bc6eb0f59a7,ddb75923-27bf-4996-b024-4bc6eb0f59a7,1,0,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,1,0,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,1,0,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,1,0,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,1,0,3be0acc7-223a-46ec-9ea2-ec99b869fa78,3be0acc7-223a-46ec-9ea2-ec99b869fa78,1,0,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,1,0,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,1,0,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,1,0,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,1,0,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,1,0,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,1,0,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,1,0,486083d8-33b1-453f-9f05-5ff867e2f4ba,486083d8-33b1-453f-9f05-5ff867e2f4ba,1,0,e4f9d9f6-38d7-4056-a95a-987ad2da2211,e4f9d9f6-38d7-4056-a95a-987ad2da2211,1,0,22c21c2b-4297-43b2-88f0-9555d22f7a14,22c21c2b-4297-43b2-88f0-9555d22f7a14,1,0,734f61c4-5429-4a09-8697-8949ac5e6bd1,734f61c4-5429-4a09-8697-8949ac5e6bd1,1,0,d04e0e2d-0a5f-4866-b0b3-b582915db899,d04e0e2d-0a5f-4866-b0b3-b582915db899,1,0,19649d3f-52aa-4054-bb84-a6a11d212495,19649d3f-52aa-4054-bb84-a6a11d212495,1,0,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,1,0,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,1,0,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,1,0,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,1,0,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,1,0,b7736108-89bd-44eb-89c1-8a5a774058f1,b7736108-89bd-44eb-89c1-8a5a774058f1,1,0,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,1,0,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,1,0,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,1,0,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,1,0,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,1,0,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,1,0,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,1,0,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,1,0,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,1126157b-64c0-4d64-8551-f31c5ed0fd29,1126157b-64c0-4d64-8551-f31c5ed0fd29,1,0,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,1,0,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,1,0,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,1,0,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,1,0,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,1,0,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,1,0,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,1,0,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,1,0,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,1,0,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,1,0,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,1,0,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,1,0,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,1,0,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,1,0,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,1,0,a5633248-8611-4e9b-b223-2f59e7b84a65,a5633248-8611-4e9b-b223-2f59e7b84a65,1,0,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,1,0,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,1,0,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,1,0,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,1,0,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,1,0,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,1,0,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,1,0,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,1,0,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,1,0,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,1,0,e1823be2-b646-4a1a-a9a9-c925a12c0586,e1823be2-b646-4a1a-a9a9-c925a12c0586,1,0,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,1,0,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,1,0,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,1,0,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,1,0,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,1,0,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,1,0,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,1,0,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,1,0,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,1,0,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,1,0,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,1,0,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1,0,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,1,0,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,1,0,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,1,0,3f7ee937-d853-47b7-a1f5-d821208e3531,3f7ee937-d853-47b7-a1f5-d821208e3531,1,0,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,1,0,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,1,0,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,1,0,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,1,0,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,1,0,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,1,0,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,1,0,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,1,0,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,1,0,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,1,0,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,1,0,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,1,0,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,1,0,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,1,0,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,1,0,90032ffa-f117-4a34-82f8-cc7e5a22a542,90032ffa-f117-4a34-82f8-cc7e5a22a542,1,0,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,1,0,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,1,0,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,1,0,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,1,0,49e787c9-753a-468a-b8dd-2e970d9a1fed,49e787c9-753a-468a-b8dd-2e970d9a1fed,1,0,e871dea7-1953-4511-90b0-e0957afac4c0,e871dea7-1953-4511-90b0-e0957afac4c0,1,0,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,1,0,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,1,0,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,1,0,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,1,0,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,1,0,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,1,0,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,1,0,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,1,0,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,1,0,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,1,0,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,1,0,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,1,0,7172bed5-b12b-4e83-b15d-1d95b63a6272,7172bed5-b12b-4e83-b15d-1d95b63a6272,1,0,25d75a3c-b801-4b1e-aed8-90e667f36c67,25d75a3c-b801-4b1e-aed8-90e667f36c67,1,0,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,1,0,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,1,0,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,1,0,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,1,0,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,1,0,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,1,0,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,1,0,49e21b87-beae-4640-a497-ef468da0cbbc,49e21b87-beae-4640-a497-ef468da0cbbc,1,0,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,1,0,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,1,0,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,1,0,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,1,0,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,1,0,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,1,0,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,1,0,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,1,0,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,1,0,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,1,0,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,1,0,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,1,0,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,1,0,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,1,0,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,1,0,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,1,0,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,1,0,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,1,0,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,1,0,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,1,0,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,1,0,393074c4-0afc-4232-8101-11a4ea6ed28a,393074c4-0afc-4232-8101-11a4ea6ed28a,1,0,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,1,0,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,1,0,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,1,0,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,1,0,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,1,0,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,1,0,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,1,0,0e1a45b0-d95d-415f-b954-5689610aa393,0e1a45b0-d95d-415f-b954-5689610aa393,1,0,4736b3d3-f696-4bdd-b0e3-0884ea88f623,4736b3d3-f696-4bdd-b0e3-0884ea88f623,1,0,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,1,0,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,1,0,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,1,0,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,1,0,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,1,0,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,1,0,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,1,0,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,1,0,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,1,0,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,1,0,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,1,0,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,1,0,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,1,0,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,1,0,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,1,0,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,1,0,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,1,0,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,1,0,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,1,0,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,1,0,c7f817ee-9f6a-454c-95a0-b279fd08055e,c7f817ee-9f6a-454c-95a0-b279fd08055e,1,0,1d49b1bb-5f90-46e4-adcf-55ad46442648,1d49b1bb-5f90-46e4-adcf-55ad46442648,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,1,0,259ede1f-05d3-4ece-8994-0ae3b2e89f49,259ede1f-05d3-4ece-8994-0ae3b2e89f49,1,0,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,1,0,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,1,0,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,1,0,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,1,0,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,1,0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,1,0,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,1,0,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,1,0,97edd94a-4bf2-4ed7-b98f-677f869b0715,97edd94a-4bf2-4ed7-b98f-677f869b0715,1,0,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,1,0,2fad50a6-6a3e-4f87-ab84-907364427a63,2fad50a6-6a3e-4f87-ab84-907364427a63,1,0,9567765b-8e02-4262-89a9-5c354109cc4c,9567765b-8e02-4262-89a9-5c354109cc4c,1,0,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1,0,258736e4-93c0-4a46-8caa-75be42c9f006,258736e4-93c0-4a46-8caa-75be42c9f006,1,0,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,1,0,56d0acf3-c888-4824-a6e4-27d61fa35415,56d0acf3-c888-4824-a6e4-27d61fa35415,1,0,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,1,0,439129dd-ad00-484c-b84a-fb325af979ed,439129dd-ad00-484c-b84a-fb325af979ed,1,0,dcae6376-f44c-421e-87f2-df83413c021e,dcae6376-f44c-421e-87f2-df83413c021e,1,0,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,1,0,151f2d0a-cc43-490d-ad7d-71390703aa72,151f2d0a-cc43-490d-ad7d-71390703aa72,1,0,2a515a4f-683b-4674-b097-62dd2d940c39,2a515a4f-683b-4674-b097-62dd2d940c39,1,0,d14058f5-dfd4-47eb-ae6d-01b7062f5940,d14058f5-dfd4-47eb-ae6d-01b7062f5940,1,0,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,1,0,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,1,0,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,1,0,fdb5b235-1978-4c2a-a03f-02341df00c3c,fdb5b235-1978-4c2a-a03f-02341df00c3c,1,0,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,1,0,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,1,0,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,1,0,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,1,0,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,1,0,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,1,0,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,1,0,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,1,0,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,1,0,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,1,0,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,1,0,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,1,0,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,1,0,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,1,0,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,1,0,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,1,0,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,1,0,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,1,0,1f927f76-5523-4880-9d26-d69a059f2b67,1f927f76-5523-4880-9d26-d69a059f2b67,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,1,0,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,1,0,ca85912b-87b4-481e-9184-017364b4603d,ca85912b-87b4-481e-9184-017364b4603d,1,0,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,1,0,2650db63-ca98-4a8a-8c36-165548aa5279,2650db63-ca98-4a8a-8c36-165548aa5279,1,0,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,1,0,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,1,0,a69525c7-27ff-48df-b26b-325ba580a53e,a69525c7-27ff-48df-b26b-325ba580a53e,1,0,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,1,0,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,1,0,e57f4619-b5ed-44de-a186-a13a3897731b,e57f4619-b5ed-44de-a186-a13a3897731b,1,0,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,1,0,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,1,0,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,1,0,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,1,0,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,1,0,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,1,0,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,1,0,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,1,0,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,1,0,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,1,0,bb3a9973-67ce-479e-8668-c2f3bb20301e,bb3a9973-67ce-479e-8668-c2f3bb20301e,1,0,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,1,0,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,1,0,37169451-1464-4f24-8ca6-802963ffb636,37169451-1464-4f24-8ca6-802963ffb636,1,0,c3a958b1-590f-4418-a74f-5982b478cf52,c3a958b1-590f-4418-a74f-5982b478cf52,1,0,ef0e618d-0942-460a-ac65-9aca2fed976e,ef0e618d-0942-460a-ac65-9aca2fed976e,1,0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,1,0,2ac8bd69-9fbf-4f15-b58d-397d9e903532,2ac8bd69-9fbf-4f15-b58d-397d9e903532,1,0,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,1,0,5b460b92-2c74-4f59-88b2-18d9aac42c04,5b460b92-2c74-4f59-88b2-18d9aac42c04,1,0,db05d35b-5f53-4c27-ba80-b477b9a98299,db05d35b-5f53-4c27-ba80-b477b9a98299,1,0,fa872ae1-b699-46fe-9d6a-e42e1388752b,fa872ae1-b699-46fe-9d6a-e42e1388752b,1,0,1acf34e6-c428-4130-82f0-5160dfcc0858,1acf34e6-c428-4130-82f0-5160dfcc0858,1,0,57046262-b9ce-4670-9cf5-6db9e58dd0d5,57046262-b9ce-4670-9cf5-6db9e58dd0d5,1,0,a9824176-36d5-4be5-9984-f4312ff48515,a9824176-36d5-4be5-9984-f4312ff48515,1,0,8e980ca0-1627-45e8-bd27-5dd1ac199459,8e980ca0-1627-45e8-bd27-5dd1ac199459,1,0,8b653beb-af9f-4f39-b691-ae14f80b7cd6,8b653beb-af9f-4f39-b691-ae14f80b7cd6,1,0,77559c11-713f-454d-aff4-56649e1350e9,77559c11-713f-454d-aff4-56649e1350e9,1,0,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0c965703-c1d0-48b7-80f9-b8d869ff98f5,1,0,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,1,0,7ba42162-557b-4e34-8aca-0cdee8cb2452,7ba42162-557b-4e34-8aca-0cdee8cb2452,1,0,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,1,0,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,1,0,dd577924-c6cb-4aa9-9db5-366d8958d00f,dd577924-c6cb-4aa9-9db5-366d8958d00f,1,0,8ed8f72e-404a-4be4-a44d-ddebbad5f411,8ed8f72e-404a-4be4-a44d-ddebbad5f411,1,0,e919bc4c-86e6-44f6-be27-5a729b63d042,e919bc4c-86e6-44f6-be27-5a729b63d042,1,0,ec580e4f-1518-4923-a10e-bc1da8688b37,ec580e4f-1518-4923-a10e-bc1da8688b37,1,0,91c3902a-314f-4d40-8bcc-8dd131fed2f4,91c3902a-314f-4d40-8bcc-8dd131fed2f4,1,0,ae2b21c5-9349-49e8-9627-26f05c21f43a,ae2b21c5-9349-49e8-9627-26f05c21f43a,1,0,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,1,0,917a19d7-73db-4247-b892-397598d67879,917a19d7-73db-4247-b892-397598d67879,1,0,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1,0,d8066600-c669-449d-a187-fdd3af8f7afa,d8066600-c669-449d-a187-fdd3af8f7afa,1,0,dadf86a6-c118-4827-b1b9-6cfee731242f,dadf86a6-c118-4827-b1b9-6cfee731242f,1,0,45bf7b20-f048-491a-a989-e50bea13d028,45bf7b20-f048-491a-a989-e50bea13d028,1,0,9ad3b432-5b49-44ee-9d8d-83c36458d927,9ad3b432-5b49-44ee-9d8d-83c36458d927,1,0,a9967bff-53b9-4295-a253-3647d956d3cb,a9967bff-53b9-4295-a253-3647d956d3cb,1,0,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,1,0,b8a31397-8974-44ec-92b0-7cbdc481cf7e,b8a31397-8974-44ec-92b0-7cbdc481cf7e,1,0,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,1,0,fb16c4d5-854c-4525-92be-b21fa2df5b0d,fb16c4d5-854c-4525-92be-b21fa2df5b0d,1,0,5771de21-2086-432b-ad91-de14a39bd5bc,5771de21-2086-432b-ad91-de14a39bd5bc,1,0,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,1,0,ed96fbfa-bda7-405c-9073-d0b6feffedad,ed96fbfa-bda7-405c-9073-d0b6feffedad,1,0,50c724cb-dde1-4313-9492-b1750bd0afc1,50c724cb-dde1-4313-9492-b1750bd0afc1,1,0,12901981-6106-4471-ab3a-e127c2bb4ebd,12901981-6106-4471-ab3a-e127c2bb4ebd,1,0,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,1,0,d5ea5dea-233d-4106-b9ba-f030d4f762ef,d5ea5dea-233d-4106-b9ba-f030d4f762ef,1,0,903af05e-5ac5-46aa-843b-d74f9e417c1d,903af05e-5ac5-46aa-843b-d74f9e417c1d,1,0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,1,0,a344290a-c9be-47a7-95ad-ced1b52a0995,a344290a-c9be-47a7-95ad-ced1b52a0995,1,0,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,1,0,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,1,0,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,1,0,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,1,0,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,1,0,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,1,0,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,1,0,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,1,0,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,1,0,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,1,0,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,1,0,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,1,0,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,1,0,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,1,0,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,1,0,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,1,0,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,1,0,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,1,0,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,1,0,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,1,0,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,1,0,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,1,0,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,1,0,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,1,0,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,1,0,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,1,0,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,1,0,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,1,0,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,1,0,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,1,0,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,1,0,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,1,0,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,1,0,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,1,0,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,1,0,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,1,0,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,1,0,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,1,0,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,1,0,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,1,0,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,1,0,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,1,0,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,1,0,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,1,0,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,1,0,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,1,0,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,1,0,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,1,0,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,1,0,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,1,0,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,1,0,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,1,0,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,1,0,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,1,0,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,1,0,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,1,0,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,1,0,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,1,0,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,1,0,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,1,0,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,1,0,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,1,0,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,1,0,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,1,0,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,1,0,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,1,0,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,1,0,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,1,0,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,1,0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,1,0,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,1,0,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,1,0,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,1,0,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,1,0,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,1,0,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,1,0,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,1,0,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,1,0,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,1,0,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,1,0,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,1,0,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,1,0,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,1,0,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,1,0,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,1,0,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,1,0,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,1,0,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,1,0,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,1,0,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,1,0,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,1,0,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,1,0,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,1,0,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,1,0,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,1,0,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,1,0,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,1,0,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,1,0,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1,0,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,1,0,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,1,0,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,1,0,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,1,0,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,1,0,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,1,0,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,1,0,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,1,0,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,1,0,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,1,0,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,1,0,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,1,0,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,1,0,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,1,0,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,1,0,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,1,0,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,1,0,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,1,0,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,1,0,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,1,0,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,1,0,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,1,0,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,1,0,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,1,0,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,1,0,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,1,0,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,1,0,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,1,0,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,1,0,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,1,0,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,1,0,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,1,0,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,1,0,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,1,0,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,1,0,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,1,0,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,1,0,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,1,0,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,1,0,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,1,0,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,1,0,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,1,0,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,1,0,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,1,0,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,1,0,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,1,0,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,1,0,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,1,0,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,1,0,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,1,0,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,1,0,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,1,0,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,1,0,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,1,0,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,1,0,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,1,0,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,1,0,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,1,0,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,1,0,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,1,0,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,1,0,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,1,0,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,1,0,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,1,0,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,1,0,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,1,0,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,1,0,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,1,0,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,1,0,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,1,0,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,1,0,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,1,0,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,1,0,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,1,0,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,1,0,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,1,0,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,1,0,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,1,0,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,1,0,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,1,0,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,1,0,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,1,0,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,1,0,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,1,0,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,1,0,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,1,0,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,1,0,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,1,0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,1,0,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,1,0,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,1,0,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,1,0,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,1,0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,1,0,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,1,0,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,1,0,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,1,0,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,1,0,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,1,0,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,1,0,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,1,0,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,1,0,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,1,0,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,1,0,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,1,0,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,1,0,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,1,0,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,1,0,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,1,0,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,1,0,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,1,0,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,1,0,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,1,0,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,1,0,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,1,0,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,1,0,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,1,0,9f36d26e-aa71-44d5-ac27-9aaa643555c3,9f36d26e-aa71-44d5-ac27-9aaa643555c3,1,0,87b8b5d7-d3d6-450a-adb1-5c875257ec80,87b8b5d7-d3d6-450a-adb1-5c875257ec80,1,0,e3640efe-e46c-4588-b251-dda23bf0641d,e3640efe-e46c-4588-b251-dda23bf0641d,1,0,bb6e6574-4328-4cf5-a043-a7d8f6c81414,bb6e6574-4328-4cf5-a043-a7d8f6c81414,1,0,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,1,0,522a4bff-34d3-46b2-8c66-0b30d881a86e,522a4bff-34d3-46b2-8c66-0b30d881a86e,1,0,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,1,0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1,0,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,1,0,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,1,0,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,1,0,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0f9c08c2-e7fa-4ea0-a935-f927feb01131,1,0,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,1,0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,1,0,57069b56-f732-41c0-9a75-cbdb1e88556c,57069b56-f732-41c0-9a75-cbdb1e88556c,1,0,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,1,0,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,1,0,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,1,0,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,1,0,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,1,0,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,1,0,5dcd8e28-b058-405a-bac4-defab7d4b789,5dcd8e28-b058-405a-bac4-defab7d4b789,1,0,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,1,0,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,1,0,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,1,0,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,1,0,da8f7f30-eb80-44db-a451-348306c90cd8,da8f7f30-eb80-44db-a451-348306c90cd8,1,0,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,1,0,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,1,0,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,1,0,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,1,0,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,1,0,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,1,0,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,1,0,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,1,0,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,1,0,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,1,0,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,1,0,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,1,0,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,1,0,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,1,0,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,1,0,f321e378-6d50-4567-8434-813f367d3a65,f321e378-6d50-4567-8434-813f367d3a65,1,0,27246fd8-a8a3-4244-b49a-c0372a812167,27246fd8-a8a3-4244-b49a-c0372a812167,1,0,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,1,0,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,1,0,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,1,0,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,1,0,5d338e31-a56b-45f0-8a62-0270ca543f6a,5d338e31-a56b-45f0-8a62-0270ca543f6a,1,0,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,1,0,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,1,0,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,1,0,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,1,0,c11d967b-1250-4345-90b0-011a96c5ae5e,c11d967b-1250-4345-90b0-011a96c5ae5e,1,0,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,1,0,24eed105-f612-4340-ad79-388a7b39b58c,24eed105-f612-4340-ad79-388a7b39b58c,1,0,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,1,0,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,1,0,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,1,0,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,1,0,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,1,0,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,1,0,6a2add61-edb7-4561-bae9-06b3741e7726,6a2add61-edb7-4561-bae9-06b3741e7726,1,0,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,1,0,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,1,0,80048d97-e917-4d03-bb49-e797e63f7fd2,80048d97-e917-4d03-bb49-e797e63f7fd2,1,0,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,1,0,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,1,0,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,1,0,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,1,0,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,1,0,ae3876e2-bd06-415b-9d9a-b77d787be09e,ae3876e2-bd06-415b-9d9a-b77d787be09e,1,0,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,1,0,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,1,0,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,1,0,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,1,0,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,1,0,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,1,0,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,1,0,b76c3bd6-924a-4378-acbe-6f17232b201b,b76c3bd6-924a-4378-acbe-6f17232b201b,1,0,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,1,0,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,1,0,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,1,0,9d358304-3fd0-4ec6-9400-cc498ff2f751,9d358304-3fd0-4ec6-9400-cc498ff2f751,1,0,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,1,0,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,1,0,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,1,0,74067eee-6cd4-4ae3-becc-457ecb51dc9a,74067eee-6cd4-4ae3-becc-457ecb51dc9a,1,0,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,1,0,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,1,0,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,1,0,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,1,0,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,1,0,343b979a-97e3-4eac-a314-3bd3eea9c15c,343b979a-97e3-4eac-a314-3bd3eea9c15c,1,0,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,1,0,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,1,0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,1,0,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,1,0,9f32e85c-2ed6-41db-b0ec-6d8596940e80,9f32e85c-2ed6-41db-b0ec-6d8596940e80,1,0,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,1,0,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,1,0,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,1,0,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,1,0,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,1,0,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,1,0,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,1,0,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,1,0,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,1,0,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,1,0,aa0c32ae-da52-4df9-8b77-99ea31f8df81,aa0c32ae-da52-4df9-8b77-99ea31f8df81,1,0,d7dcd391-3a0e-4aa9-9b53-467a1de67593,d7dcd391-3a0e-4aa9-9b53-467a1de67593,1,0,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,1,0,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,1,0,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,1,0,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,1,0,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,1,0,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,1,0,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,1,0,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,1,0,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,1,0,331db120-ba88-4eb3-a8ec-10691be82e2d,331db120-ba88-4eb3-a8ec-10691be82e2d,1,0,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,1,0,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,1,0,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,1,0,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,1,0,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,1,0,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,1,0,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,1,0,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,1,0,9ee03c48-c338-4655-9095-d490231df2a3,9ee03c48-c338-4655-9095-d490231df2a3,1,0,3924c17c-6ee3-4406-8023-0a79a242e389,3924c17c-6ee3-4406-8023-0a79a242e389,1,0,84a159ed-bc5f-4497-94d1-94b187b0bffe,84a159ed-bc5f-4497-94d1-94b187b0bffe,1,0,0a126b0d-28c8-4ed4-836f-e39e17693ad0,0a126b0d-28c8-4ed4-836f-e39e17693ad0,1,0,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,1,0,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,1,0,f95adb50-fa0b-434c-93dd-b7fd211220b7,f95adb50-fa0b-434c-93dd-b7fd211220b7,1,0,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,1,0,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,1,0,bd69bf55-dee0-4553-8f90-5fd025c0f773,bd69bf55-dee0-4553-8f90-5fd025c0f773,1,0,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,1,0,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,1,0,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,1,0,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,1,0,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,1,0,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,1,0,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,1,0,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,1,0,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,1,0,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,1,0,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,1,0,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,1,0,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,1,0,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,1,0,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,91d7687b-7627-473f-a08d-433f9d385107,91d7687b-7627-473f-a08d-433f9d385107,1,0,83db1b00-e9e3-41da-8a59-47589dcfd618,83db1b00-e9e3-41da-8a59-47589dcfd618,1,0,91d2d798-1498-4c52-aa7b-99db4b992876,91d2d798-1498-4c52-aa7b-99db4b992876,1,0,e85a03d3-e7c7-4058-992a-515a557d9e52,e85a03d3-e7c7-4058-992a-515a557d9e52,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,83385f31-2cdf-44a1-85c3-461e4ad5fd45,83385f31-2cdf-44a1-85c3-461e4ad5fd45,1,0,b55b06db-604e-4fb9-9253-638c747bd8f9,b55b06db-604e-4fb9-9253-638c747bd8f9,1,0,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,1,0,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,1,0,deb69010-80b0-4e28-acc7-8c50e8e6f873,deb69010-80b0-4e28-acc7-8c50e8e6f873,1,0,1a9177fe-6699-42b3-9588-eed9c6008c2d,1a9177fe-6699-42b3-9588-eed9c6008c2d,1,0,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,1,0,ae698468-f42a-4400-aee6-fd849740e634,ae698468-f42a-4400-aee6-fd849740e634,1,0,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,1,0,6438435e-97cc-4bd2-98dc-e21cee55bb0f,6438435e-97cc-4bd2-98dc-e21cee55bb0f,1,0,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,5001bea4-c8f9-4950-9eda-d33125e3bb46,5001bea4-c8f9-4950-9eda-d33125e3bb46,1,0,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,dd03e170-4186-495b-ae1c-fc66385d7ccf,dd03e170-4186-495b-ae1c-fc66385d7ccf,1,0,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,1,0,cdef5df6-f3a1-4950-b197-4f375914f885,cdef5df6-f3a1-4950-b197-4f375914f885,1,0,c1caff49-dc4b-4b3e-be47-122ea8b70416,c1caff49-dc4b-4b3e-be47-122ea8b70416,1,0,a1185a4c-7351-48b0-b662-61f61a1ad715,a1185a4c-7351-48b0-b662-61f61a1ad715,1,0,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,1,0,71d03545-df45-4c70-aa0d-3b916f2a9041,71d03545-df45-4c70-aa0d-3b916f2a9041,1,0,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,1,0,28a25822-2306-409a-a7c8-6f7e42bf25e8,28a25822-2306-409a-a7c8-6f7e42bf25e8,1,0,a45fa0c3-c363-4465-861f-13cedfeb79dd,a45fa0c3-c363-4465-861f-13cedfeb79dd,1,0,a72517c3-8c91-4e40-81ac-83c762789e87,a72517c3-8c91-4e40-81ac-83c762789e87,1,0,0233b335-7e26-4661-9850-8ab09d3178e3,0233b335-7e26-4661-9850-8ab09d3178e3,1,0,d942d536-5d01-4571-b910-abd973996a38,d942d536-5d01-4571-b910-abd973996a38,1,0,b82a7103-b872-49c3-b632-81d5a0051136,b82a7103-b872-49c3-b632-81d5a0051136,1,0,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,1,0,20c2053c-8ebd-4c07-8d95-956b424d047c,20c2053c-8ebd-4c07-8d95-956b424d047c,1,0,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,1,0,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,1,0,bef6081e-f377-41d6-83a1-b0e218a3fb46,bef6081e-f377-41d6-83a1-b0e218a3fb46,1,0,9b67bfd5-ef23-4205-b7ba-9466517e9999,9b67bfd5-ef23-4205-b7ba-9466517e9999,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,1,0,52e0ede7-de57-4640-b432-96e56131f277,52e0ede7-de57-4640-b432-96e56131f277,1,0,89888993-3b05-475e-ac76-3cd7ced93250,89888993-3b05-475e-ac76-3cd7ced93250,1,0,129f704b-cc63-4a4e-b6a7-9e53de4537a2,129f704b-cc63-4a4e-b6a7-9e53de4537a2,1,0,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,1,0,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,1,0,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,1,0,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,1,0,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,1,0,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,1,0,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,1,0,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,1,0,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,1,0,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,1,0,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,1,0,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,1,0,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,1,0,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,1,0,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,1,0,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1,0,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1,0,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,1,0,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,1,0,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,1,0,5f3d5a05-a581-462d-96a2-2750ba0e0481,5f3d5a05-a581-462d-96a2-2750ba0e0481,1,0,477ab478-b336-4bac-898f-e20e3a4039b5,477ab478-b336-4bac-898f-e20e3a4039b5,1,0,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,1,0,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,1,0,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,1,0,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,1,0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,1,0,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,1,0,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,1,0,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,1,0,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,1,0,e4216976-2747-4078-81d4-8ffab668c1f7,e4216976-2747-4078-81d4-8ffab668c1f7,1,0,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,1,0,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,1,0,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,1,0,9ed2c756-80a1-4559-8494-b7a9b82a4519,9ed2c756-80a1-4559-8494-b7a9b82a4519,1,0,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,1,0,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,1,0,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,1,0,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,1,0,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,1,0,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,1,0,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,1,0,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,1,0,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,1,0,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,1,0,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,1,0,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,1,0,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,1,0,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,1,0,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,1,0,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,1,0,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,1,0,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,1,0,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,1,0,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,1,0,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,1,0,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,1,0,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,1,0,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,1,0,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,1,0,9b4b7424-1af7-4d80-8404-8819fcfeae75,9b4b7424-1af7-4d80-8404-8819fcfeae75,1,0,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,1,0,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,1,0,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,1,0,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,1,0,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,1,0,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,1,0,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,1,0,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,1,0,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,1,0,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,1,0,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,1,0,973609a2-5b5d-45c4-9606-a13d0de1a09b,973609a2-5b5d-45c4-9606-a13d0de1a09b,1,0,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,1,0,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,1,0,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,1,0,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,1,0,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,1,0,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,1,0,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,1,0,48cefa96-46c7-4870-a096-951dcbae479a,48cefa96-46c7-4870-a096-951dcbae479a,1,0,d74e01cc-941b-4974-8771-0bd2e0d86724,d74e01cc-941b-4974-8771-0bd2e0d86724,1,0,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,1,0,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,1,0,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,1,0,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,1,0,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,1,0,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,1,0,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,1,0,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,1,0,845530cd-36fb-44c3-b30a-730985c9ca2d,845530cd-36fb-44c3-b30a-730985c9ca2d,1,0,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,1,0,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,1,0,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,1,0,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,1,0,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,1,0,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,1,0,ce5549bd-ba99-4259-86a3-36521bad59f5,ce5549bd-ba99-4259-86a3-36521bad59f5,1,0,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,1,0,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,1,0,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,1,0,fd12fbe2-56a2-4c9e-a072-989d826a5ea3,fd12fbe2-56a2-4c9e-a072-989d826a5ea3,1,0,08552af7-3c44-42c6-94c5-63a2316127fc,08552af7-3c44-42c6-94c5-63a2316127fc,1,0,41f6f6d1-b7cf-4477-907b-ce69fc08c799,41f6f6d1-b7cf-4477-907b-ce69fc08c799,1,0,9f1a61dd-b04f-48ae-b0c0-17cf23bdb04b,9f1a61dd-b04f-48ae-b0c0-17cf23bdb04b,1,0,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,1,0,a300ecc3-8031-4a50-a17d-b08cf3a72139,a300ecc3-8031-4a50-a17d-b08cf3a72139,1,0,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,1,0,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,1,0,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,1,0,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,1,0,657b8663-713c-4a80-81e1-8c0166742a35,657b8663-713c-4a80-81e1-8c0166742a35,1,0,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,1,0,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,1,0,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,1,0,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,1,0,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,1,0,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,1,0,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,1,0,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,1,0,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,1,0,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,1,0,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,1,0,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,1,0,63470706-f14b-4733-87c2-d1173f5d7e7a,63470706-f14b-4733-87c2-d1173f5d7e7a,1,0,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,1,0,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,1,0,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,1,0,76cdcc51-0e6a-4f9c-a115-1864998c2add,76cdcc51-0e6a-4f9c-a115-1864998c2add,1,0,71c3e5d3-7504-433f-9d48-7c287b2b863b,71c3e5d3-7504-433f-9d48-7c287b2b863b,1,0,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,1,0,0d8c215d-1210-47a2-897d-a3257b9f849a,0d8c215d-1210-47a2-897d-a3257b9f849a,1,0,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,1,0,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,1,0,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,1,0,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,1,0,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,1,0,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,1,0,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,1,0,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,1,0,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,1,0,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,1,0,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,1,0,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,1,0,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,1,0,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,1,0,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,1,0,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,1,0,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,1,0,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,1,0,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,1,0,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,1,0,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,1,0,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,1,0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,1,0,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,1,0,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,1,0,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,1,0,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,1,0,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,1,0,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,1,0,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1,0,7a944c45-9b3d-411f-b2ef-de3c896092bb,7a944c45-9b3d-411f-b2ef-de3c896092bb,1,0,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,1,0,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,1,0,323997ca-488d-4d84-aa44-da60b6b4d414,323997ca-488d-4d84-aa44-da60b6b4d414,1,0,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,1,0,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1,0,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,1,0,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,1,0,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,1,0,44afff59-0590-4929-93b8-7b49735f21b5,44afff59-0590-4929-93b8-7b49735f21b5,1,0,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,1,0,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,1,0,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,1,0,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,1,0,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,1,0,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,1,0,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,1,0,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,1,0,9892f922-8745-4164-a200-94b5edc1ea0a,9892f922-8745-4164-a200-94b5edc1ea0a,1,0,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,1,0,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,1,0,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,1,0,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,1,0,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,1,0,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,1,0,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,1,0,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,1,0,30f6aedf-946f-400c-822d-5fa375b8fb1d,30f6aedf-946f-400c-822d-5fa375b8fb1d,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,1,0,26986f8d-d56d-4641-9184-2632d0881cca,26986f8d-d56d-4641-9184-2632d0881cca,1,0,144676de-f369-49f1-bb21-d60e073936df,144676de-f369-49f1-bb21-d60e073936df,1,0,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,1,0,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,1,0,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,1,0,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,1,0,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,a2a51b70-9570-4f53-9d30-e9a9b099a475,a2a51b70-9570-4f53-9d30-e9a9b099a475,1,0,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,1,0,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,1,0,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,1,0,fdcbe67c-55fb-444d-bed8-cee956ca3530,fdcbe67c-55fb-444d-bed8-cee956ca3530,1,0,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,1,0,6ff5b3cb-efff-430d-bf0a-957405f116ca,6ff5b3cb-efff-430d-bf0a-957405f116ca,1,0,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,1,0,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,1,0,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,1,0,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,1,0,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,1,0,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,1,0,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,1,0,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,1,0,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,1,0,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,1,0,ad6384d5-278b-44d3-993a-d5a39e7c98ca,ad6384d5-278b-44d3-993a-d5a39e7c98ca,1,0,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,1,0,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,1,0,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,1,0,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,1,0,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,1,0,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,1,0,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,1,0,540be4e1-6eae-48e2-a645-8bd0a1259c65,540be4e1-6eae-48e2-a645-8bd0a1259c65,1,0,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,1,0,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,1,0,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,1,0,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,1,0,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,1,0,83ead93b-4ff6-487d-934e-25088944fccc,83ead93b-4ff6-487d-934e-25088944fccc,1,0,764c76cc-0473-4633-868d-02f96aa43c10,764c76cc-0473-4633-868d-02f96aa43c10,1,0,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,1,0,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,1,0,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,1,0,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,1,0,9416a741-5106-454e-b953-81f3d99d5e71,9416a741-5106-454e-b953-81f3d99d5e71,1,0,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,1,0,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,1,0,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,1,0,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,1,0,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,1,0,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,1,0,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,1,0,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,1,0,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,1,0,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1,0,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,1,0,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,1,0,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,1,0,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,1,0,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,1,0,5a088468-4065-4e0c-9b84-1162de8d3fdd,5a088468-4065-4e0c-9b84-1162de8d3fdd,1,0,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,1,0,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,1,0,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,1,0,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,1,0,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,1,0,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,1,0,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,1,0,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,1,0,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,1,0,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,1,0,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,1,0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,1,0,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,1,0,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,1,0,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,1,0,73c1a829-0191-486b-97a0-7f333c6f8011,73c1a829-0191-486b-97a0-7f333c6f8011,1,0,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,1,0,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,1,0,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,1,0,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,1,0,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,1,0,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,1,0,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,1,0,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,1,0,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,1,0,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,1,0,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,1,0,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,1,0,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,1,0,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,1,0,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,1,0,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,1,0,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,1,0,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,1,0,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,1,0,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,1,0,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,1,0,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,1,0,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,1,0,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,1,0,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,1,0,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,1,0,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,1,0,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,1,0,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,1,0,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,1,0,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,1,0,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,1,0,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,1,0,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,1,0,73d8b319-9bea-4638-a602-23c12f37c227,73d8b319-9bea-4638-a602-23c12f37c227,1,0,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,1,0,a43e9de0-2921-4c58-a5f8-7446258be967,a43e9de0-2921-4c58-a5f8-7446258be967,1,0,307656e3-df7f-46e7-946c-bbd439265c95,307656e3-df7f-46e7-946c-bbd439265c95,1,0,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,1,0,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,1,0,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,1,0,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,1,0,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,1,0,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,1,0,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,1,0,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,1,0,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,1,0,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,1,0,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,1,0,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,1,0,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,1,0,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,1,0,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,1,0,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,1,0,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,1,0,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,1,0,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,1,0,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,1,0,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,1,0,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,1,0,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,1,0,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,1,0,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,1,0,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,1,0,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,1,0,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,1,0,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,1,0,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,1,0,dd383422-dddb-4a81-9326-015fd345b5c1,dd383422-dddb-4a81-9326-015fd345b5c1,1,0,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,1,0,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,1,0,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,1,0,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,1,0,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,1,0,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,1,0,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,1,0,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,1,0,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,1,0,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,1,0,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,1,0,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,1,0,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,1,0,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,1,0,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,1,0,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,1,0,13dee5d8-f165-48de-9ccb-3ef0239f4b27,13dee5d8-f165-48de-9ccb-3ef0239f4b27,1,0,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,1,0,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,1,0,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,1,0,eb3f959c-94a4-4e77-b9f9-e81954254079,eb3f959c-94a4-4e77-b9f9-e81954254079,1,0,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,1,0,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,1,0,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,1,0,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,1,0,1610e73c-58df-41cc-8349-51b920806821,1610e73c-58df-41cc-8349-51b920806821,1,0,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,1,0,c6ccf82f-f130-4037-9e89-1e0365b996a4,c6ccf82f-f130-4037-9e89-1e0365b996a4,1,0,c532963e-0d92-44b9-9cfc-43ed2744ccf9,c532963e-0d92-44b9-9cfc-43ed2744ccf9,1,0,6aff2855-24d4-4f90-b617-53326efdd1bd,6aff2855-24d4-4f90-b617-53326efdd1bd,1,0,0107a9c7-4c85-49c4-918a-925d85d57a0b,0107a9c7-4c85-49c4-918a-925d85d57a0b,1,0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,1,0,e5b578a1-e33b-4d49-8064-427aa928a844,e5b578a1-e33b-4d49-8064-427aa928a844,1,0,f74e97ad-fef6-4122-a056-86f2d59dfdaf,f74e97ad-fef6-4122-a056-86f2d59dfdaf,1,0,df1ef691-1e86-4a80-8671-53b3d4504bfb,df1ef691-1e86-4a80-8671-53b3d4504bfb,1,0,474b9918-23da-4289-91a9-9115526c9b5d,474b9918-23da-4289-91a9-9115526c9b5d,1,0,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1,0,60aa9d44-5986-490e-8093-f65e194b3607,60aa9d44-5986-490e-8093-f65e194b3607,1,0,a36dee5e-7184-4caf-bf46-3977b165093b,a36dee5e-7184-4caf-bf46-3977b165093b,1,0,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,1,0,182916b2-972b-4e39-93ba-d45aa7a195f5,182916b2-972b-4e39-93ba-d45aa7a195f5,1,0,2b654a53-7ce8-421f-aaf5-aa1451d91415,2b654a53-7ce8-421f-aaf5-aa1451d91415,1,0,30e55306-ea5c-4ef4-9903-ea030afa3d85,30e55306-ea5c-4ef4-9903-ea030afa3d85,1,0,234c1a72-8349-472a-8373-2a25ce6252f2,234c1a72-8349-472a-8373-2a25ce6252f2,1,0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,1,0,539e0db9-be24-4086-9632-af20553ee50f,539e0db9-be24-4086-9632-af20553ee50f,1,0,b9adeb51-a009-4e83-85f8-bfa1547429d6,b9adeb51-a009-4e83-85f8-bfa1547429d6,1,0,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,1,0,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,1,0,eb0479db-2eaf-4269-9154-2fae4981e84f,eb0479db-2eaf-4269-9154-2fae4981e84f,1,0,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,1,0,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,1,0,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,1,0,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,1,0,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,1,0,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,1,0,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,1,0,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,1,0,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,1,0,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,1,0,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,1,0,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,1,0,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,1,0,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,1,0,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,1,0,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,1,0,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,1,0,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,1,0,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,1,0,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,1,0,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,1,0,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,1,0,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,1,0,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,1,0,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,1,0,1b4feda1-e555-4b85-b236-b21153a7246f,1b4feda1-e555-4b85-b236-b21153a7246f,1,0,61d3cef4-2c42-417d-a762-a2d2f5a28924,61d3cef4-2c42-417d-a762-a2d2f5a28924,1,0,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,1,0,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,1,0,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,1,0,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,1,0,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,1,0,7ab6acda-6732-4582-8092-d43f9a98a28d,7ab6acda-6732-4582-8092-d43f9a98a28d,1,0,5ab1d405-bfc3-4440-8cdd-3a63013b064d,5ab1d405-bfc3-4440-8cdd-3a63013b064d,1,0,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,1,0,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,1,0,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,1,0,6bcba052-4d81-409d-b1a2-eed6be6fb024,6bcba052-4d81-409d-b1a2-eed6be6fb024,1,0,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,1,0,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,1,0,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,1,0,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,1,0,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,1,0,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,1,0,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,1,0,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,1,0,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,1,0,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,1,0,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,1,0,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,1,0,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,1,0,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,1,0,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,1,0,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,1,0,093332f5-3eb4-478c-ac95-59dcdc96765a,093332f5-3eb4-478c-ac95-59dcdc96765a,1,0,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,1,0,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,1,0,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,1,0,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,1,0,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,1,0,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,1,0,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,1,0,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,1,0,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,1,0,e72e59c0-391d-497e-9407-063e0edf573e,e72e59c0-391d-497e-9407-063e0edf573e,1,0,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,1,0,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,1,0,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,1,0,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,1,0,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,1,0,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,1,0,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,1,0,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,1,0,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,1,0,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,1,0,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,1,0,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,1,0,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,1,0,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,1,0,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,1,0,13b27ec3-2be9-4959-92e5-94ba7bb64f03,13b27ec3-2be9-4959-92e5-94ba7bb64f03,1,0,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,1,0,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,1,0,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,1,0,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,1,0,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,1,0,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,1,0,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,1,0,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,1,0,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,1,0,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,1,0,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,1,0,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,1,0,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,1,0,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,1,0,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,1,0,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,1,0,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,1,0,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,1,0,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,1,0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,1,0,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,1,0,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,1,0,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,1,0,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,1,0,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,1,0,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,1,0,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,1,0,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,1,0,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,1,0,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,1,0,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,1,0,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,1,0,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,1,0,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,1,0,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,1,0,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,1,0,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,1,0,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,1,0,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,1,0,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,1,0,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,1,0,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,1,0,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,1,0,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,1,0,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,1,0,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,1,0,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,1,0,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,1,0,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,1,0,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,1,0,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,1,0,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,1,0,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,1,0,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,1,0,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,1,0,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,1,0,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1,0,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,1,0,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,1,0,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,1,0,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,1,0,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,1,0,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,1,0,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,1,0,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,1,0,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,1,0,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,1,0,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,1,0,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,1,0,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,1,0,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,1,0,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,1,0,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,1,0,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1,0,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,1,0,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,1,0,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,1,0,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,1,0,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,1,0,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,1,0,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,1,0,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,1,0,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,1,0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,1,0,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,1,0,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,1,0,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,1,0,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,1,0,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,1,0,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,1,0,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,1,0,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,1,0,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,1,0,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,1,0,67a04d72-afea-487a-b629-e4b7dfc1df32,67a04d72-afea-487a-b629-e4b7dfc1df32,1,0,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,1,0,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,1,0,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,1,0,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,1,0,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,1,0,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,1,0,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,1,0,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,1,0,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,1,0,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,1,0,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,1,0,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,1,0,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,1,0,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,1,0,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,1,0,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,1,0,8f09cbed-6f24-461f-9b35-31c64310e74a,8f09cbed-6f24-461f-9b35-31c64310e74a,1,0,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,1,0,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,1,0,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,1,0,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,1,0,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,1,0,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,1,0,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,1,0,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,1,0,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,1,0,211d226f-dac6-43d5-8720-952da4339e35,211d226f-dac6-43d5-8720-952da4339e35,1,0,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,1,0,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,1,0,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,1,0,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,1,0,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,1,0,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,1,0,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,1,0,463b8966-a5f9-4a80-82b9-1608a1622e13,463b8966-a5f9-4a80-82b9-1608a1622e13,1,0,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,1,0,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,1,0,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,1,0,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,1,0,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,1,0,01cb357c-af28-4855-afae-45b6df19b344,01cb357c-af28-4855-afae-45b6df19b344,1,0,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,1,0,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,1,0,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,1,0,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,1,0,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,1,0,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,1,0,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,1,0,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,1,0,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,1,0,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,1,0,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,1,0,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,1,0,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,1,0,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,1,0,aa509aa3-dd45-41f3-82c7-59662c2e2c47,aa509aa3-dd45-41f3-82c7-59662c2e2c47,1,0,c4552529-e69e-4c5c-bd66-04b2f7dac281,c4552529-e69e-4c5c-bd66-04b2f7dac281,1,0,381b49ba-793a-4418-9fd4-598844fb72a6,381b49ba-793a-4418-9fd4-598844fb72a6,1,0,1aee302d-df31-49ea-b542-436dc1d79ae1,1aee302d-df31-49ea-b542-436dc1d79ae1,1,0,593509da-d33c-49ff-a62c-a28cbc4651c1,593509da-d33c-49ff-a62c-a28cbc4651c1,1,0,5e346a0b-a322-4565-adb9-70131fb05fa3,5e346a0b-a322-4565-adb9-70131fb05fa3,1,0,9a69c559-194b-4f74-9879-82740260f5f6,9a69c559-194b-4f74-9879-82740260f5f6,1,0,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,1,0,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,1,0,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,1,0,2e19fb7b-270f-4181-b4a1-640280bbbc5c,2e19fb7b-270f-4181-b4a1-640280bbbc5c,1,0,cf69b045-665d-4f6c-827f-5044beacd125,cf69b045-665d-4f6c-827f-5044beacd125,1,0,aa773eef-0c4a-49be-9f5e-9131bc041415,aa773eef-0c4a-49be-9f5e-9131bc041415,1,0,9b31e474-01d4-4c3b-a633-3a2ff3917d62,9b31e474-01d4-4c3b-a633-3a2ff3917d62,1,0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1,0,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,1,0,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,1,0,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,1,0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,1,0,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,1,0,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,1,0,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,1,0,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,1,0,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,1,0,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,1,0,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,1,0,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,1,0,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,1,0,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,1,0,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,1,0,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,1,0,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,1,0,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,1,0,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,1,0,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,1,0,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,1,0,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,1,0,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,1,0,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,1,0,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,1,0,37e3d914-643e-4963-b4a0-7bc6727c0c9b,37e3d914-643e-4963-b4a0-7bc6727c0c9b,1,0,b6902500-3e03-4e83-a077-00500abc00b6,b6902500-3e03-4e83-a077-00500abc00b6,1,0,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,1,0,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,1,0,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,1,0,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,1,0,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,1,0,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,1,0,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,1,0,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,1,0,cd8fd85f-f02e-4f11-b4b4-40670febfaca,cd8fd85f-f02e-4f11-b4b4-40670febfaca,1,0,3f023afb-c02a-42ee-9afe-0f47ef3fe721,3f023afb-c02a-42ee-9afe-0f47ef3fe721,1,0,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,1,0,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,1,0,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,1,0,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,1,0,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,1,0,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,1,0,091ccac1-9a63-4a89-bb0c-333b274b0c70,091ccac1-9a63-4a89-bb0c-333b274b0c70,1,0,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,1,0,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,1,0,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,1,0,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,1,0,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,1,0,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,1,0,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,1,0,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,1,0,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,1,0,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,1,0,2a6e1f2b-7378-456b-9657-9e971eaff716,2a6e1f2b-7378-456b-9657-9e971eaff716,1,0,c3cdea20-3055-4b4e-a531-a02d4f3ed294,c3cdea20-3055-4b4e-a531-a02d4f3ed294,1,0,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,1,0,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,1,0,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,1,0,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,1,0,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,1,0,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,1,0,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,1,0,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,1,0,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,1,0,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,1,0,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,1,0,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,1,0,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,1,0,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,1,0,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,1,0,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,1,0,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,1,0,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,1,0,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,1,0,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,1,0,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,1,0,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,1,0,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,1,0,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,1,0,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,1,0,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,1,0,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,1,0,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,1,0,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,1,0,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,1,0,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,1,0,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,1,0,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,1,0,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,1,0,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,1,0,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,1,0,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,1,0,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,1,0,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,1,0,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,1,0,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,1,0,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,1,0,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,1,0,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,1,0,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,1,0,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,1,0,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,1,0,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,1,0,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,1,0,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,1,0,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,1,0,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,1,0,cc8e3172-491d-45d8-a7eb-fc6c400845cb,cc8e3172-491d-45d8-a7eb-fc6c400845cb,1,0,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,1,0,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,1,0,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,1,0,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,1,0,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,1,0,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,1,0,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,1,0,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,1,0,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,1,0,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,1,0,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,1,0,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,1,0,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,1,0,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,1,0,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,1,0,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,1,0,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1,0,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,1,0,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,1,0,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,1,0,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,1,0,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,1,0,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,1,0,40a59681-f31d-4fb9-9301-67c1430590e0,40a59681-f31d-4fb9-9301-67c1430590e0,1,0,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,1,0,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,1,0,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,1,0,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,1,0,9c3bc502-bcb1-4c90-ae43-53c798958339,9c3bc502-bcb1-4c90-ae43-53c798958339,1,0,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,1,0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,1,0,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,1,0,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,1,0,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,1,0,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,1,0,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,1,0,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,1,0,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,1,0,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,1,0,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,1,0,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,1,0,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,1,0,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,1,0,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,1,0,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,1,0,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,1,0,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,1,0,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,1,0,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,1,0,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,1,0,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,1,0,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,1,0,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,1,0,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,1,0,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,1,0,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,1,0,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,1,0,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,1,0,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,1,0,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,1,0,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,1,0,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,1,0,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,1,0,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,1,0,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,1,0,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,1,0,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,1,0,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,1,0,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,1,0,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,1,0,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,1,0,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,1,0,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,1,0,85223d37-2503-4783-94dc-fe6265e718d5,85223d37-2503-4783-94dc-fe6265e718d5,1,0,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0918cd76-56e5-4314-8a1c-c21d023ba6f8,1,0,9db21c2e-79fa-44e4-902e-416abfccb54a,9db21c2e-79fa-44e4-902e-416abfccb54a,1,0,fb082db3-197b-4d1e-b9ea-362624d547ee,fb082db3-197b-4d1e-b9ea-362624d547ee,1,0,c09dcf00-a45a-4487-99c5-d3a37956ec88,c09dcf00-a45a-4487-99c5-d3a37956ec88,1,0,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,1,0,2714e1b6-6b02-43a1-bc94-2934b429ed35,2714e1b6-6b02-43a1-bc94-2934b429ed35,1,0,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,1,0,4c7016da-9991-4917-8eaa-e760cc9e29d1,4c7016da-9991-4917-8eaa-e760cc9e29d1,1,0,febb3770-5c11-4ada-9e49-a27950bdaddf,febb3770-5c11-4ada-9e49-a27950bdaddf,1,0,d7b57669-e538-4e54-ab1b-8428f0586466,d7b57669-e538-4e54-ab1b-8428f0586466,1,0,9c484a15-039e-416d-af97-4c2bd90fd873,9c484a15-039e-416d-af97-4c2bd90fd873,1,0,534855e3-4cf2-471c-b982-7138917050c9,534855e3-4cf2-471c-b982-7138917050c9,1,0,4c72b944-d000-4920-aec8-54029f88ddf4,4c72b944-d000-4920-aec8-54029f88ddf4,1,0,b4033d05-05c2-4617-80d9-abfa389c47f4,b4033d05-05c2-4617-80d9-abfa389c47f4,1,0,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,1,0,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,1,0,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,1,0,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,1,0,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,1,0,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,1,0,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,1,0,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,1,0,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,1,0,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,1,0,dd07b255-25af-466e-a224-c561a8ca567b,dd07b255-25af-466e-a224-c561a8ca567b,1,0,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,1,0,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,1,0,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,1,0,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,1,0,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,1,0,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,1,0,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,1,0,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,1,0,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,1,0,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,1,0,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,1,0,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,1,0,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,1,0,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,1,0,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,1,0,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,1,0,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,1,0,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,1,0,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,1,0,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,1,0,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,1,0,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,1,0,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,1,0,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,1,0,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,1,0,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,1,0,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,1,0,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,1,0,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,1,0,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,1,0,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,1,0,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,1,0,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,1,0,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,1,0,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,1,0,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,1,0,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,1,0,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,1,0,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,1,0,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,1,0,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,1,0,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,1,0,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,1,0,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,1,0,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,1,0,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,1,0,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,1,0,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,1,0,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,1,0,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,1,0,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,1,0,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,1,0,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,1,0,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,1,0,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,1,0,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,1,0,5b379a72-8605-4e88-84cb-14272a3b8f5f,5b379a72-8605-4e88-84cb-14272a3b8f5f,1,0,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,1,0,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,1,0,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,1,0,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,1,0,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,1,0,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,1,0,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,1,0,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,1,0,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,1,0,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,1,0,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,1,0,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,1,0,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,1,0,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,1,0,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,1,0,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,1,0,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,1,0,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,1,0,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,1,0,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,1,0,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,1,0,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,1,0,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,1,0,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,1,0,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,1,0,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,1,0,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,1,0,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,1,0,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,1,0,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,1,0,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,1,0,616cd2cc-eaf4-4586-bca1-c044429b491a,616cd2cc-eaf4-4586-bca1-c044429b491a,1,0,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,1,0,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,1,0,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,1,0,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,1,0,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,1,0,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,1,0,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,1,0,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,1,0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,1,0,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,1,0,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,1,0,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,1,0,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,1,0,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,1,0,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,1,0,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,1,0,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,1,0,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,1,0,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,1,0,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,1,0,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,1,0,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,1,0,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,1,0,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,1,0,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,1,0,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,1,0,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,1,0,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,1,0,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,1,0,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,1,0,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,1,0,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,1,0,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,1,0,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,1,0,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,1,0,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,1,0,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,1,0,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,1,0,5189beb9-b939-4f97-aca0-c2f3492ac8b9,5189beb9-b939-4f97-aca0-c2f3492ac8b9,1,0,0b139d7a-b583-4082-b9f2-8f3fb444bd51,0b139d7a-b583-4082-b9f2-8f3fb444bd51,1,0,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,1,0,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,1,0,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,1,0,0761c32c-1de6-4c40-9178-64aeb46b6622,0761c32c-1de6-4c40-9178-64aeb46b6622,1,0,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,1,0,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,1,0,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,1,0,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,1,0,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,1,0,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,1,0,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,1,0,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,1,0,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,1,0,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,1,0,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,1,0,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,1,0,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,1,0,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,1,0,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,1,0,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,1,0,b9b24093-810c-4158-846d-e2c7aea54d36,b9b24093-810c-4158-846d-e2c7aea54d36,1,0,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,1,0,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,1,0,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,1,0,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,1,0,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,1,0,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,1,0,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,1,0,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,1,0,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,1,0,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,1,0,8ce759ff-f579-461c-bb1e-9ac2b01e88df,8ce759ff-f579-461c-bb1e-9ac2b01e88df,1,0,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,1,0,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,1,0,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,1,0,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,1,0,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1,0,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,1,0,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,1,0,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,1,0,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,1,0,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,1,0,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,1,0,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,1,0,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,1,0,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,1,0,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,1,0,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,1,0,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,1,0,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1,0,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,1,0,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1,0,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,1,0,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,1,0,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,1,0,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,1,0,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,1,0,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,1,0,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1,0,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,1,0,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,1,0,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,1,0,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,1,0,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,1,0,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,1,0,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,1,0,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,1,0,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,1,0,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,1,0,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,1,0,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,1,0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,1,0,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,1,0,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,1,0,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,1,0,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,1,0,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,1,0,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,1,0,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,1,0,d3443b92-32f5-4ac0-8356-062647efe3d8,d3443b92-32f5-4ac0-8356-062647efe3d8,1,0,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,1,0,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,1,0,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,1,0,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,1,0,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,1,0,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,1,0,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,1,0,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,1,0,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,1,0,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,1,0,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,1,0,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,1,0,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,1,0,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,1,0,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,1,0,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,1,0,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,1,0,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,1,0,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,1,0,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,1,0,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,1,0,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,1,0,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,1,0,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,1,0,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,1,0,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,1,0,aa63c001-c3da-4179-8fd8-fe2ff510511e,aa63c001-c3da-4179-8fd8-fe2ff510511e,1,0,b2e894b0-6443-4a52-95b6-6b564f809680,b2e894b0-6443-4a52-95b6-6b564f809680,1,0,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,1,0,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,1,0,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,1,0,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,1,0,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,1,0,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,1,0,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,1,0,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,1,0,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,1,0,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,1,0,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,1,0,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,1,0,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,1,0,8a8848b8-345a-452d-bf95-28f9c91c7e95,8a8848b8-345a-452d-bf95-28f9c91c7e95,1,0,a9441693-87ca-4157-98e1-63375852755c,a9441693-87ca-4157-98e1-63375852755c,1,0,6303ea55-e8ed-4acc-9717-941eefafc2a9,6303ea55-e8ed-4acc-9717-941eefafc2a9,1,0,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,1,0,d0b17206-3949-4513-a47f-02e1a8ba369a,d0b17206-3949-4513-a47f-02e1a8ba369a,1,0,cb4f20d4-13e6-4c27-b491-da7931f4bf05,cb4f20d4-13e6-4c27-b491-da7931f4bf05,1,0,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,1,0,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,1,0,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,1,0,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,1,0,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,1,0,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,1,0,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,1,0,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,1,0,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,1,0,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,1,0,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,1,0,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,1,0,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,1,0,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,1,0,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,1,0,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,1,0,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,1,0,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,1,0,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,1,0,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,1,0,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,1,0,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,1,0,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,1,0,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,1,0,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,1,0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,1,0,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,1,0,94bc76ae-72a0-418f-98c4-ae0a0326a2da,94bc76ae-72a0-418f-98c4-ae0a0326a2da,1,0,784475ff-eec5-462a-a511-ba31f8374c2e,784475ff-eec5-462a-a511-ba31f8374c2e,1,0,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,1,0,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,1,0,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,1,0,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,1,0,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,1,0,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,1,0,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,1,0,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,1,0,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,1,0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,1,0,356a8091-4c0b-41d0-b8d2-963b3a807469,356a8091-4c0b-41d0-b8d2-963b3a807469,1,0,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,1,0,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,1,0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,1,0,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,1,0,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,1,0,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,1,0,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,1,0,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,1,0,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,1,0,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,1,0,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1,0,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,1,0,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,1,0,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,1,0,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,1,0,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,1,0,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,1,0,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,1,0,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,1,0,ee008096-1ae8-4a64-9d3d-14cb15c8be70,ee008096-1ae8-4a64-9d3d-14cb15c8be70,1,0,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,1,0,a4754a7b-971f-4517-963e-b7cb9d57f86d,a4754a7b-971f-4517-963e-b7cb9d57f86d,1,0,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,1,0,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,1,0,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,1,0,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,1,0,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,1,0,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,1,0,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,1,0,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,1,0,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,1,0,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,1,0,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,1,0,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,1,0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,1,0,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,1,0,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,1,0,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,1,0,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,1,0,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,1,0,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,1,0,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,1,0,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,1,0,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,1,0,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,1,0,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,1,0,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,1,0,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,1,0,733d4494-01e2-46f5-a49b-f289267a90c9,733d4494-01e2-46f5-a49b-f289267a90c9,1,0,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,1,0,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,1,0,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,1,0,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,1,0,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,1,0,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,1,0,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,1,0,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,1,0,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,1,0,1e14d062-1d5a-4939-8ce6-4d9514990376,1e14d062-1d5a-4939-8ce6-4d9514990376,1,0,f86f24d2-9a83-47ae-9d95-b49a0a295770,f86f24d2-9a83-47ae-9d95-b49a0a295770,1,0,8368e1fa-da0c-4a9b-9d50-a122933c7899,8368e1fa-da0c-4a9b-9d50-a122933c7899,1,0,37986729-a275-4e86-8613-faee9a4f2525,37986729-a275-4e86-8613-faee9a4f2525,1,0,5814cb3a-8f7c-45b4-a590-b69d4912120f,5814cb3a-8f7c-45b4-a590-b69d4912120f,1,0,f06c8396-65ec-4ece-aed0-d45b2d8969b5,f06c8396-65ec-4ece-aed0-d45b2d8969b5,1,0,1faeab7f-7bd7-496d-8882-4aab6c425854,1faeab7f-7bd7-496d-8882-4aab6c425854,1,0,af922fb8-a99c-4154-89fe-d30a4d13024a,af922fb8-a99c-4154-89fe-d30a4d13024a,1,0,24c2f463-2bbb-471f-a409-507afad52caf,24c2f463-2bbb-471f-a409-507afad52caf,1,0,cbb07013-9ae1-43ec-8142-a724d788cb67,cbb07013-9ae1-43ec-8142-a724d788cb67,1,0,2403ac84-b513-4aa0-9a68-8d1ad705ce24,2403ac84-b513-4aa0-9a68-8d1ad705ce24,1,0,952b49e0-e1a1-4130-8fb2-083e3988255c,952b49e0-e1a1-4130-8fb2-083e3988255c,1,0,367b227f-f66e-4cec-9fc3-850bca8bc6c8,367b227f-f66e-4cec-9fc3-850bca8bc6c8,1,0,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1,0,7fcb9d79-1144-4099-8d7f-309d3bf045a5,7fcb9d79-1144-4099-8d7f-309d3bf045a5,1,0,db418313-8583-48a9-9fec-e2c5de4fdf76,db418313-8583-48a9-9fec-e2c5de4fdf76,1,0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,1,0,2f26970e-b964-43e2-8d6d-999bbc577689,2f26970e-b964-43e2-8d6d-999bbc577689,1,0,65a50026-88e7-45dd-bb0c-f212218ca093,65a50026-88e7-45dd-bb0c-f212218ca093,1,0,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,1,0,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1,0,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,1,0,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,1,0,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,1,0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,1,0,01a1fd57-6c09-4a5b-9f75-da4366159423,01a1fd57-6c09-4a5b-9f75-da4366159423,1,0,71d79b25-3682-4f2c-b6b2-a307e3e72844,71d79b25-3682-4f2c-b6b2-a307e3e72844,1,0,45c1ed0d-202e-4289-820f-e1de0f544386,45c1ed0d-202e-4289-820f-e1de0f544386,1,0,e889e80f-97c9-43c6-8268-d652764fcafb,e889e80f-97c9-43c6-8268-d652764fcafb,1,0,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,1,0,95ccaaf2-f6ca-4540-8a39-3c90121c4236,95ccaaf2-f6ca-4540-8a39-3c90121c4236,1,0,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,1,0,f47a9bec-2a9f-4955-a432-acb63a5b0e46,f47a9bec-2a9f-4955-a432-acb63a5b0e46,1,0,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1,0,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,1,0,b787818e-5572-4ef2-ba54-1e9b69569824,b787818e-5572-4ef2-ba54-1e9b69569824,1,0,1e13bd37-61b5-4901-a607-e00e5d1900a8,1e13bd37-61b5-4901-a607-e00e5d1900a8,1,0,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,1,0,231d7b21-c00c-4782-b610-d56593be436f,231d7b21-c00c-4782-b610-d56593be436f,1,0,79250d1a-77ff-4015-a5b5-83460b1611e2,79250d1a-77ff-4015-a5b5-83460b1611e2,1,0,60018ee0-71ec-4975-a95d-f6f188748ff2,60018ee0-71ec-4975-a95d-f6f188748ff2,1,0,68d35468-279a-43ef-9d71-fed44a792177,68d35468-279a-43ef-9d71-fed44a792177,1,0,77bec3d8-582a-4156-861b-4902008f014c,77bec3d8-582a-4156-861b-4902008f014c,1,0,bf3304c0-5078-478f-bbf8-6178264c5f26,bf3304c0-5078-478f-bbf8-6178264c5f26,1,0,2ad1caba-7a89-4389-934f-419970260961,2ad1caba-7a89-4389-934f-419970260961,1,0,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,1,0,f88c4a72-368c-4f45-bb2c-d18f214a5079,f88c4a72-368c-4f45-bb2c-d18f214a5079,1,0,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,1,0,9dc2e313-c086-4fd9-83e8-911859ef480d,9dc2e313-c086-4fd9-83e8-911859ef480d,1,0,8a14ced0-9e45-4b3a-a135-11413c3a33c2,8a14ced0-9e45-4b3a-a135-11413c3a33c2,1,0,af7377db-0b27-42f7-a639-e2feb4015412,af7377db-0b27-42f7-a639-e2feb4015412,1,0,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,1,0,ab7db146-f26a-418a-8c45-e2513bf84e08,ab7db146-f26a-418a-8c45-e2513bf84e08,1,0,ece3bd8d-6616-44d5-9c14-6b3557738872,ece3bd8d-6616-44d5-9c14-6b3557738872,1,0,663a80ba-b97e-4265-a627-4a7d273f9472,663a80ba-b97e-4265-a627-4a7d273f9472,1,0,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,1,0,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,1,0,4893ad50-df19-4d86-9469-40491ba733c9,4893ad50-df19-4d86-9469-40491ba733c9,1,0,25a65c1e-8e67-4135-843d-1e0da72dfd64,25a65c1e-8e67-4135-843d-1e0da72dfd64,1,0,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,1,0,29a6416e-b0f5-4111-8f86-1ba80244e73a,29a6416e-b0f5-4111-8f86-1ba80244e73a,1,0,0f49085a-9b83-4256-be60-f341b2ef132e,0f49085a-9b83-4256-be60-f341b2ef132e,1,0,f44c66d6-cfe2-482f-a921-de3db3cd09ea,f44c66d6-cfe2-482f-a921-de3db3cd09ea,1,0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,1,0,c521bd61-386e-41c8-bcc3-29d54b63cc32,c521bd61-386e-41c8-bcc3-29d54b63cc32,1,0,d46e3424-6d30-4229-9a56-ab256517534a,d46e3424-6d30-4229-9a56-ab256517534a,1,0,09d3633d-8e8c-47f3-8f34-d70eb94577e1,09d3633d-8e8c-47f3-8f34-d70eb94577e1,1,0,fe868143-363b-4da1-889b-98d4dd10a1fd,fe868143-363b-4da1-889b-98d4dd10a1fd,1,0,b791a549-ae94-46f2-8f04-771fdeb4cc54,b791a549-ae94-46f2-8f04-771fdeb4cc54,1,0,4681cb63-c581-4c08-b18c-016d9b478ef2,4681cb63-c581-4c08-b18c-016d9b478ef2,1,0,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,1,0,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,1,0,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,1,0,1d429511-9446-4102-95f4-df676125e14c,1d429511-9446-4102-95f4-df676125e14c,1,0,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,1,0,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,1,0,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,1,0,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,1,0,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,1,0,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,1,0,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,1,0,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,1,0,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,1,0,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,1,0,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,1,0,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,1,0,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,1,0,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,1,0,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,1,0,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,1,0,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,1,0,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,1,0,eefa9859-4168-4a10-923f-e4a713c99a3b,eefa9859-4168-4a10-923f-e4a713c99a3b,1,0,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,1,0,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,1,0,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,1,0,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,1,0,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,1,0,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,1,0,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,1,0,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,1,0,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,1,0,39bddcde-697c-4e77-adfd-e4a77529ea97,39bddcde-697c-4e77-adfd-e4a77529ea97,1,0,a3b15381-bf9b-4b26-96eb-392fa2cc8223,a3b15381-bf9b-4b26-96eb-392fa2cc8223,1,0,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,1,0,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,1,0,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,1,0,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,1,0,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,1,0,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,1,0,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,1,0,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,1,0,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,1,0,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,1,0,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,1,0,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,1,0,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,1,0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,1,0,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,1,0,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,1,0,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,1,0,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,1,0,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,1,0,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,1,0,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,1,0,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,1,0,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,1,0,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,1,0,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,1,0,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,1,0,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,1,0,c49cef0d-3b71-4e66-9e35-72b94920dae5,c49cef0d-3b71-4e66-9e35-72b94920dae5,1,0,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,1,0,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,1,0,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,1,0,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,1,0,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,1,0,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,1,0,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,1,0,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,1,0,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,1,0,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,1,0,b363f72f-3629-453c-9f7d-9828ef6de733,b363f72f-3629-453c-9f7d-9828ef6de733,1,0,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,1,0,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,1,0,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,1,0,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,1,0,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,1,0,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,1,0,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,1,0,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,1,0,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,1,0,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,1,0,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,1,0,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,1,0,dd0610c8-cd87-4fe2-8a1f-70157132785b,dd0610c8-cd87-4fe2-8a1f-70157132785b,1,0,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,1,0,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,1,0,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,1,0,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,1,0,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,1,0,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,1,0,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,1,0,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,1,0,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,1,0,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,1,0,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,1,0,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,1,0,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,1,0,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,1,0,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,1,0,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,1,0,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,1,0,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,1,0,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,1,0,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,1,0,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,1,0,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,1,0,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,1,0,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,1,0,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,1,0,02abb5e3-9d4e-4c45-af19-71796966ed19,02abb5e3-9d4e-4c45-af19-71796966ed19,1,0,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,1,0,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,1,0,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,1,0,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,1,0,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,1,0,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,1,0,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,1,0,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,1,0,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,1,0,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,1,0,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,1,0,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,1,0,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,1,0,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,1,0,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,1,0,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,1,0,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,1,0,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,1,0,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,1,0,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,1,0,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,1,0,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,1,0,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,1,0,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,1,0,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,1,0,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,1,0,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,1,0,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,1,0,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,1,0,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,1,0,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,1,0,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,1,0,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,1,0,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,1,0,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,1,0,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,1,0,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,1,0,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,1,0,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,1,0,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,1,0,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,1,0,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,1,0,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,1,0,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,1,0,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,1,0,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,1,0,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,1,0,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,1,0,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,1,0,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,1,0,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,1,0,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,1,0,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,1,0,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,1,0,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,1,0,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,1,0,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,1,0,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,1,0,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,1,0,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,1,0,d754ed75-2a32-4b86-a153-7b50c39f9836,d754ed75-2a32-4b86-a153-7b50c39f9836,1,0,b81f3ee1-66f7-4626-a35b-ef85388c678e,b81f3ee1-66f7-4626-a35b-ef85388c678e,1,0,2ad04793-c162-4915-a260-ca4da535cdac,2ad04793-c162-4915-a260-ca4da535cdac,1,0,6568d853-dfe5-4064-aa73-c1f546e951b4,6568d853-dfe5-4064-aa73-c1f546e951b4,1,0,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,1,0,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,1,0,bbe718b2-6b4c-4d78-a408-5369d356a1e6,bbe718b2-6b4c-4d78-a408-5369d356a1e6,1,0,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,1,0,eb7623df-b4e3-4272-9f92-42a9214f9f17,eb7623df-b4e3-4272-9f92-42a9214f9f17,1,0,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,1,0,b08fd921-c3d6-44eb-9401-fec5acab5d22,b08fd921-c3d6-44eb-9401-fec5acab5d22,1,0,1611855a-abf4-4269-aed3-3f78dce7bea5,1611855a-abf4-4269-aed3-3f78dce7bea5,1,0,c5bd277c-b258-43af-9c80-3e328b1581f5,c5bd277c-b258-43af-9c80-3e328b1581f5,1,0,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,1,0,f9cefef4-2182-42ca-93ef-b6a51d6555cc,f9cefef4-2182-42ca-93ef-b6a51d6555cc,1,0,71e1c7de-7367-424c-ae07-6ec04b408b83,71e1c7de-7367-424c-ae07-6ec04b408b83,1,0,b3956392-199c-4934-80d1-8cdab453d879,b3956392-199c-4934-80d1-8cdab453d879,1,0,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,1,0,d1bd7448-aa5f-43fc-9735-224f36960c3e,d1bd7448-aa5f-43fc-9735-224f36960c3e,1,0,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,1,0,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,1,0,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1,0,8227471b-8ffb-4ba7-b4da-b21570582876,8227471b-8ffb-4ba7-b4da-b21570582876,1,0,25864028-1a53-4a8d-b6e4-189fa62c62f5,25864028-1a53-4a8d-b6e4-189fa62c62f5,1,0,e923beae-0bd8-4119-a802-fd6bfb729f10,e923beae-0bd8-4119-a802-fd6bfb729f10,1,0,d40bb9f7-3397-40ad-b658-f8942bdbbaee,d40bb9f7-3397-40ad-b658-f8942bdbbaee,1,0,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,1,0,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,1,0,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,1,0,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,1,0,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,1,0,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,1,0,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,1,0,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,1,0,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,1,0,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,1,0,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,1,0,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,1,0,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,1,0,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,1,0,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,1,0,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,1,0,61dc318a-c17d-402e-bf64-a0c0a63a1c93,61dc318a-c17d-402e-bf64-a0c0a63a1c93,1,0,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,1,0,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,1,0,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,1,0,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,1,0,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,1,0,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,1,0,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,1,0,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,1,0,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,1,0,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,1,0,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,1,0,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,1,0,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,1,0,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,1,0,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1,0,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,1,0,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,1,0,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,1,0,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,1,0,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,1,0,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,1,0,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,1,0,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,1,0,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,1,0,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,1,0,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,1,0,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,1,0,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,1,0,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,1,0,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,1,0,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,1,0,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,1,0,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,1,0,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,1,0,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,1,0,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,1,0,6852c584-d989-418d-8d18-255492891ef0,6852c584-d989-418d-8d18-255492891ef0,1,0,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,1,0,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,1,0,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,1,0,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,1,0,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,1,0,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,1,0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,1,0,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,1,0,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,1,0,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,1,0,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,1,0,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,1,0,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,1,0,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,1,0,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,1,0,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,1,0,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,1,0,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,1,0,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,1,0,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,1,0,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,1,0,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,1,0,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,1,0,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,1,0,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,1,0,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,1,0,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,1,0,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,1,0,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1,0,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,1,0,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,1,0,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,1,0,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,1,0,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1,0,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,1,0,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,1,0,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,1,0,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,1,0,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,1,0,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,1,0,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,1,0,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,1,0,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,1,0,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,1,0,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,1,0,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,1,0,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,1,0,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,1,0,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,1,0,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,1,0,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,1,0,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,1,0,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,1,0,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,1,0,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,1,0,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,1,0,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,1,0,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,1,0,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,1,0,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,1,0,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,1,0,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,1,0,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,1,0,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,1,0,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,1,0,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,1,0,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,1,0,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,1,0,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,1,0,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,1,0,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,1,0,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,1,0,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,1,0,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,1,0,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,1,0,8525d945-08aa-4928-8dca-4e172ea94328,8525d945-08aa-4928-8dca-4e172ea94328,1,0,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,1,0,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,1,0,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,1,0,82be906c-bb06-40ea-b908-54574b0b4848,82be906c-bb06-40ea-b908-54574b0b4848,1,0,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,1,0,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,1,0,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1,0,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,1,0,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,1,0,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,1,0,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,1,0,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,1,0,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,1,0,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,1,0,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,1,0,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,1,0,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,1,0,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,1,0,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,1,0,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,1,0,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,1,0,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,1,0,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,1,0,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,1,0,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,1,0,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,1,0,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,1,0,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,1,0,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,1,0,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,1,0,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,1,0,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,1,0,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,1,0,03f32b08-1b71-47cb-ba1d-965037df4d64,03f32b08-1b71-47cb-ba1d-965037df4d64,1,0,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,1,0,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,1,0,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,1,0,19a0b881-302e-4d0e-ace0-29a9d8379a48,19a0b881-302e-4d0e-ace0-29a9d8379a48,1,0,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,1,0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,1,0,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,1,0,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,1,0,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,1,0,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,1,0,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,1,0,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,1,0,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,1,0,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,1,0,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,1,0,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,1,0,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,1,0,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,1,0,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,1,0,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,1,0,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,1,0,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,1,0,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,1,0,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,1,0,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,1,0,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,1,0,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,1,0,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,1,0,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,1,0,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,1,0,f9229c3e-4a47-49a4-8b14-908218012ff7,f9229c3e-4a47-49a4-8b14-908218012ff7,1,0,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,1,0,b9743978-ba6d-4892-bb32-f24d4a47dd50,b9743978-ba6d-4892-bb32-f24d4a47dd50,1,0,c43accb9-f33d-437f-b305-0595f8fe3032,c43accb9-f33d-437f-b305-0595f8fe3032,1,0,084a398b-836e-424c-af93-22aa39d5a15a,084a398b-836e-424c-af93-22aa39d5a15a,1,0,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,1,0,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,1,0,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,1,0,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,1,0,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,1,0,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,1,0,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,1,0,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,1,0,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,1,0,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,1,0,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,1,0,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,1,0,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,1,0,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,1,0,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,1,0,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,1,0,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,1,0,8be10d88-8c37-4444-9c89-6cbbe9913bda,8be10d88-8c37-4444-9c89-6cbbe9913bda,1,0,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,1,0,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,1,0,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,1,0,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,1,0,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,1,0,cb1d4a41-20a9-4d76-8798-d47d8858bff1,cb1d4a41-20a9-4d76-8798-d47d8858bff1,1,0,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,1,0,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,1,0,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,1,0,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,1,0,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,1,0,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,1,0,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,1,0,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,1,0,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,1,0,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,1,0,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,1,0,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,1,0,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,1,0,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,1,0,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,1,0,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,1,0,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,1,0,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,1,0,8c241467-76f7-4161-a8a1-5da4a6576b75,8c241467-76f7-4161-a8a1-5da4a6576b75,1,0,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1,0,fd7e5257-024c-46de-9ff3-edd302fadba5,fd7e5257-024c-46de-9ff3-edd302fadba5,1,0,a4168057-d99f-4b55-b762-214f95ae3a30,a4168057-d99f-4b55-b762-214f95ae3a30,1,0,ab4fe549-1c07-42d9-b412-8b89ed115591,ab4fe549-1c07-42d9-b412-8b89ed115591,1,0,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,1,0,b49c589d-b45d-4aff-8899-72cfe433e9a6,b49c589d-b45d-4aff-8899-72cfe433e9a6,1,0,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,1,0,273ad3f7-c645-434d-93b0-e832134f3043,273ad3f7-c645-434d-93b0-e832134f3043,1,0,d320803b-1de4-4e66-b455-0afe39be5c41,d320803b-1de4-4e66-b455-0afe39be5c41,1,0,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,1,0,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,1,0,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,1,0,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,1,0,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,1,0,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,1,0,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,1,0,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,1,0,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,1,0,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,1,0,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,1,0,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,1,0,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,1,0,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,1,0,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,1,0,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,1,0,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,1,0,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,1,0,98aa8a80-29fa-4a54-8d0e-90d413d63da1,98aa8a80-29fa-4a54-8d0e-90d413d63da1,1,0,60af0c11-852e-4b45-afb7-251d75a87150,60af0c11-852e-4b45-afb7-251d75a87150,1,0,37e81463-a558-4b03-b0e4-82ac0e99c80c,37e81463-a558-4b03-b0e4-82ac0e99c80c,1,0,8be35c43-32e6-418d-b3d6-e53ef56babb7,8be35c43-32e6-418d-b3d6-e53ef56babb7,1,0,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,1,0,935d01e1-232b-480e-a6bf-c21c617c6348,935d01e1-232b-480e-a6bf-c21c617c6348,1,0,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,1,0,05c702a1-2c74-45d5-b2ee-fdd795b0945a,05c702a1-2c74-45d5-b2ee-fdd795b0945a,1,0,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,1,0,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,1,0,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,1,0,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,1,0,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,1,0,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,1,0,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,1,0,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,1,0,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,1,0,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,1,0,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,1,0,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,1,0,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,1,0,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,1,0,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,1,0,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,1,0,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,1,0,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,1,0,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,1,0,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,1,0,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,1,0,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,1,0,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,1,0,a89ee622-6942-411a-8566-f03d139c9e5b,a89ee622-6942-411a-8566-f03d139c9e5b,1,0,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,1,0,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,1,0,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,1,0,198ea989-5001-47ac-86b8-aa2585a5f7d7,198ea989-5001-47ac-86b8-aa2585a5f7d7,1,0,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,1,0,fb84c5f7-11da-4b17-979e-41e27a74e789,fb84c5f7-11da-4b17-979e-41e27a74e789,1,0,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,1,0,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,1,0,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,1,0,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,1,0,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,1,0,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,1,0,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,1,0,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,1,0,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,1,0,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,1,0,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,1,0,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,1,0,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,1,0,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,1,0,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,1,0,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,1,0,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,1,0,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,1,0,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,1,0,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,1,0,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,1,0,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,1,0,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,1,0,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,1,0,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,1,0,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,1,0,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,1,0,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,1,0,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,1,0,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,1,0,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,1,0,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,1,0,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,1,0,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,1,0,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,1,0,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,1,0,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,1,0,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,1,0,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,1,0,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,1,0,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,1,0,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,1,0,5a94a307-3f54-4753-8ef5-ce9f88417827,5a94a307-3f54-4753-8ef5-ce9f88417827,1,0,0f09b6b8-72ac-4461-96c4-683be403e2ff,0f09b6b8-72ac-4461-96c4-683be403e2ff,1,0,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,1,0,19d1d74a-de5f-475a-896c-a32b7d28f918,19d1d74a-de5f-475a-896c-a32b7d28f918,1,0,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,1,0,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,1,0,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,1,0,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,1,0,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,1,0,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,1,0,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,1,0,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,1,0,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,1,0,e6a53f32-0b7d-499d-844e-fb8df13a3519,e6a53f32-0b7d-499d-844e-fb8df13a3519,1,0,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,1,0,2c5a56d3-386e-45df-adc2-4471f52f9bdc,2c5a56d3-386e-45df-adc2-4471f52f9bdc,1,0,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,1,0,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,1,0,22474ca3-565b-4b67-a5b4-b0b959306d10,22474ca3-565b-4b67-a5b4-b0b959306d10,1,0,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1,0,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,1,0,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,1,0,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,1,0,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,1,0,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,1,0,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,1,0,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,1,0,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,1,0,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,1,0,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,1,0,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,1,0,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,1,0,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,1,0,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,1,0,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,1,0,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,1,0,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,1,0,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,1,0,3e44d463-f253-4a64-8d68-631fcb66935c,3e44d463-f253-4a64-8d68-631fcb66935c,1,0,653d6483-029b-4453-a7d0-3a3c6d9d0b05,653d6483-029b-4453-a7d0-3a3c6d9d0b05,1,0,ac507771-50bd-4f8b-b72f-5954562c9131,ac507771-50bd-4f8b-b72f-5954562c9131,1,0,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,1,0,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,1,0,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,1,0,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,1,0,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,1,0,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,1,0,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,1,0,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,1,0,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,1,0,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,1,0,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,1,0,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,1,0,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,1,0,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,1,0,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,1,0,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,1,0,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,1,0,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1,0,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,1,0,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,1,0,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,1,0,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,1,0,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,1,0,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,1,0,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,1,0,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,1,0,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,1,0,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,1,0,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,1,0,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,1,0,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,1,0,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,1,0,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,1,0,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1,0,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,1,0,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,1,0,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,1,0,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,1,0,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,1,0,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,1,0,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,1,0,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,1,0,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,1,0,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,1,0,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,1,0,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,1,0,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,1,0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,1,0,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,1,0,7e4afed8-5c56-4765-bcd0-a40e6121ba22,7e4afed8-5c56-4765-bcd0-a40e6121ba22,1,0,155660a1-8a63-4562-a715-d75a8af7176b,155660a1-8a63-4562-a715-d75a8af7176b,1,0,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,1,0,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,1,0,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,1,0,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,1,0,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,1,0,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,1,0,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,1,0,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,1,0,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,1,0,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,1,0,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,1,0,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,1,0,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,1,0,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,1,0,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,1,0,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,1,0,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,1,0,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,1,0,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,1,0,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,1,0,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,1,0,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,1,0,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,1,0,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,1,0,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,1,0,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,1,0,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,1,0,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,1,0,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,1,0,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,1,0,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,1,0,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,1,0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,1,0,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1,0,00605607-03ab-43fc-ba08-9fc32f582d0a,00605607-03ab-43fc-ba08-9fc32f582d0a,1,0,5ab0a910-74ab-4af0-b5a3-40845a789fde,5ab0a910-74ab-4af0-b5a3-40845a789fde,1,0,bb659006-c11e-4427-8d86-229ba43ef679,bb659006-c11e-4427-8d86-229ba43ef679,1,0,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,1,0,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,1,0,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,1,0,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,1,0,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,1,0,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,1,0,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,1,0,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,1,0,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,1,0,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,1,0,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,1,0,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1,0,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,1,0,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,1,0,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,1,0,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,1,0,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,1,0,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,1,0,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,1,0,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,1,0,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,1,0,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,1,0,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,1,0,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,1,0,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,1,0,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,1,0,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,1,0,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,1,0,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,1,0,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,1,0,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,1,0,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,1,0,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,1,0,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,1,0,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,1,0,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,1,0,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,1,0,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,1,0,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,1,0,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,1,0,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,1,0,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,1,0,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,1,0,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,1,0,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,1,0,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,1,0,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,1,0,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,1,0,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,1,0,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,1,0,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,1,0,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,1,0,00696255-ea14-4fee-8633-0962f3c441d1,00696255-ea14-4fee-8633-0962f3c441d1,1,0,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,1,0,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,1,0,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,1,0,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,1,0,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,1,0,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,1,0,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,1,0,fef27478-ddfd-4ad9-8161-148761f29698,fef27478-ddfd-4ad9-8161-148761f29698,1,0,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,1,0,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,1,0,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,1,0,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,1,0,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,1,0,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,1,0,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,1,0,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,1,0,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1,0,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,1,0,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,1,0,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,1,0,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,1,0,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,1,0,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,1,0,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,1,0,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,1,0,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,1,0,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,1,0,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,1,0,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,1,0,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,1,0,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,1,0,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,1,0,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,1,0,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,1,0,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,1,0,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,1,0,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,1,0,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,1,0,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,1,0,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,1,0,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,1,0,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,1,0,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,1,0,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,1,0,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,1,0,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,1,0,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,1,0,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,1,0,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,1,0,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,1,0,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,1,0,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,1,0,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,1,0,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,1,0,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,1,0,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,1,0,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,1,0,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,1,0,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,1,0,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,1,0,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,1,0,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,1,0,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,1,0,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,1,0,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,1,0,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,1,0,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,1,0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,1,0,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,1,0,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,1,0,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,1,0,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,1,0,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,1,0,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,1,0,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,1,0,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,1,0,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,1,0,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,1,0,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,1,0,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,1,0,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,1,0,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,1,0,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,1,0,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,1,0,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,1,0,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,1,0,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,1,0,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,1,0,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,1,0,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,1,0,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,1,0,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,1,0,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,1,0,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,1,0,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,1,0,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,1,0,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,1,0,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,1,0,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,1,0,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,1,0,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,1,0,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,1,0,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,1,0,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,1,0,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,1,0,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,1,0,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1,0,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,1,0,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,1,0,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,1,0,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,1,0,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,1,0,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1,0,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,1,0,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,1,0,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,1,0,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,1,0,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,1,0,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,1,0,3afe11f6-7424-4b41-a42f-91db33756fa3,3afe11f6-7424-4b41-a42f-91db33756fa3,1,0,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,1,0,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,1,0,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,1,0,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,1,0,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,1,0,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,1,0,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,1,0,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,1,0,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,1,0,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,1,0,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,1,0,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,1,0,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,1,0,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,1,0,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,1,0,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,1,0,97ec899d-a2a0-4691-83ff-25b78dd49ef6,97ec899d-a2a0-4691-83ff-25b78dd49ef6,1,0,411db885-f761-44e5-bdd1-9fdf9e741ac1,411db885-f761-44e5-bdd1-9fdf9e741ac1,1,0,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,1,0,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,1,0,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,1,0,43e37533-ed38-4000-a387-5749f8d9aaf3,43e37533-ed38-4000-a387-5749f8d9aaf3,1,0,e93bdb44-64b3-43d8-b15a-c561dbb91974,e93bdb44-64b3-43d8-b15a-c561dbb91974,1,0,a7c7c835-5402-4bdd-a0e3-d21746174d5a,a7c7c835-5402-4bdd-a0e3-d21746174d5a,1,0,07e81872-afac-4720-86b4-91e7bf4a2881,07e81872-afac-4720-86b4-91e7bf4a2881,1,0,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,1,0,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,1,0,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,1,0,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,1,0,39598414-9c1d-46ec-a534-8bd43e622e45,39598414-9c1d-46ec-a534-8bd43e622e45,1,0,b552c510-4fd4-4c16-9022-dc5babcafc52,b552c510-4fd4-4c16-9022-dc5babcafc52,1,0,3892c06d-28f1-4238-a929-201316cac1ed,3892c06d-28f1-4238-a929-201316cac1ed,1,0,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,1,0,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,1,0,1f587ff1-95a4-4f45-85b4-22bb97011177,1f587ff1-95a4-4f45-85b4-22bb97011177,1,0,567c68fd-74c7-4b6e-9119-56ac8d78073c,567c68fd-74c7-4b6e-9119-56ac8d78073c,1,0,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,1,0,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,1,0,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,1,0,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,1,0,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,1,0,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,1,0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,1,0,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,1,0,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,1,0,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,1,0,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,1,0,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,1,0,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,1,0,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,1,0,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,1,0,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,1,0,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,1,0,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,1,0,d5a73869-381e-4878-8db7-596643937202,d5a73869-381e-4878-8db7-596643937202,1,0,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,1,0,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,1,0,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,1,0,11a93e3a-3c5b-4242-913c-02474a383344,11a93e3a-3c5b-4242-913c-02474a383344,1,0,ddd2861c-592b-4879-b9de-4b05a22c0b43,ddd2861c-592b-4879-b9de-4b05a22c0b43,1,0,5b383021-a800-4f0b-b8a3-d344389bff6c,5b383021-a800-4f0b-b8a3-d344389bff6c,1,0,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,1,0,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,1,0,8a57d427-a34e-4121-84e6-1a86a9f9092d,8a57d427-a34e-4121-84e6-1a86a9f9092d,1,0,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,1,0,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,1,0,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,1,0,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,1,0,68447105-a784-4803-8eb8-3701b0fc819d,68447105-a784-4803-8eb8-3701b0fc819d,1,0,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,1,0,59dee70d-aeca-470a-b3c4-e43bb16c5753,59dee70d-aeca-470a-b3c4-e43bb16c5753,1,0,82777e92-0681-44bf-b51e-4d98fcd5d5bd,82777e92-0681-44bf-b51e-4d98fcd5d5bd,1,0,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,1,0,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,1,0,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,1,0,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,1,0,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,1,0,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,1,0,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,1,0,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,1,0,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,1,0,325bacdd-793f-47d8-b987-57e9d5f2782b,325bacdd-793f-47d8-b987-57e9d5f2782b,1,0,80395d47-70d7-4d8d-9b18-93283fba80c2,80395d47-70d7-4d8d-9b18-93283fba80c2,1,0,8b621ec9-24c9-4166-90ce-29c5ad30f78b,8b621ec9-24c9-4166-90ce-29c5ad30f78b,1,0,cc98670a-7b18-4973-b211-90261c5c8c10,cc98670a-7b18-4973-b211-90261c5c8c10,1,0,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,1,0,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,1,0,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,1,0,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,1,0,62957889-503f-4923-a372-29776dc3b5e5,62957889-503f-4923-a372-29776dc3b5e5,1,0,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,1,0,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,1,0,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,1,0,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,1,0,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,1,0,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,1,0,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,1,0,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,1,0,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,1,0,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,1,0,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,1,0,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,1,0,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,1,0,4f0bda80-2246-43be-95f8-ae8480682cd5,4f0bda80-2246-43be-95f8-ae8480682cd5,1,0,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,1,0,6f683f46-9eef-4e78-bc2f-7174238bf53c,6f683f46-9eef-4e78-bc2f-7174238bf53c,1,0,7d1ed38b-98cf-4a0e-a605-680bb580d904,7d1ed38b-98cf-4a0e-a605-680bb580d904,1,0,b769eda0-11de-401c-a68b-4fce4555d4fc,b769eda0-11de-401c-a68b-4fce4555d4fc,1,0,fd7a668f-3099-4e15-956a-92c6295dd4d5,fd7a668f-3099-4e15-956a-92c6295dd4d5,1,0,afcbd830-ec5f-4865-a176-ea3014dff908,afcbd830-ec5f-4865-a176-ea3014dff908,1,0,dc5fc801-14e4-42e8-b396-76eb30b69eea,dc5fc801-14e4-42e8-b396-76eb30b69eea,1,0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,1,0,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,1,0,398bf9d1-c353-461e-a1be-683047dcbe41,398bf9d1-c353-461e-a1be-683047dcbe41,1,0,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,1,0,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,1,0,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,1,0,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,1,0,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,1,0,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,1,0,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,1,0,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,1,0,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,1,0,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,1,0,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,1,0,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,1,0,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,1,0,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,1,0,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,1,0,80512d95-5458-4934-98ae-a7b58099196b,80512d95-5458-4934-98ae-a7b58099196b,1,0,6f2354cd-4a34-4921-96bb-b786486f85cf,6f2354cd-4a34-4921-96bb-b786486f85cf,1,0,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,1,0,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,1,0,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,1,0,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,1,0,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,1,0,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,1,0,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,1,0,1db1cb24-f364-4b91-bc96-c216764207a0,1db1cb24-f364-4b91-bc96-c216764207a0,1,0,64d7c8a7-1c15-4afb-ad97-abf8729c604e,64d7c8a7-1c15-4afb-ad97-abf8729c604e,1,0,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,1,0,c04b685a-0d2d-404c-a74a-775ffab298ce,c04b685a-0d2d-404c-a74a-775ffab298ce,1,0,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,1,0,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,1,0,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,1,0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,1,0,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,1,0,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,1,0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,1,0,e057e428-99c1-419d-a169-697c1e825e94,e057e428-99c1-419d-a169-697c1e825e94,1,0,784a60bd-4070-476d-9b8b-f607c76dc52b,784a60bd-4070-476d-9b8b-f607c76dc52b,1,0,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,1,0,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,1,0,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,1,0,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,1,0,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,1,0,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,1,0,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,1,0,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,1,0,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,1,0,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,1,0,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,1,0,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,1,0,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,1,0,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,1,0,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,1,0,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,1,0,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,1,0,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,1,0,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,1,0,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,1,0,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,1,0,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,1,0,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,1,0,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,1,0,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,1,0,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,1,0,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,1,0,e870a1bd-0c08-4d1e-832a-357922983c19,e870a1bd-0c08-4d1e-832a-357922983c19,1,0,9f71aeac-f889-40dc-91bd-d670da4efd2b,9f71aeac-f889-40dc-91bd-d670da4efd2b,1,0,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,1,0,614ef0bd-3298-408b-bf71-37df8ee60702,614ef0bd-3298-408b-bf71-37df8ee60702,1,0,26ff1be6-f72a-456a-9dce-302029752603,26ff1be6-f72a-456a-9dce-302029752603,1,0,db850a08-0c99-4a57-9b04-38be64bd38fb,db850a08-0c99-4a57-9b04-38be64bd38fb,1,0,abeca127-5ae9-46af-a5e8-d6438fd68367,abeca127-5ae9-46af-a5e8-d6438fd68367,1,0,bce81631-9f6d-42b3-b4b6-2199afb08f2f,bce81631-9f6d-42b3-b4b6-2199afb08f2f,1,0,67d6878f-3e47-4142-8f98-c5a207f0b8a8,67d6878f-3e47-4142-8f98-c5a207f0b8a8,1,0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,1,0,68636657-4d46-4c2a-9b2f-11521a55dfb4,68636657-4d46-4c2a-9b2f-11521a55dfb4,1,0,18a83f43-dc84-4f8a-9580-681b19f571c4,18a83f43-dc84-4f8a-9580-681b19f571c4,1,0,01c588b0-d0ce-4978-b04d-084e6a00fcc7,01c588b0-d0ce-4978-b04d-084e6a00fcc7,1,0,a23642d9-8c4f-44a5-8865-bfb286e47c55,a23642d9-8c4f-44a5-8865-bfb286e47c55,1,0,7b37e038-dcef-41e1-b6e7-ed73c6958415,7b37e038-dcef-41e1-b6e7-ed73c6958415,1,0,24df2d14-5ebf-4ded-ba14-5daee7a0c536,24df2d14-5ebf-4ded-ba14-5daee7a0c536,1,0,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,1,0,03bb028a-ee8c-411e-8382-653046f803c6,03bb028a-ee8c-411e-8382-653046f803c6,1,0,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,1,0,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,1,0,38d5ed93-133b-44fe-827a-69a6cfc0461d,38d5ed93-133b-44fe-827a-69a6cfc0461d,1,0,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,1,0,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,1,0,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,1,0,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,1,0,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1,0,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,1,0,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,1,0,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1,0,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,1,0,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,1,0,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,1,0,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,1,0,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,1,0,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,1,0,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,1,0,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1,0,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,1,0,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,1,0,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,1,0,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,1,0,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,1,0,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,1,0,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,1,0,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,1,0,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,1,0,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,1,0,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,1,0,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1,0,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,1,0,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,1,0,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,1,0,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,1,0,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,1,0,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,1,0,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,1,0,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,1,0,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,1,0,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,1,0,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,1,0,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,1,0,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,1,0,45ca19df-90f3-4143-a659-bc0cb97efee9,45ca19df-90f3-4143-a659-bc0cb97efee9,1,0,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,1,0,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,1,0,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,1,0,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,1,0,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,1,0,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,1,0,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,1,0,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,1,0,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,1,0,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,1,0,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,1,0,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,1,0,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,1,0,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,1,0,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,1,0,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,1,0,4fa11304-fbd4-4c90-909d-5024283a6868,4fa11304-fbd4-4c90-909d-5024283a6868,1,0,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,1,0,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,1,0,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,1,0,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,1,0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,1,0,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,1,0,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,1,0,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,1,0,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,1,0,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,1,0,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,1,0,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,1,0,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,1,0,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,1,0,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,1,0,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,1,0,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,1,0,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,1,0,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,1,0,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,1,0,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,1,0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,1,0,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,1,0,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,1,0,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,1,0,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,1,0,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,1,0,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,1,0,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,1,0,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1,0,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,1,0,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,1,0,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,1,0,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,1,0,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,1,0,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,1,0,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,1,0,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,1,0,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,1,0,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,1,0,2e459a7c-c448-4db4-ae21-e59646527030,2e459a7c-c448-4db4-ae21-e59646527030,1,0,891194d9-9f02-4b22-89cd-941181c83ecb,891194d9-9f02-4b22-89cd-941181c83ecb,1,0,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,1,0,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,1,0,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,1,0,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,1,0,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,1,0,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1,0,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,1,0,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,1,0,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,1,0,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,1,0,e0227e4b-be22-4614-8980-5d573fae705d,e0227e4b-be22-4614-8980-5d573fae705d,1,0,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,1,0,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,1,0,aa6444a8-6c17-4207-a623-9b734e08e30e,aa6444a8-6c17-4207-a623-9b734e08e30e,1,0,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,1,0,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,1,0,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,1,0,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,1,0,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,1,0,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,1,0,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,1,0,c224e520-7204-4f4a-aac9-b6221ea9ce44,c224e520-7204-4f4a-aac9-b6221ea9ce44,1,0,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,1,0,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,1,0,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,1,0,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,1,0,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,1,0,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,1,0,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,1,0,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,1,0,acd30e63-68dc-4ab2-a6fe-16eb69d09271,acd30e63-68dc-4ab2-a6fe-16eb69d09271,1,0,7b15bfe8-c4a9-4de8-8386-0d17268380d0,7b15bfe8-c4a9-4de8-8386-0d17268380d0,1,0,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,1,0,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,1,0,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,1,0,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,1,0,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,1,0,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,1,0,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,1,0,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,1,0,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,1,0,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,1,0,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,1,0,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,1,0,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,1,0,491a2337-1bf9-45c1-8ae6-95605ef41992,491a2337-1bf9-45c1-8ae6-95605ef41992,1,0,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,1,0,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,1,0,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,1,0,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,1,0,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,1,0,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,1,0,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,1,0,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,1,0,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,1,0,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,1,0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,1,0,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,1,0,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,1,0,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,1,0,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,1,0,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,1,0,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,1,0,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,1,0,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,1,0,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1,0,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,1,0,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,1,0,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,1,0,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,1,0,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,1,0,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,1,0,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,1,0,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,1,0,aef03c0b-2846-43b7-b382-9a51ec783e85,aef03c0b-2846-43b7-b382-9a51ec783e85,1,0,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,1,0,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1,0,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,1,0,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,1,0,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,1,0,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,1,0,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,1,0,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,1,0,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,1,0,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,1,0,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,1,0,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,1,0,1c2da2ac-e797-11e6-0489-a8667f21fde4,1c2da2ac-e797-11e6-0489-a8667f21fde4,1,0,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,1,0,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,1,0,df7892fe-e796-11e6-0489-a8667f21fde4,df7892fe-e796-11e6-0489-a8667f21fde4,1,0,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,1,0,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,1,0,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,1,0,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,1,0,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,1,0,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,1,0,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,1,0,fae8b26c-e796-11e6-0489-a8667f21fde4,fae8b26c-e796-11e6-0489-a8667f21fde4,1,0,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,1,0,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,1,0,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,1,0,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,1,0,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,1,0,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,1,0,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,1,0,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,1,0,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,1,0,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,1,0,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1,0,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,1,0,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,1,0,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,1,0,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,1,0,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,1,0,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,1,0,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,1,0,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,1,0,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,1,0,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,1,0,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,1,0,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,1,0,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,1,0,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,1,0,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,1,0,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,1,0,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,1,0,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,1,0,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,1,0,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,1,0,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,1,0,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,1,0,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,1,0,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,1,0,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,1,0,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,1,0,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,1,0,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,1,0,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,1,0,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,1,0,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,1,0,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,1,0,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,1,0,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,1,0,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,1,0,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,1,0,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,1,0,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,1,0,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,1,0,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,1,0,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,1,0,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,1,0,f660bf92-7de1-4a22-9cea-777069e4679d,f660bf92-7de1-4a22-9cea-777069e4679d,1,0,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,1,0,20feb794-eb05-46a6-90e7-ca4e2376d7b2,20feb794-eb05-46a6-90e7-ca4e2376d7b2,1,0,c73da415-6fc3-449a-a784-b25aed54eccd,c73da415-6fc3-449a-a784-b25aed54eccd,1,0,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,1,0,2f484aa4-452a-46af-a707-a5a6917bc0db,2f484aa4-452a-46af-a707-a5a6917bc0db,1,0,fd6ff934-6f11-4182-b0cb-6926902d33c0,fd6ff934-6f11-4182-b0cb-6926902d33c0,1,0,315af891-2075-4833-a404-6c0f2004ee53,315af891-2075-4833-a404-6c0f2004ee53,1,0,5725db77-bfbf-4d85-9565-163b309a53ee,5725db77-bfbf-4d85-9565-163b309a53ee,1,0,99a7142c-b3c7-4221-abf8-6831a3cbc16e,99a7142c-b3c7-4221-abf8-6831a3cbc16e,1,0,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,1,0,2e09abe1-0934-42ae-970f-5e001c35c31a,2e09abe1-0934-42ae-970f-5e001c35c31a,1,0,587d48a3-5627-4481-b13e-c22740b57d8a,587d48a3-5627-4481-b13e-c22740b57d8a,1,0,1f3e3089-1e04-4147-8ece-aa96a76467dd,1f3e3089-1e04-4147-8ece-aa96a76467dd,1,0,22a213b5-ed72-4181-8ff8-89f860c87aa1,22a213b5-ed72-4181-8ff8-89f860c87aa1,1,0,4c56cbff-653e-4f16-b702-c77190d7eb7f,4c56cbff-653e-4f16-b702-c77190d7eb7f,1,0,172ff335-c7ae-4905-b705-2a1475b95713,172ff335-c7ae-4905-b705-2a1475b95713,1,0,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,1,0,cf896f41-7cea-4083-a9f8-96ad881ce641,cf896f41-7cea-4083-a9f8-96ad881ce641,1,0,1d852dc0-90c9-4568-84f9-b1d822573b6b,1d852dc0-90c9-4568-84f9-b1d822573b6b,1,0,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,1,0,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,1,0,37c8f5e1-3513-47f8-896d-a54d11b83dcd,37c8f5e1-3513-47f8-896d-a54d11b83dcd,1,0,9e07733c-39f0-491b-91e1-bf2782d957dd,9e07733c-39f0-491b-91e1-bf2782d957dd,1,0,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,1,0,5902d979-1235-4d5a-ace7-93261bdeb725,5902d979-1235-4d5a-ace7-93261bdeb725,1,0,5a090286-7969-44c9-815b-fc58aeb5d8d3,5a090286-7969-44c9-815b-fc58aeb5d8d3,1,0,73380bb1-bee3-4b73-a3df-1dbea99011d2,73380bb1-bee3-4b73-a3df-1dbea99011d2,1,0,8be29533-38de-413d-b420-7dac2e80af6c,8be29533-38de-413d-b420-7dac2e80af6c,1,0,82a77018-8e38-41dd-9d1f-3130bc29a707,82a77018-8e38-41dd-9d1f-3130bc29a707,1,0,4d75aaef-532e-4ed3-8153-083f04f05cc1,4d75aaef-532e-4ed3-8153-083f04f05cc1,1,0,3854a0ba-e156-4ba3-a301-b1a41ac386c4,3854a0ba-e156-4ba3-a301-b1a41ac386c4,1,0,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,1,0,c2321963-cd86-45ec-b323-3fdb5932da3a,c2321963-cd86-45ec-b323-3fdb5932da3a,1,0,d5af38bf-6261-4177-8f74-998a85f0ef39,d5af38bf-6261-4177-8f74-998a85f0ef39,1,0,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,1,0,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,1,0,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,1,0,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,1,0,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,1,0,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,1,0,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,1,0,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,1,0,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,1,0,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,1,0,d61ca454-505b-4fd6-be15-d7ed948a5ff6,d61ca454-505b-4fd6-be15-d7ed948a5ff6,1,0,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,1,0,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,1,0,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,1,0,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,1,0,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,1,0,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,1,0,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,1,0,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,1,0,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,1,0,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,1,0,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,1,0,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,1,0,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,1,0,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,1,0,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,1,0,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,1,0,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,1,0,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,1,0,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,1,0,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,1,0,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,1,0,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,1,0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,1,0,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,1,0,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,1,0,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,1,0,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,1,0,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,1,0,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,1,0,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,1,0,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,1,0,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,1,0,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,1,0,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,1,0,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,1,0,a469f018-da26-485f-87c3-f580321a34f0,a469f018-da26-485f-87c3-f580321a34f0,1,0,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,1,0,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,1,0,628de771-c19c-4474-989f-8fb6cd7756a2,628de771-c19c-4474-989f-8fb6cd7756a2,1,0,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,1,0,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,1,0,6789e57b-1293-442c-97d0-b8007367602e,6789e57b-1293-442c-97d0-b8007367602e,1,0,0f193c89-b664-448e-bed3-2147430367f7,0f193c89-b664-448e-bed3-2147430367f7,1,0,4c9b2506-75a8-47d3-a5d5-d946088ba14a,4c9b2506-75a8-47d3-a5d5-d946088ba14a,1,0,36eacaa1-2efd-49c0-82de-2f8972535bf2,36eacaa1-2efd-49c0-82de-2f8972535bf2,1,0,c35a643d-fe3a-4293-93c0-074fa68a31e3,c35a643d-fe3a-4293-93c0-074fa68a31e3,1,0,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,1,0,72ee9a03-a320-4e60-be04-0ee813ea567f,72ee9a03-a320-4e60-be04-0ee813ea567f,1,0,f6f52cc8-23a3-4402-b1eb-0e41584c802a,f6f52cc8-23a3-4402-b1eb-0e41584c802a,1,0,8398e065-8b4b-4901-b057-2a048776bafe,8398e065-8b4b-4901-b057-2a048776bafe,1,0,073c56ca-bf45-422d-957a-f9c57aeee4d0,073c56ca-bf45-422d-957a-f9c57aeee4d0,1,0,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,1,0,68598d98-0c59-4cda-b0b2-6901d3aff88b,68598d98-0c59-4cda-b0b2-6901d3aff88b,1,0,219c1375-f26e-4698-aa82-4b9d735df783,219c1375-f26e-4698-aa82-4b9d735df783,1,0,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,1,0,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,1,0,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,1,0,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1,0,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,1,0,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,1,0,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,1,0,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,1,0,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,1,0,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,1,0,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,1,0,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,1,0,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,1,0,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,1,0,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,1,0,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,1,0,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,1,0,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,1,0,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,1,0,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,1,0,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,1,0,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,1,0,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,1,0,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,1,0,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,1,0,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,1,0,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,1,0,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1,0,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,1,0,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,1,0,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,1,0,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,1,0,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,1,0,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,1,0,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,1,0,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,1,0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,1,0,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,1,0,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,1,0,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,1,0,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,1,0,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,1,0,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,1,0,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,1,0,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,1,0,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1,0,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,1,0,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,1,0,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,1,0,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,1,0,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,1,0,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1,0,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,1,0,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,1,0,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,1,0,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,1,0,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,1,0,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,1,0,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,1,0,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,1,0,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,1,0,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,1,0,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,1,0,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,1,0,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,1,0,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,1,0,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,1,0,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,1,0,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,1,0,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,1,0,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,1,0,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,1,0,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,1,0,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,1,0,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,1,0,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,1,0,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,1,0,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,1,0,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,1,0,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,1,0,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,1,0,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,1,0,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,1,0,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,1,0,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,1,0,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,1,0,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,1,0,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,1,0,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,1,0,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,1,0,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,1,0,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,1,0,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,1,0,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,1,0,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,1,0,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,1,0,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,1,0,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,1,0,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,1,0,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,1,0,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,1,0,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,1,0,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,1,0,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,1,0,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,1,0,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,1,0,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,1,0,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,1,0,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,1,0,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,1,0,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,1,0,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,1,0,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,1,0,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,1,0,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,1,0,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,1,0,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,1,0,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,1,0,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,1,0,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,1,0,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,1,0,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,1,0,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,1,0,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,1,0,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,1,0,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,1,0,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,1,0,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,1,0,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,1,0,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,1,0,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,1,0,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,1,0,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,1,0,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,1,0,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,1,0,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,1,0,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,1,0,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,1,0,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,1,0,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,1,0,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,1,0,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,1,0,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,1,0,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,1,0,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,1,0,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,1,0,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,1,0,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,1,0,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,1,0,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,1,0,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,1,0,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,1,0,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,1,0,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,1,0,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,1,0,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,1,0,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,1,0,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,1,0,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,1,0,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,1,0,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,1,0,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,1,0,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,1,0,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,1,0,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,1,0,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,1,0,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,1,0,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,1,0,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,1,0,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,1,0,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,1,0,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,1,0,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,1,0,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,1,0,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,1,0,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,1,0,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,1,0,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,1,0,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,1,0,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,1,0,036868c2-e2c4-426b-8402-0d77b4224828,036868c2-e2c4-426b-8402-0d77b4224828,1,0,1bf18e24-8157-4aa4-b790-21c6535f5233,1bf18e24-8157-4aa4-b790-21c6535f5233,1,0,18470536-57df-48f0-9a85-68e4006558eb,18470536-57df-48f0-9a85-68e4006558eb,1,0,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,1,0,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,1,0,77ee9f6c-0be9-450f-978c-297626d6275b,77ee9f6c-0be9-450f-978c-297626d6275b,1,0,a63e6145-0d4b-4da2-9864-485a61e621df,a63e6145-0d4b-4da2-9864-485a61e621df,1,0,f29738d5-ad22-47bf-9053-497763674486,f29738d5-ad22-47bf-9053-497763674486,1,0,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,1,0,9aca958a-a938-4421-9e37-6606e02f7b77,9aca958a-a938-4421-9e37-6606e02f7b77,1,0,44109976-b763-4807-a013-9d04c3675bf3,44109976-b763-4807-a013-9d04c3675bf3,1,0,46127175-144d-438e-8fbe-c55ae0233620,46127175-144d-438e-8fbe-c55ae0233620,1,0,20754057-6397-4478-a484-74b8c2f243ee,20754057-6397-4478-a484-74b8c2f243ee,1,0,b8a06e8b-4581-4088-a5b4-a5d3330eab22,b8a06e8b-4581-4088-a5b4-a5d3330eab22,1,0,ea838b79-af81-4767-a8b1-fce68baa866a,ea838b79-af81-4767-a8b1-fce68baa866a,1,0,5e1056d0-6778-4030-8806-3dc90ffed318,5e1056d0-6778-4030-8806-3dc90ffed318,1,0,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,1,0,3701531a-b408-455f-a49d-652d3fcab4ef,3701531a-b408-455f-a49d-652d3fcab4ef,1,0,63e229aa-2638-45f1-9c5e-f821d9397ac3,63e229aa-2638-45f1-9c5e-f821d9397ac3,1,0,9e425f71-ef7d-4936-9f1b-7dceca99ca95,9e425f71-ef7d-4936-9f1b-7dceca99ca95,1,0,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,1,0,c6777ffe-1fb2-4807-8624-43f47a4e3947,c6777ffe-1fb2-4807-8624-43f47a4e3947,1,0,91c8e02d-ec9c-41d6-a2b1-ec1e906c055a,91c8e02d-ec9c-41d6-a2b1-ec1e906c055a,1,0,be42c5c6-b604-4180-a3d7-24b2348c8d5e,be42c5c6-b604-4180-a3d7-24b2348c8d5e,1,0,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,1,0,6fd083fe-a132-4f63-b38f-4891004aca8a,6fd083fe-a132-4f63-b38f-4891004aca8a,1,0,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,1,0,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,1,0,ab057ce4-ac51-4465-8aad-eadc9088c62d,ab057ce4-ac51-4465-8aad-eadc9088c62d,1,0,8842c0e3-2e20-4f37-ae7c-f5449004994b,8842c0e3-2e20-4f37-ae7c-f5449004994b,1,0,5b2cc44b-69cb-495c-a26b-003a495df40b,5b2cc44b-69cb-495c-a26b-003a495df40b,1,0,30250d93-10ff-45c9-920b-5fed3f9d8093,30250d93-10ff-45c9-920b-5fed3f9d8093,1,0,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,1,0,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,1,0,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,1,0,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,1,0,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,1,0,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,1,0,23f93492-59f5-491b-8708-45096934c7e6,23f93492-59f5-491b-8708-45096934c7e6,1,0,30f5471a-17fb-4184-9798-4f8e3ef0cccb,30f5471a-17fb-4184-9798-4f8e3ef0cccb,1,0,27abda4c-a43c-49b4-90cd-db780afe0c45,27abda4c-a43c-49b4-90cd-db780afe0c45,1,0,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,1,0,1a28db16-d410-4101-bf31-21cefa880dae,1a28db16-d410-4101-bf31-21cefa880dae,1,0,2b85bcf6-85b0-4efb-bada-b65414a8d264,2b85bcf6-85b0-4efb-bada-b65414a8d264,1,0,cf027de4-59c9-4b8f-9695-b1d4d16548fe,cf027de4-59c9-4b8f-9695-b1d4d16548fe,1,0,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,1,0,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,1,0,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,1,0,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,1,0,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,1,0,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,1,0,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,1,0,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,1,0,88cefe4a-a6c5-4753-935e-f956d9de9f77,88cefe4a-a6c5-4753-935e-f956d9de9f77,1,0,882e78b7-90bd-4b95-8852-146bdb51ec15,882e78b7-90bd-4b95-8852-146bdb51ec15,1,0,ae4435c3-62c0-4f08-b526-7f9571eed8ae,ae4435c3-62c0-4f08-b526-7f9571eed8ae,1,0,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,1,0,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,1,0,c7b46558-d688-4c42-ae52-f98de7923176,c7b46558-d688-4c42-ae52-f98de7923176,1,0,31fdbb46-1df1-4b74-a54e-b922260dcca6,31fdbb46-1df1-4b74-a54e-b922260dcca6,1,0,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,1,0,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,1,0,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,1,0,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,1,0,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,1,0,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,1,0,8317ac49-890d-4921-8c0d-1bfc676f0b40,8317ac49-890d-4921-8c0d-1bfc676f0b40,1,0,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,1,0,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,1,0,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,1,0,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,1,0,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,1,0,f55d74bf-5824-4228-9683-31f7c7fdf74d,f55d74bf-5824-4228-9683-31f7c7fdf74d,1,0,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,1,0,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,1,0,c30c6860-befb-497e-b432-3dba0f86c540,c30c6860-befb-497e-b432-3dba0f86c540,1,0,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,1,0,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,1,0,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,1,0,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,1,0,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,1,0,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,1,0,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,1,0,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,1,0,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,1,0,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,1,0,e67dff00-92e2-4f58-a950-d5bbca9291c5,e67dff00-92e2-4f58-a950-d5bbca9291c5,1,0,e1964724-804a-4ecc-be9e-5b84e58f2b84,e1964724-804a-4ecc-be9e-5b84e58f2b84,1,0,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,1,0,bf3cb513-2856-472b-8713-7bf8ba70cdce,bf3cb513-2856-472b-8713-7bf8ba70cdce,1,0,de4815c8-0853-47e0-862b-b60119c674f6,de4815c8-0853-47e0-862b-b60119c674f6,1,0,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,1,0,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,1,0,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,1,0,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,1,0,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,1,0,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,1,0,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,1,0,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,1,0,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,1,0,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,1,0,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,1,0,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,1,0,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,1,0,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,1,0,436b558e-6547-4ba6-8cee-954fe36743ea,436b558e-6547-4ba6-8cee-954fe36743ea,1,0,6120bb6e-b177-48bf-b467-02bab0d4cc0d,6120bb6e-b177-48bf-b467-02bab0d4cc0d,1,0,a5af4715-6c4f-484b-9599-5b1b9147713f,a5af4715-6c4f-484b-9599-5b1b9147713f,1,0,307b6e66-6fef-4777-b20a-37898928932f,307b6e66-6fef-4777-b20a-37898928932f,1,0,a69494c0-dcce-4359-aa82-c1cfae8a43eb,a69494c0-dcce-4359-aa82-c1cfae8a43eb,1,0,2b243d49-5500-403a-b177-ac1c70bb889d,2b243d49-5500-403a-b177-ac1c70bb889d,1,0,51c040c6-e7a4-4e0e-b479-039636fdb6ec,51c040c6-e7a4-4e0e-b479-039636fdb6ec,1,0,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,1,0,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,1,0,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,1,0,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,1,0,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,1,0,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,1,0,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,1,0,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,1,0,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,1,0,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,1,0,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,1,0,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,1,0,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,1,0,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,1,0,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,1,0,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,1,0,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,1,0,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,1,0,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,1,0,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,1,0,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,1,0,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,1,0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,1,0,d2160866-78ca-424a-92b9-d389fb341ee0,d2160866-78ca-424a-92b9-d389fb341ee0,1,0,73b36823-72a4-4286-8ee2-02b2f086d5ea,73b36823-72a4-4286-8ee2-02b2f086d5ea,1,0,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,1,0,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,1,0,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,1,0,c013a650-bd4b-4e14-97cc-05df17dbb0d5,c013a650-bd4b-4e14-97cc-05df17dbb0d5,1,0,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,1,0,177710c8-2441-4436-a096-64c27aa7aec5,177710c8-2441-4436-a096-64c27aa7aec5,1,0,ab143db8-185b-4093-a3b1-c65322cb8fd6,ab143db8-185b-4093-a3b1-c65322cb8fd6,1,0,e3ce5882-541e-4620-9c24-f00deacc33c2,e3ce5882-541e-4620-9c24-f00deacc33c2,1,0,c9694243-390e-4217-8996-b33924c4fe60,c9694243-390e-4217-8996-b33924c4fe60,1,0,8e08ea9b-8c63-475a-9335-c8edc6214555,8e08ea9b-8c63-475a-9335-c8edc6214555,1,0,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,1,0,72846fcc-a9ab-4393-9133-38c1805abab1,72846fcc-a9ab-4393-9133-38c1805abab1,1,0,91a81670-9124-4b65-aecd-77f252249030,91a81670-9124-4b65-aecd-77f252249030,1,0,ed2e5344-9261-4473-86a5-f914b8458cfc,ed2e5344-9261-4473-86a5-f914b8458cfc,1,0,4ff32c59-4ca5-4e60-b54c-f46f757758e2,4ff32c59-4ca5-4e60-b54c-f46f757758e2,1,0,acbc674d-d053-43f4-9d62-86fbbb962ee2,acbc674d-d053-43f4-9d62-86fbbb962ee2,1,0,e0608801-124b-4c52-9a17-9072eb5b676c,e0608801-124b-4c52-9a17-9072eb5b676c,1,0,64e3295e-89c6-4b09-8dc4-b552da47db84,64e3295e-89c6-4b09-8dc4-b552da47db84,1,0,2c1846a5-09f2-414b-b95c-67ed7432ce0e,2c1846a5-09f2-414b-b95c-67ed7432ce0e,1,0,ce339ae7-a794-425b-8d5f-b04fd4b21364,ce339ae7-a794-425b-8d5f-b04fd4b21364,1,0,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,1,0,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,1,0,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,1,0,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,1,0,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,1,0,951927d4-7bfc-4edb-b97f-dcc29a937400,951927d4-7bfc-4edb-b97f-dcc29a937400,1,0,71309e88-d514-40f3-a329-b2a420e75504,71309e88-d514-40f3-a329-b2a420e75504,1,0,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,1,0,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,1,0,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,1,0,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,1,0,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,1,0,fddfb2fd-4d58-4bc6-b196-720425a8c029,fddfb2fd-4d58-4bc6-b196-720425a8c029,1,0,ce075cf1-1778-4671-aa40-166e6c41adc8,ce075cf1-1778-4671-aa40-166e6c41adc8,1,0,eddb111f-7622-44a3-b7d8-97faec67b23c,eddb111f-7622-44a3-b7d8-97faec67b23c,1,0,84872892-842e-4d7d-a3cd-576c42343a7a,84872892-842e-4d7d-a3cd-576c42343a7a,1,0,78ad6047-473d-494b-a2ba-81e062b567e6,78ad6047-473d-494b-a2ba-81e062b567e6,1,0,911f8810-e96e-4f02-9377-47e49919f87e,911f8810-e96e-4f02-9377-47e49919f87e,1,0,cde46d6d-9f8a-45b6-98a7-9411030ccd72,cde46d6d-9f8a-45b6-98a7-9411030ccd72,1,0,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,1,0,224b9439-4b30-4b64-8edf-e7718ee90a7d,224b9439-4b30-4b64-8edf-e7718ee90a7d,1,0,74dc2374-daf1-4a8a-ba10-d3aced96af3b,74dc2374-daf1-4a8a-ba10-d3aced96af3b,1,0,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,1,0,e28e953f-93b3-4d4d-9ee4-c56df26037eb,e28e953f-93b3-4d4d-9ee4-c56df26037eb,1,0,578e0fd2-997c-437a-befc-33d128097a7e,578e0fd2-997c-437a-befc-33d128097a7e,1,0,14089231-31a8-4471-b85b-064836794ff3,14089231-31a8-4471-b85b-064836794ff3,1,0,014de276-fb2f-4deb-873f-475729be0f66,014de276-fb2f-4deb-873f-475729be0f66,1,0,40a60ff7-96ca-485b-a2d9-640a208a7de6,40a60ff7-96ca-485b-a2d9-640a208a7de6,1,0,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,1,0,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,1,0,b9ef62f6-9b1d-4d13-8016-73ed531d195a,b9ef62f6-9b1d-4d13-8016-73ed531d195a,1,0,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,1,0,229fe764-87f5-4d19-b042-c31fef5cddd6,229fe764-87f5-4d19-b042-c31fef5cddd6,1,0,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,1,0,e932800c-fd81-417d-a601-c774b888d66a,e932800c-fd81-417d-a601-c774b888d66a,1,0,a2335b6f-1dbb-4722-979b-8bed83aa8c94,a2335b6f-1dbb-4722-979b-8bed83aa8c94,1,0,211cf921-d880-4f74-b8ee-5312dea28613,211cf921-d880-4f74-b8ee-5312dea28613,1,0,2fd3a396-b8ae-409e-9373-02a039393a80,2fd3a396-b8ae-409e-9373-02a039393a80,1,0,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,1,0,346ef414-b20b-4095-86fe-18ca21c9887f,346ef414-b20b-4095-86fe-18ca21c9887f,1,0,c01ab97b-4964-4f7d-b749-56c0b94feb93,c01ab97b-4964-4f7d-b749-56c0b94feb93,1,0,0cc63813-cf16-4a99-b3bd-18a773091230,0cc63813-cf16-4a99-b3bd-18a773091230,1,0,4fc00971-c980-468a-9690-5cd520d12eb0,4fc00971-c980-468a-9690-5cd520d12eb0,1,0,85972c27-4f39-4982-9307-7877e87ef87b,85972c27-4f39-4982-9307-7877e87ef87b,1,0,96afdffb-7595-4c49-9e86-8296f50bd2f5,96afdffb-7595-4c49-9e86-8296f50bd2f5,1,0,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,1,0,e125d3e0-950f-42ee-8904-bd26091afa55,e125d3e0-950f-42ee-8904-bd26091afa55,1,0,2b4797a5-074a-4a01-b99f-1c5590cfde40,2b4797a5-074a-4a01-b99f-1c5590cfde40,1,0,718e53d2-24ec-40fb-9def-825441ada46c,718e53d2-24ec-40fb-9def-825441ada46c,1,0,4c0a7fd6-8f09-41d6-949f-65ce708c1256,4c0a7fd6-8f09-41d6-949f-65ce708c1256,1,0,792abc06-b52a-4691-ba92-96ed73ca702a,792abc06-b52a-4691-ba92-96ed73ca702a,1,0,148dbe44-86d1-4362-b9db-8ff68cd2b34d,148dbe44-86d1-4362-b9db-8ff68cd2b34d,1,0,1fbc893e-3000-4fac-88f5-c82251835d65,1fbc893e-3000-4fac-88f5-c82251835d65,1,0,05852816-63ec-4179-abca-66372bbfb04c,05852816-63ec-4179-abca-66372bbfb04c,1,0,0165f721-b011-4524-bfd5-81e35092f2be,0165f721-b011-4524-bfd5-81e35092f2be,1,0,e74925d4-1979-4600-8560-0932d26450ad,e74925d4-1979-4600-8560-0932d26450ad,1,0,aa108131-151d-4356-8a24-345e4ec74281,aa108131-151d-4356-8a24-345e4ec74281,1,0,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,1,0,e3251f1a-3c80-4c86-9960-270920bd512f,e3251f1a-3c80-4c86-9960-270920bd512f,1,0,3c3d5474-977b-4df9-88de-042e997bd10d,3c3d5474-977b-4df9-88de-042e997bd10d,1,0,4b88d172-5a44-4011-bb38-e94bf7a9c879,4b88d172-5a44-4011-bb38-e94bf7a9c879,1,0,3bced2d4-e3d7-4489-a26d-f84620b096f4,3bced2d4-e3d7-4489-a26d-f84620b096f4,1,0,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,1,0,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,1,0,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,1,0,18436045-1008-4114-8032-274fea0f4627,18436045-1008-4114-8032-274fea0f4627,1,0,cad93727-cffb-44a6-aaee-be73a078e802,cad93727-cffb-44a6-aaee-be73a078e802,1,0,c034f410-ff8e-45d7-925f-94448f88a7af,c034f410-ff8e-45d7-925f-94448f88a7af,1,0,0027727b-3917-4010-9953-1649266e8ed7,0027727b-3917-4010-9953-1649266e8ed7,1,0,b088786a-046f-458c-8e7a-5bebf8df8b34,b088786a-046f-458c-8e7a-5bebf8df8b34,1,0,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,1,0,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,1,0,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,1,0,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,1,0,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,1,0,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,1,0,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,1,0,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,1,0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,1,0,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,1,0,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,1,0,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,1,0,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,1,0,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,1,0,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,1,0,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,1,0,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,1,0,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,1,0,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,1,0,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,1,0,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,1,0,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,1,0,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,1,0,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,1,0,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,1,0,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,1,0,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,1,0,de2bdd4f-93f2-4341-86d6-7082fc286a5c,de2bdd4f-93f2-4341-86d6-7082fc286a5c,1,0,ba96ec0e-931e-45be-a782-e68ba4fedddb,ba96ec0e-931e-45be-a782-e68ba4fedddb,1,0,9af5882f-3a42-4fae-83df-6aa8de577112,9af5882f-3a42-4fae-83df-6aa8de577112,1,0,79bc5e39-3017-48bf-8e42-fa34e8b581ef,79bc5e39-3017-48bf-8e42-fa34e8b581ef,1,0,fe6e207f-d306-4470-8441-ffd3f3710d31,fe6e207f-d306-4470-8441-ffd3f3710d31,1,0,7451af80-7387-4e8d-a3da-2ae0540c3fd4,7451af80-7387-4e8d-a3da-2ae0540c3fd4,1,0,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1,0,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,1,0,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,1,0,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,1,0,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,1,0,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,1,0,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,1,0,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,1,0,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,1,0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,1,0,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,1,0,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,1,0,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,1,0,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1,0,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,1,0,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,1,0,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,1,0,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,1,0,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,1,0,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,1,0,b67b872e-236a-4ea7-9838-0827234867b4,b67b872e-236a-4ea7-9838-0827234867b4,1,0,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1,0,ce422d4f-1221-4ebf-a801-975a3220a226,ce422d4f-1221-4ebf-a801-975a3220a226,1,0,8735949b-f259-48b9-97e9-a81dfc7dcc8d,8735949b-f259-48b9-97e9-a81dfc7dcc8d,1,0,b8810612-dc7a-4a45-a83c-163a8669b578,b8810612-dc7a-4a45-a83c-163a8669b578,1,0,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,1,0,349c3dc3-0729-41f3-983f-3b13170c6509,349c3dc3-0729-41f3-983f-3b13170c6509,1,0,8281df26-4bde-47ba-926e-f22a8042bf1f,8281df26-4bde-47ba-926e-f22a8042bf1f,1,0,7278fb66-1d48-4c1d-bd15-425f78ad0c32,7278fb66-1d48-4c1d-bd15-425f78ad0c32,1,0,6893007f-8354-4b3b-b205-7c7d385cbde0,6893007f-8354-4b3b-b205-7c7d385cbde0,1,0,d74365a3-b434-41d0-84a7-543c336b5880,d74365a3-b434-41d0-84a7-543c336b5880,1,0,3d42502a-5705-49d7-b4ed-29edbd6306bc,3d42502a-5705-49d7-b4ed-29edbd6306bc,1,0,221e24e6-b31c-45b6-8835-2ad08d595c5f,221e24e6-b31c-45b6-8835-2ad08d595c5f,1,0,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,1,0,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,1,0,55956063-b227-4c74-8d9c-4a62b4f0dbc7,55956063-b227-4c74-8d9c-4a62b4f0dbc7,1,0,b6871b83-7269-43a9-b9a6-a195ff93365d,b6871b83-7269-43a9-b9a6-a195ff93365d,1,0,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,1,0,0cf89f30-e702-4c9e-8af4-888634463b99,0cf89f30-e702-4c9e-8af4-888634463b99,1,0,77f890ac-3c9c-4043-a5b7-12158772bcf5,77f890ac-3c9c-4043-a5b7-12158772bcf5,1,0,2bc734f9-8c0d-473a-b1c3-340395069501,2bc734f9-8c0d-473a-b1c3-340395069501,1,0,316c3933-21dd-4e8a-9450-0900e85ef7e2,316c3933-21dd-4e8a-9450-0900e85ef7e2,1,0,994fe78b-9f61-4aaf-9355-fafcae6b816d,994fe78b-9f61-4aaf-9355-fafcae6b816d,1,0,8448f07b-751b-4670-b44c-3564e81e5cdc,8448f07b-751b-4670-b44c-3564e81e5cdc,1,0,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,1,0,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,1,0,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,1,0,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,1,0,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,1,0,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,1,0,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,1,0,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,1,0,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,1,0,ee0412d3-58e7-4715-8774-d49778e1ef73,ee0412d3-58e7-4715-8774-d49778e1ef73,1,0,ea31df21-1402-417a-9788-b17a7116e842,ea31df21-1402-417a-9788-b17a7116e842,1,0,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,1,0,e964753f-7f4c-4f9f-bd17-cdac317c1d35,e964753f-7f4c-4f9f-bd17-cdac317c1d35,1,0,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,1,0,43c22498-3fd6-4038-a291-05f0db9ab66a,43c22498-3fd6-4038-a291-05f0db9ab66a,1,0,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,1,0,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,1,0,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,1,0,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,1,0,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,1,0,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,1,0,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,1,0,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,1,0,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,1,0,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,1,0,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,1,0,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,1,0,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1,0,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,1,0,483720db-6c9e-4179-b5c7-56159c9b6073,483720db-6c9e-4179-b5c7-56159c9b6073,1,0,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,1,0,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,1,0,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,1,0,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,1,0,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,1,0,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,1,0,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,1,0,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,1,0,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,1,0,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,1,0,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,1,0,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,1,0,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,1,0,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,1,0,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,1,0,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,1,0,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,1,0,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,1,0,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,1,0,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,1,0,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,1,0,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,1,0,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,1,0,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,1,0,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,1,0,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,1,0,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,1,0,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,1,0,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,1,0,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,1,0,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,1,0,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,1,0,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,1,0,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,1,0,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,1,0,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,1,0,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,1,0,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,1,0,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,1,0,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,1,0,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,1,0,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,1,0,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,1,0,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,1,0,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,1,0,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,1,0,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,1,0,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,1,0,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,1,0,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,1,0,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,1,0,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,1,0,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,1,0,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,1,0,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,1,0,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,1,0,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,1,0,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,1,0,7a4e17bf-3649-4982-a9c6-5982390f1f1d,7a4e17bf-3649-4982-a9c6-5982390f1f1d,1,0,722be6e0-2698-431b-9206-777a36e6742f,722be6e0-2698-431b-9206-777a36e6742f,1,0,75bb0122-26bd-40be-8de8-7a57680c85ae,75bb0122-26bd-40be-8de8-7a57680c85ae,1,0,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,1,0,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,1,0,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1,0,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,1,0,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,1,0,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,1,0,a6be80f7-d6aa-4371-a180-3d355080d849,a6be80f7-d6aa-4371-a180-3d355080d849,1,0,b37722c3-e29f-4a40-b4eb-0317919fc7a5,b37722c3-e29f-4a40-b4eb-0317919fc7a5,1,0,b1b1cd90-094d-428b-a6bc-156521c1c54d,b1b1cd90-094d-428b-a6bc-156521c1c54d,1,0,4f79ef7c-79be-4a69-acc0-bd591c712d03,4f79ef7c-79be-4a69-acc0-bd591c712d03,1,0,a0dd2129-d3a1-4bca-b555-72b065be1c13,a0dd2129-d3a1-4bca-b555-72b065be1c13,1,0,dc5e8229-e301-477c-846e-2e7078e3ee5f,dc5e8229-e301-477c-846e-2e7078e3ee5f,1,0,24836e44-8fdd-44bd-91d8-4ddab2caf485,24836e44-8fdd-44bd-91d8-4ddab2caf485,1,0,3727bcfe-4d75-4270-86e7-4a66ab14866c,3727bcfe-4d75-4270-86e7-4a66ab14866c,1,0,870a4708-0b5a-4fa3-9978-d94b161d289a,870a4708-0b5a-4fa3-9978-d94b161d289a,1,0,30e9f89d-7b94-488e-9963-886c271b1af7,30e9f89d-7b94-488e-9963-886c271b1af7,1,0,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,1,0,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1,0,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,1,0,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,1,0,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,1,0,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,1,0,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,1,0,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,1,0,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,1,0,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,1,0,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,1,0,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,1,0,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,1,0,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,1,0,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,1,0,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,1,0,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,1,0,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,1,0,2d279d24-1953-4a2f-8206-77481d2fd718,2d279d24-1953-4a2f-8206-77481d2fd718,1,0,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,1,0,0a920200-77d0-42ea-abf6-0d40d63289b0,0a920200-77d0-42ea-abf6-0d40d63289b0,1,0,c850bafc-4073-44ef-b148-194f87c46f0e,c850bafc-4073-44ef-b148-194f87c46f0e,1,0,6d1dd726-815d-476e-b668-95cff4182e54,6d1dd726-815d-476e-b668-95cff4182e54,1,0,12f4a0ed-4798-4467-8834-de3eb385e22d,12f4a0ed-4798-4467-8834-de3eb385e22d,1,0,5710809e-4c41-42ab-952f-f7778fe9be0f,5710809e-4c41-42ab-952f-f7778fe9be0f,1,0,0811f6c2-6bb3-43b8-9944-910adc4c6f23,0811f6c2-6bb3-43b8-9944-910adc4c6f23,1,0,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,1,0,c86b02ab-3532-4f4c-b993-e237ed0d4d12,c86b02ab-3532-4f4c-b993-e237ed0d4d12,1,0,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,1,0,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,1,0,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,1,0,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,1,0,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,1,0,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,1,0,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,1,0,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,1,0,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,1,0,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,1,0,feb5f490-e791-11e6-508c-a8667f21fde4,feb5f490-e791-11e6-508c-a8667f21fde4,1,0,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,1,0,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,1,0,6962f838-e792-11e6-508c-a8667f21fde4,6962f838-e792-11e6-508c-a8667f21fde4,1,0,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,1,0,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,1,0,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,1,0,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,1,0,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,1,0,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,1,0,4f2b6bf8-e792-11e6-508c-a8667f21fde4,4f2b6bf8-e792-11e6-508c-a8667f21fde4,1,0,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,1,0,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,1,0,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,1,0,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,1,0,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,1,0,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,1,0,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,1,0,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,1,0,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,1,0,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,1,0,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,1,0,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,1,0,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,1,0,8e877990-a64c-4c45-91f1-007d47618cc7,8e877990-a64c-4c45-91f1-007d47618cc7,1,0,73c6640e-2fe6-4132-9237-d6f28cbacc1c,73c6640e-2fe6-4132-9237-d6f28cbacc1c,1,0,69489064-c131-4618-b31f-e6964d593f4a,69489064-c131-4618-b31f-e6964d593f4a,1,0,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,1,0,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,1,0,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,1,0,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,1,0,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,1,0,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,1,0,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,1,0,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,1,0,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,1,0,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,1,0,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,1,0,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,1,0,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,1,0,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,1,0,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,1,0,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,1,0,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,1,0,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,1,0,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,1,0,bd0e4aeb-19f9-48fc-b838-38d785004360,bd0e4aeb-19f9-48fc-b838-38d785004360,1,0,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,1,0,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,1,0,6d351276-2c04-4198-a3e4-865881c12f5c,6d351276-2c04-4198-a3e4-865881c12f5c,1,0,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,1,0,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,1,0,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,1,0,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,1,0,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,1,0,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,1,0,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,1,0,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,1,0,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,1,0,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,1,0,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,1,0,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,1,0,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,1,0,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,1,0,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,1,0,afde7867-15d3-43fa-b439-6d9e40df580b,afde7867-15d3-43fa-b439-6d9e40df580b,1,0,a676ff94-a0d1-4de9-8690-ec67f2c891d8,a676ff94-a0d1-4de9-8690-ec67f2c891d8,1,0,012bf716-3672-462e-b390-7bb4384ab4b1,012bf716-3672-462e-b390-7bb4384ab4b1,1,0,65342599-ff37-4f99-8e40-f05d87403bcf,65342599-ff37-4f99-8e40-f05d87403bcf,1,0,3a3f505a-7a50-4111-8029-5b9057fed232,3a3f505a-7a50-4111-8029-5b9057fed232,1,0,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,1,0,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,1,0,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,1,0,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,1,0,1363523a-929e-49ac-ae39-d43acf9f0478,1363523a-929e-49ac-ae39-d43acf9f0478,1,0,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,1,0,2876c476-8280-426d-8bf9-c93beda0ddd5,2876c476-8280-426d-8bf9-c93beda0ddd5,1,0,963e0813-4f6b-4d31-b66d-77125c47ce19,963e0813-4f6b-4d31-b66d-77125c47ce19,1,0,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,1,0,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,1,0,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,1,0,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,1,0,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,1,0,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,1,0,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,1,0,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,1,0,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,1,0,ebedc283-5eb0-459b-b686-f8643666b8b8,ebedc283-5eb0-459b-b686-f8643666b8b8,1,0,6a6afffd-cfed-4801-8b59-34d27e46565c,6a6afffd-cfed-4801-8b59-34d27e46565c,1,0,a469b12d-4537-419c-91e0-37abc9d31505,a469b12d-4537-419c-91e0-37abc9d31505,1,0,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,1,0,82c42232-531e-403f-8599-cc21a248fa2c,82c42232-531e-403f-8599-cc21a248fa2c,1,0,9104b791-9ac4-41ba-a7f0-9e609db3b578,9104b791-9ac4-41ba-a7f0-9e609db3b578,1,0,2d3721d1-816f-4e84-9df1-863cb269d83d,2d3721d1-816f-4e84-9df1-863cb269d83d,1,0,73554821-8ab5-44ab-a593-37ca10a1b777,73554821-8ab5-44ab-a593-37ca10a1b777,1,0,d5a98e02-e199-445e-8d53-11acd07f473f,d5a98e02-e199-445e-8d53-11acd07f473f,1,0,79db55d6-e916-4bde-b417-7d0a53bb85af,79db55d6-e916-4bde-b417-7d0a53bb85af,1,0,3084fb99-59cb-4338-ae37-0b1e8b333f01,3084fb99-59cb-4338-ae37-0b1e8b333f01,1,0,818a1fbf-17c1-44f9-8e20-27d4ceda549c,818a1fbf-17c1-44f9-8e20-27d4ceda549c,1,0,959a5d25-03e5-4911-bbb7-b93714db7eed,959a5d25-03e5-4911-bbb7-b93714db7eed,1,0,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1,0,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,1,0,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,1,0,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,1,0,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,1,0,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,1,0,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,1,0,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,1,0,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,1,0,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,1,0,f0b0608c-178f-4dea-b461-0d8f00d79d30,f0b0608c-178f-4dea-b461-0d8f00d79d30,1,0,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,1,0,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,1,0,5546b9a9-a4fe-4a2b-9492-883bcb37a210,5546b9a9-a4fe-4a2b-9492-883bcb37a210,1,0,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,1,0,275a5772-8428-497a-81ef-c919f15fcccd,275a5772-8428-497a-81ef-c919f15fcccd,1,0,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,1,0,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,1,0,10336352-f3a1-4bc3-bdec-1a2eef15f176,10336352-f3a1-4bc3-bdec-1a2eef15f176,1,0,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,1,0,3b7c713e-81ae-4adc-9519-99c936599ef7,3b7c713e-81ae-4adc-9519-99c936599ef7,1,0,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1,0,ecda2c4b-6411-4b47-ab59-1918bad5acdd,ecda2c4b-6411-4b47-ab59-1918bad5acdd,1,0,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,1,0,2c811ee8-f50d-4c39-82ee-0492feb1c431,2c811ee8-f50d-4c39-82ee-0492feb1c431,1,0,399f679b-f48a-4d4e-b890-5eab9e4598c3,399f679b-f48a-4d4e-b890-5eab9e4598c3,1,0,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,1,0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,1,0,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,1,0,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,1,0,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,1,0,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,1,0,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,1,0,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,1,0,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,1,0,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,1,0,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,1,0,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,1,0,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,1,0,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,1,0,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,1,0,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,1,0,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,1,0,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,1,0,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,1,0,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,1,0,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,1,0,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,1,0,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,1,0,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,1,0,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,1,0,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,1,0,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,1,0,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,1,0,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,1,0,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,1,0,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,1,0,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,1,0,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,1,0,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,1,0,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,1,0,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,1,0,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,1,0,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,1,0,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,1,0,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,1,0,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,1,0,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,1,0,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,1,0,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,1,0,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,1,0,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,1,0,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,1,0,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,1,0,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,1,0,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,1,0,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,1,0,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,1,0,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,1,0,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,1,0,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,1,0,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,1,0,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,1,0,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,1,0,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,1,0,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,1,0,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,1,0,fd271670-bde6-4351-abec-eb82548c6c98,fd271670-bde6-4351-abec-eb82548c6c98,1,0,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,1,0,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,1,0,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,1,0,799b3dda-fbfc-4dea-a577-30321e64f4d5,799b3dda-fbfc-4dea-a577-30321e64f4d5,1,0,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,1,0,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,1,0,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,1,0,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,1,0,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,1,0,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,1,0,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,1,0,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,1,0,19a18193-c5d3-4e56-86c5-5a81c525e9ad,19a18193-c5d3-4e56-86c5-5a81c525e9ad,1,0,c208fcc0-d7b2-435b-963a-e18c97727f8f,c208fcc0-d7b2-435b-963a-e18c97727f8f,1,0,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,1,0,bf11f7b1-6332-4499-ba48-b94bc10ef869,bf11f7b1-6332-4499-ba48-b94bc10ef869,1,0,479d9428-02fd-47d2-a869-a3695b315724,479d9428-02fd-47d2-a869-a3695b315724,1,0,838b4840-86e3-4bf3-8b95-1e58ef60e97a,838b4840-86e3-4bf3-8b95-1e58ef60e97a,1,0,36d258b5-bfda-4b40-88a8-1e0abf351805,36d258b5-bfda-4b40-88a8-1e0abf351805,1,0,cc95b010-ca42-4b54-9c50-0551b2c690ed,cc95b010-ca42-4b54-9c50-0551b2c690ed,1,0,829fb3c0-6d96-4765-adc6-f177344a4a33,829fb3c0-6d96-4765-adc6-f177344a4a33,1,0,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,1,0,05c27c89-2c26-4252-842d-9aa43ba0ea2f,05c27c89-2c26-4252-842d-9aa43ba0ea2f,1,0,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,1,0,f092729c-6b5d-4709-8b28-15e06129731d,f092729c-6b5d-4709-8b28-15e06129731d,1,0,c03be2f7-d681-417d-975a-5c8c7b716659,c03be2f7-d681-417d-975a-5c8c7b716659,1,0,fca7af5f-bdc0-4264-be68-5e5e38545368,fca7af5f-bdc0-4264-be68-5e5e38545368,1,0,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,1,0,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,1,0,0b7cee9b-3870-49f5-a58e-063cf5353467,0b7cee9b-3870-49f5-a58e-063cf5353467,1,0,d392a791-af74-40c9-ab20-6ed6aeabe864,d392a791-af74-40c9-ab20-6ed6aeabe864,1,0,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,1,0,1612570d-b069-405a-9dd3-80b8175fb468,1612570d-b069-405a-9dd3-80b8175fb468,1,0,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,1,0,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,1,0,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,1,0,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,1,0,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,1,0,561ed574-617d-4a46-b32b-f022e07846c8,561ed574-617d-4a46-b32b-f022e07846c8,1,0,cba706bf-a9a7-4dda-9c5a-a26e85119396,cba706bf-a9a7-4dda-9c5a-a26e85119396,1,0,159a4eb5-00cd-426c-86e3-09cd3f569f22,159a4eb5-00cd-426c-86e3-09cd3f569f22,1,0,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,1,0,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,1,0,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,1,0,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,1,0,2ded5135-b6c3-46dd-b563-7b6fab986d23,2ded5135-b6c3-46dd-b563-7b6fab986d23,1,0,14215720-ccb3-4e5a-8345-cd42c96a3e77,14215720-ccb3-4e5a-8345-cd42c96a3e77,1,0,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,1,0,0690a5c7-bc25-4101-afa5-69c095d415c2,0690a5c7-bc25-4101-afa5-69c095d415c2,1,0,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,1,0,79013bba-a0f2-481c-a63e-095a54ee52aa,79013bba-a0f2-481c-a63e-095a54ee52aa,1,0,8523c346-f144-41b8-a702-2d588e7097c2,8523c346-f144-41b8-a702-2d588e7097c2,1,0,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,1,0,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,1,0,fa2bd6a6-bb46-4e21-8684-248578310164,fa2bd6a6-bb46-4e21-8684-248578310164,1,0,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,1,0,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,1,0,88ccac36-169d-48f8-bc68-15e3bb775b79,88ccac36-169d-48f8-bc68-15e3bb775b79,1,0,a1640988-bd60-43b3-86f1-184b9db275c6,a1640988-bd60-43b3-86f1-184b9db275c6,1,0,300a02f7-8062-4843-b11e-0321f8b40f4d,300a02f7-8062-4843-b11e-0321f8b40f4d,1,0,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,1,0,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,1,0,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,1,0,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,1,0,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,1,0,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,1,0,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,1,0,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,1,0,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,1,0,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,1,0,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,1,0,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,1,0,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,1,0,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,1,0,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,1,0,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,1,0,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,1,0,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,1,0,fc67b510-3fb4-4305-92d2-c252bc718f03,fc67b510-3fb4-4305-92d2-c252bc718f03,1,0,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,1,0,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,1,0,cf1f7915-94ad-47e7-8676-73271d0cf71e,cf1f7915-94ad-47e7-8676-73271d0cf71e,1,0,fceb6e4a-bd51-4193-a542-70d2317af669,fceb6e4a-bd51-4193-a542-70d2317af669,1,0,80847d57-1795-46c7-a106-926e1f43ac1e,80847d57-1795-46c7-a106-926e1f43ac1e,1,0,38685415-dc87-48b4-8cc4-f85b438f2ec2,38685415-dc87-48b4-8cc4-f85b438f2ec2,1,0,110eff8b-aeec-4ba5-b710-fefc1bd60284,110eff8b-aeec-4ba5-b710-fefc1bd60284,1,0,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,1,0,75eca481-002b-4046-898d-dfac9357611f,75eca481-002b-4046-898d-dfac9357611f,1,0,0110decc-d06e-43cf-9d01-30d412edcdd7,0110decc-d06e-43cf-9d01-30d412edcdd7,1,0,3ea32a24-d37b-4fad-937a-9d1357d649a9,3ea32a24-d37b-4fad-937a-9d1357d649a9,1,0,2856ee9a-0fea-4684-b7b8-4844773eae07,2856ee9a-0fea-4684-b7b8-4844773eae07,1,0,84e09840-8d67-416f-87a2-7f03c04180c9,84e09840-8d67-416f-87a2-7f03c04180c9,1,0,0388f22d-f91d-45c9-a8ae-900a24cbfe67,0388f22d-f91d-45c9-a8ae-900a24cbfe67,1,0,60fa2562-4914-46d6-a00a-1bb6e2803263,60fa2562-4914-46d6-a00a-1bb6e2803263,1,0,0d61a8d4-2dc8-435e-a238-416d7640576f,0d61a8d4-2dc8-435e-a238-416d7640576f,1,0,5ea899d4-e076-4a1c-838c-e369abc4705f,5ea899d4-e076-4a1c-838c-e369abc4705f,1,0,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,1,0,ab2e75f0-8da7-4b38-8f30-537424b719db,ab2e75f0-8da7-4b38-8f30-537424b719db,1,0,db344a42-61b8-4544-9aa1-8840ab8a70f0,db344a42-61b8-4544-9aa1-8840ab8a70f0,1,0,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,1,0,043bd776-5a7b-45ff-8b4a-5eed2bba0054,043bd776-5a7b-45ff-8b4a-5eed2bba0054,1,0,6a708860-e3b6-46ea-bea5-0d3e426c72f6,6a708860-e3b6-46ea-bea5-0d3e426c72f6,1,0,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,1,0,78058cd3-eb56-483c-96f5-1bf8883abc76,78058cd3-eb56-483c-96f5-1bf8883abc76,1,0,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,1,0,fae4675c-dcdc-42fc-911d-07c3c577b8b8,fae4675c-dcdc-42fc-911d-07c3c577b8b8,1,0,f1050611-4f82-411b-97f2-bcd8a5c914bf,f1050611-4f82-411b-97f2-bcd8a5c914bf,1,0,efacf22d-b474-4d49-af8b-6d3784aa5cf2,efacf22d-b474-4d49-af8b-6d3784aa5cf2,1,0,f818b937-9ac3-4a0c-ba50-26c060984f09,f818b937-9ac3-4a0c-ba50-26c060984f09,1,0,f385778d-96cb-4e09-884d-533739b393b1,f385778d-96cb-4e09-884d-533739b393b1,1,0,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,1,0,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,1,0,f64089ee-72dd-4fcf-8926-31e95c6fcf77,f64089ee-72dd-4fcf-8926-31e95c6fcf77,1,0,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,1,0,e1e151cc-7b8a-4125-804f-c902a522ed81,e1e151cc-7b8a-4125-804f-c902a522ed81,1,0,f475494e-fe94-4902-b2da-3ade01eba5bb,f475494e-fe94-4902-b2da-3ade01eba5bb,1,0,fbb814b2-cb2f-474d-9c96-5571cef3030e,fbb814b2-cb2f-474d-9c96-5571cef3030e,1,0,7bf36370-3761-4fd5-bea5-90fa142a9d57,7bf36370-3761-4fd5-bea5-90fa142a9d57,1,0,3b81427f-cf64-4a5e-adb3-5415d515fecd,3b81427f-cf64-4a5e-adb3-5415d515fecd,1,0,e9f2b604-7181-476d-8b34-3a544cbb353d,e9f2b604-7181-476d-8b34-3a544cbb353d,1,0,73773919-d01c-41dd-bb31-9c66648ac0ff,73773919-d01c-41dd-bb31-9c66648ac0ff,1,0,5d1afad0-3d7e-4214-b52a-72c184490084,5d1afad0-3d7e-4214-b52a-72c184490084,1,0,5f7901a1-f992-42fa-9ddb-d63574da3b56,5f7901a1-f992-42fa-9ddb-d63574da3b56,1,0,26abd45a-12b3-4312-88fb-53c90a6e6679,26abd45a-12b3-4312-88fb-53c90a6e6679,1,0,1541ad74-3e73-4699-bccf-c13313fbedfe,1541ad74-3e73-4699-bccf-c13313fbedfe,1,0,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1,0,0b2356a4-5571-4ba0-9095-265106f2b3b3,0b2356a4-5571-4ba0-9095-265106f2b3b3,1,0,a2581834-dde8-439a-8204-6712c829738e,a2581834-dde8-439a-8204-6712c829738e,1,0,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,1,0,c746a268-815b-4917-8b06-af745ba9db04,c746a268-815b-4917-8b06-af745ba9db04,1,0,5cc01f13-0faa-4c3c-8e5e-156656f71efd,5cc01f13-0faa-4c3c-8e5e-156656f71efd,1,0,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,1,0,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,1,0,be2b4dba-e77e-4947-bd2f-0710b357ca2a,be2b4dba-e77e-4947-bd2f-0710b357ca2a,1,0,86182e9a-89e0-40d7-b2d7-fcd92ee42942,86182e9a-89e0-40d7-b2d7-fcd92ee42942,1,0,df750e63-50fc-4085-b8b8-f05e4751ff51,df750e63-50fc-4085-b8b8-f05e4751ff51,1,0,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,1,0,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,1,0,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,1,0,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,1,0,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,1,0,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,1,0,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,1,0,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,1,0,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,1,0,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,1,0,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,1,0,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,1,0,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,1,0,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,1,0,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,1,0,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,1,0,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,1,0,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,1,0,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,1,0,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,1,0,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,1,0,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,1,0,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,1,0,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,1,0,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,1,0,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,1,0,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,1,0,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,1,0,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,1,0,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,1,0,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,1,0,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,1,0,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,1,0,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,1,0,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,1,0,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,1,0,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,1,0,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,1,0,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,1,0,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,1,0,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,1,0,e1e9862e-c87b-400f-bca1-b1380cb98ddc,e1e9862e-c87b-400f-bca1-b1380cb98ddc,1,0,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,1,0,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,1,0,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,1,0,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,1,0,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,1,0,0db78226-37d0-4016-b4c9-5134af1aabc7,0db78226-37d0-4016-b4c9-5134af1aabc7,1,0,8d6b4d23-a260-4352-9975-c13ce3e05220,8d6b4d23-a260-4352-9975-c13ce3e05220,1,0,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,1,0,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,1,0,6f5ac40b-ea22-47cf-acf2-614406669a72,6f5ac40b-ea22-47cf-acf2-614406669a72,1,0,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,1,0,488d2644-6fef-488a-af38-40f59c0e0d8c,488d2644-6fef-488a-af38-40f59c0e0d8c,1,0,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,1,0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,1,0,f1efef30-8651-4728-becd-abe3f9026a43,f1efef30-8651-4728-becd-abe3f9026a43,1,0,c2612e22-4f0d-4713-b4eb-decd9780d088,c2612e22-4f0d-4713-b4eb-decd9780d088,1,0,11b1410f-8e14-4b2f-8890-177f4875020e,11b1410f-8e14-4b2f-8890-177f4875020e,1,0,2276b2b0-1705-4014-956f-5087e9dd5c1e,2276b2b0-1705-4014-956f-5087e9dd5c1e,1,0,4aef5419-7cf5-4443-b773-9273c983844f,4aef5419-7cf5-4443-b773-9273c983844f,1,0,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,1,0,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,1,0,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,1,0,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,1,0,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,1,0,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,1,0,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,1,0,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,1,0,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,1,0,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,1,0,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,1,0,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,1,0,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,1,0,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,1,0,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,1,0,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,1,0,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,1,0,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,1,0,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,1,0,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,1,0,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,1,0,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,1,0,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,1,0,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,1,0,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,1,0,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,1,0,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,1,0,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,1,0,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,1,0,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,1,0,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,1,0,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,1,0,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,1,0,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,1,0,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,1,0,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,1,0,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,1,0,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,1,0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,1,0,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,1,0,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,1,0,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,1,0,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,1,0,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,1,0,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,1,0,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,1,0,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,1,0,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,1,0,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,1,0,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,1,0,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,1,0,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,1,0,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1,0,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,1,0,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,1,0,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,1,0,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,1,0,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,1,0,5c68c57a-31d6-4ae9-855f-3fbc57922e39,5c68c57a-31d6-4ae9-855f-3fbc57922e39,1,0,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,1,0,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,1,0,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,1,0,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,1,0,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,1,0,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,1,0,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,1,0,2c2526c1-bdf8-4115-bdff-3e79d28321cb,2c2526c1-bdf8-4115-bdff-3e79d28321cb,1,0,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,1,0,95ab774f-27fa-4bd4-a422-0f997f632679,95ab774f-27fa-4bd4-a422-0f997f632679,1,0,ee3ad891-b7d6-439d-892b-de2f3399d147,ee3ad891-b7d6-439d-892b-de2f3399d147,1,0,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,1,0,a2ae0338-ed11-422a-8442-f6c4002ddf0d,a2ae0338-ed11-422a-8442-f6c4002ddf0d,1,0,eb59c9c3-6043-401c-87cc-ba7620139d6a,eb59c9c3-6043-401c-87cc-ba7620139d6a,1,0,2b5ce871-8630-4f2f-9ccb-d9f863886420,2b5ce871-8630-4f2f-9ccb-d9f863886420,1,0,86ae353e-7eed-434c-b4ab-cede36e462bc,86ae353e-7eed-434c-b4ab-cede36e462bc,1,0,18e65717-738b-4d39-9c85-676bca15e6b7,18e65717-738b-4d39-9c85-676bca15e6b7,1,0,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,1,0,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,1,0,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,1,0,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,1,0,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,1,0,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,1,0,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,1,0,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,1,0,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,1,0,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,1,0,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,1,0,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,1,0,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,1,0,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,1,0,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,1,0,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,1,0,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,1,0,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,1,0,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,1,0,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,1,0,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,1,0,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,1,0,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,1,0,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,1,0,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,1,0,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,1,0,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,1,0,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,1,0,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,1,0,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,1,0,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,1,0,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,1,0,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,1,0,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,1,0,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,1,0,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,1,0,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,1,0,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,1,0,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,1,0,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,1,0,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,1,0,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,1,0,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,1,0,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,1,0,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,1,0,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,1,0,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,1,0,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,1,0,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,1,0,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,1,0,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,1,0,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,1,0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,1,0,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,1,0,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,1,0,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,1,0,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,1,0,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,1,0,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,1,0,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,1,0,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,1,0,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,1,0,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,1,0,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,1,0,577f2671-7d38-4806-b7ff-840d649e6d69,577f2671-7d38-4806-b7ff-840d649e6d69,1,0,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,1,0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,1,0,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,1,0,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,1,0,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,1,0,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,1,0,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,1,0,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,1,0,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,1,0,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,1,0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1,0,b50f3157-3c3a-4553-a16a-7fcd660e2824,b50f3157-3c3a-4553-a16a-7fcd660e2824,1,0,19858faf-2bc5-4cfb-b258-cb101ab66e87,19858faf-2bc5-4cfb-b258-cb101ab66e87,1,0,f779f4a1-1fab-46d4-8043-ac25c247d361,f779f4a1-1fab-46d4-8043-ac25c247d361,1,0,308358bc-773a-43fa-adff-dcc5884a2bd4,308358bc-773a-43fa-adff-dcc5884a2bd4,1,0,ed541a1c-a842-40a9-b357-612db71ec32c,ed541a1c-a842-40a9-b357-612db71ec32c,1,0,b0e37495-7d9e-41d0-8225-652f9ac328cf,b0e37495-7d9e-41d0-8225-652f9ac328cf,1,0,3bd2e1c8-9ef3-449b-acf6-397b90669c49,3bd2e1c8-9ef3-449b-acf6-397b90669c49,1,0,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,1,0,f9865a2a-50e3-4f9c-a509-319be62dc468,f9865a2a-50e3-4f9c-a509-319be62dc468,1,0,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,1,0,766d8852-3bb4-4a6c-81c0-911722af4e8e,766d8852-3bb4-4a6c-81c0-911722af4e8e,1,0,f6dae699-06eb-41ef-878b-3fdfe1b1f213,f6dae699-06eb-41ef-878b-3fdfe1b1f213,1,0,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,1,0,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,1,0,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,1,0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,1,0,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,1,0,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,1,0,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,1,0,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,1,0,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,1,0,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,1,0,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,1,0,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,1,0,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,1,0,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,1,0,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,1,0,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,1,0,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1,0,8064eb3a-d56c-4517-9db0-b7300149c7c4,8064eb3a-d56c-4517-9db0-b7300149c7c4,1,0,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,1,0,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,1,0,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,1,0,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,1,0,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,1,0,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,1,0,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,1,0,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,1,0,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,1,0,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,1,0,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,1,0,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,1,0,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,1,0,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,1,0,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,1,0,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1,0,d6b72e00-018a-4fdc-b6a4-06dcecf89809,d6b72e00-018a-4fdc-b6a4-06dcecf89809,1,0,9f816562-57f0-473f-8c85-14f7521ffd7f,9f816562-57f0-473f-8c85-14f7521ffd7f,1,0,917b0acc-88fe-4afc-b19b-6da69e060393,917b0acc-88fe-4afc-b19b-6da69e060393,1,0,a091b76e-8ba4-4534-bbb0-9990e69b8603,a091b76e-8ba4-4534-bbb0-9990e69b8603,1,0,867ee5d2-7566-4052-a311-b56e7e46b90d,867ee5d2-7566-4052-a311-b56e7e46b90d,1,0,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,1,0,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,1,0,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,1,0,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,1,0,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,1,0,64e702e9-8934-4356-a1b2-be0e8b390630,64e702e9-8934-4356-a1b2-be0e8b390630,1,0,74880ac4-bdd3-48e6-82a0-a2103da42723,74880ac4-bdd3-48e6-82a0-a2103da42723,1,0,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,1,0,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,1,0,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,1,0,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,1,0,ddc6761c-a32a-41e1-b110-fdc39ad440d3,ddc6761c-a32a-41e1-b110-fdc39ad440d3,1,0,0b322ee2-b018-4d00-8f05-62ee16e519ff,0b322ee2-b018-4d00-8f05-62ee16e519ff,1,0,0866e282-055a-49bb-9aa5-b1af7c74c344,0866e282-055a-49bb-9aa5-b1af7c74c344,1,0,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,1,0,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,1,0,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,1,0,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,1,0,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,1,0,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,1,0,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,1,0,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,1,0,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,1,0,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,1,0,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,1,0,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,1,0,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,1,0,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,1,0,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,1,0,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,1,0,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,1,0,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,1,0,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,1,0,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,1,0,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,1,0,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,1,0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,1,0,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,1,0,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,1,0,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,1,0,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,1,0,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,1,0,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,1,0,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,1,0,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,1,0,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,1,0,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,1,0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,1,0,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,1,0,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,1,0,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,1,0,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,1,0,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,1,0,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,1,0,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,1,0,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,1,0,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,1,0,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,1,0,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,1,0,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,1,0,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,1,0,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,1,0,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,1,0,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,1,0,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,1,0,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,1,0,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,1,0,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,1,0,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,1,0,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,1,0,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,1,0,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,1,0,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,1,0,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,1,0,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,1,0,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,1,0,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,1,0,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file +{6,1,1,bd80cd52-c0df-4450-8a62-f8c55b541974,1,5d857566-7028-436f-bb82-d0afec9976b1,"2.4.3.162","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5526,1,0,5523aa8e-3647-4527-9291-4d733787446e,5523aa8e-3647-4527-9291-4d733787446e,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,1,0,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,1,0,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,1,0,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,1,0,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,1,0,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,1,0,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,1,0,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,1,0,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,1,0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,1,0,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,1,0,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,1,0,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,1,0,ad73f3a3-1dad-4920-af41-bda2b947a2f7,ad73f3a3-1dad-4920-af41-bda2b947a2f7,1,0,98b67b5a-3550-4a64-9e07-07fcc9154c73,98b67b5a-3550-4a64-9e07-07fcc9154c73,1,0,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,1,0,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,1,0,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,1,0,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,1,0,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,1,0,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,1,0,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,1,0,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,1,0,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,1,0,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,1,0,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,1,0,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,1,0,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,1,0,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,1,0,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,1,0,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,1,0,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,1,0,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,1,0,d5a5f53b-9cd5-4036-a379-31680cec3c24,d5a5f53b-9cd5-4036-a379-31680cec3c24,1,0,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,1,0,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,1,0,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,1,0,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,1,0,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,1,0,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,1,0,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,1,0,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,1,0,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,1,0,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,1,0,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,1,0,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,1,0,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,1,0,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,1,0,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,1,0,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,1,0,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,1,0,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,1,0,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,1,0,43d8dd53-df3e-407e-a3c1-5b893cc1976c,43d8dd53-df3e-407e-a3c1-5b893cc1976c,1,0,5a88f624-7b7e-43fe-8bc4-ae85d832a855,5a88f624-7b7e-43fe-8bc4-ae85d832a855,1,0,42e39ef7-268f-4053-b4e5-4bceab17d3e4,42e39ef7-268f-4053-b4e5-4bceab17d3e4,1,0,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,1,0,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,1,0,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,1,0,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,1,0,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,1,0,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,1,0,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,1,0,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,1,0,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,1,0,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,1,0,9200527c-b6b9-4962-9440-10449583e1e3,9200527c-b6b9-4962-9440-10449583e1e3,1,0,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,1,0,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,1,0,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,1,0,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,1,0,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,1,0,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,1,0,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,1,0,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,1,0,8b4614aa-c769-49f4-a281-a0ffb101abf1,8b4614aa-c769-49f4-a281-a0ffb101abf1,1,0,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,1,0,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,1,0,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,1,0,4c3a39e3-40ee-423b-91f0-14b60e045b40,4c3a39e3-40ee-423b-91f0-14b60e045b40,1,0,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,1,0,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,1,0,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,1,0,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,1,0,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,1,0,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,1,0,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,1,0,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,1,0,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,1,0,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,1,0,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,1,0,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,1,0,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,1,0,7185a8f8-48c4-43a9-b31f-102302b8f152,7185a8f8-48c4-43a9-b31f-102302b8f152,1,0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,1,0,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,1,0,c573a29f-4c39-402d-8af4-e0fff80877f8,c573a29f-4c39-402d-8af4-e0fff80877f8,1,0,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,1,0,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,1,0,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,1,0,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,1,0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,1,0,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,1,0,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,1,0,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,1,0,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,1,0,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,1,0,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,1,0,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,1,0,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,1,0,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,1,0,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,1,0,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,1,0,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,1,0,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,1,0,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,1,0,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,1,0,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,1,0,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,1,0,7f7598e5-ca54-487e-b95c-b18d330b034c,7f7598e5-ca54-487e-b95c-b18d330b034c,1,0,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,1,0,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,1,0,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,1,0,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,1,0,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,1,0,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,1,0,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,1,0,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,1,0,64e03321-33a4-424d-a101-90f1e0da4c2e,64e03321-33a4-424d-a101-90f1e0da4c2e,1,0,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,1,0,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,1,0,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,1,0,a1d80053-ef03-4c00-9fc9-266e61aeaffb,a1d80053-ef03-4c00-9fc9-266e61aeaffb,1,0,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,1,0,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,1,0,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,1,0,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,1,0,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,1,0,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,1,0,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,1,0,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,1,0,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,1,0,691f9902-6b95-4579-a3d9-3b2b5b548776,691f9902-6b95-4579-a3d9-3b2b5b548776,1,0,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,1,0,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,1,0,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,1,0,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,1,0,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,1,0,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,1,0,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,1,0,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,1,0,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,1,0,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,1,0,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,1,0,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,1,0,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,1,0,a3131bf3-88b1-431c-a01c-be6e26396f91,a3131bf3-88b1-431c-a01c-be6e26396f91,1,0,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,1,0,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,1,0,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1,0,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,1,0,2a12ce95-3214-4bd2-a0e6-c2af41875821,2a12ce95-3214-4bd2-a0e6-c2af41875821,1,0,bf05548c-babf-402b-b698-9a62e7c69add,bf05548c-babf-402b-b698-9a62e7c69add,1,0,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,1,0,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,1,0,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,1,0,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,1,0,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,1,0,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,1,0,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,1,0,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,1,0,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,1,0,ed4edc6f-048a-40d5-8f61-989895c95cf3,ed4edc6f-048a-40d5-8f61-989895c95cf3,1,0,c2049ace-3095-4dd7-9cc0-7721118451ad,c2049ace-3095-4dd7-9cc0-7721118451ad,1,0,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,1,0,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,1,0,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,1,0,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,1,0,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,1,0,022f99dd-e1b7-42a7-8141-a8c2e8628901,022f99dd-e1b7-42a7-8141-a8c2e8628901,1,0,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,1,0,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,1,0,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,1,0,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,1,0,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,1,0,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,1,0,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,1,0,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,1,0,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,1,0,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,1,0,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,1,0,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,1,0,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,1,0,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,1,0,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,1,0,2997e4da-d831-48e4-96e2-c29f9d077302,2997e4da-d831-48e4-96e2-c29f9d077302,1,0,30f59002-a23d-4eff-b84f-f280f11b220e,30f59002-a23d-4eff-b84f-f280f11b220e,1,0,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,1,0,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,1,0,14583452-805e-423d-be9a-e04683c7c46f,14583452-805e-423d-be9a-e04683c7c46f,1,0,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,1,0,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,1,0,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,1,0,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,1,0,b1e837ff-0edd-4525-b2e2-92cc7990e00e,b1e837ff-0edd-4525-b2e2-92cc7990e00e,1,0,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,1,0,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,1,0,cafbea88-86f0-4a44-98f4-70d1837da452,cafbea88-86f0-4a44-98f4-70d1837da452,1,0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,1,0,ceb286e9-4e7c-49fa-a695-424073e0dffc,ceb286e9-4e7c-49fa-a695-424073e0dffc,1,0,727689c3-c0d8-496f-a47b-4f3243ad8974,727689c3-c0d8-496f-a47b-4f3243ad8974,1,0,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,1,0,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,1,0,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,1,0,4bad7c64-131a-42cb-9be7-d61f14f456d0,4bad7c64-131a-42cb-9be7-d61f14f456d0,1,0,d46e141b-7a10-4d65-971f-3a35f2114017,d46e141b-7a10-4d65-971f-3a35f2114017,1,0,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,1,0,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,1,0,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,1,0,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,1,0,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1,0,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,1,0,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,1,0,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,1,0,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,1,0,772e7011-0019-4edc-b673-b7151cf4fa6c,772e7011-0019-4edc-b673-b7151cf4fa6c,1,0,21ac47fa-12c2-43e2-9b57-afdf521d3485,21ac47fa-12c2-43e2-9b57-afdf521d3485,1,0,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,1,0,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,1,0,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,1,0,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,1,0,8d1c44d7-52f2-4089-9d77-2f03bf051455,8d1c44d7-52f2-4089-9d77-2f03bf051455,1,0,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,1,0,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,1,0,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,1,0,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,1,0,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,1,0,529cc5b5-835f-4e70-9232-a9649fdc7ae5,529cc5b5-835f-4e70-9232-a9649fdc7ae5,1,0,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,1,0,4875a235-bcc8-47eb-83e3-a66f0f690b97,4875a235-bcc8-47eb-83e3-a66f0f690b97,1,0,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,1,0,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,1,0,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,1,0,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,1,0,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,1,0,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,1,0,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,1,0,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,1,0,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,1,0,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,1,0,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,1,0,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,1,0,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,1,0,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,1,0,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,1,0,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,1,0,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,1,0,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,1,0,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,1,0,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,1,0,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,1,0,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,1,0,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,1,0,3fe0ef25-ce56-435d-b343-eadfec91a636,3fe0ef25-ce56-435d-b343-eadfec91a636,1,0,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,1,0,62ef3558-5ad3-44ab-8578-1acbbfa54135,62ef3558-5ad3-44ab-8578-1acbbfa54135,1,0,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,1,0,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,1,0,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,1,0,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,1,0,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,1,0,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,1,0,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,1,0,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,1,0,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,1,0,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,1,0,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,1,0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1,0,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,1,0,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,1,0,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,1,0,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,1,0,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,1,0,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,1,0,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,1,0,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,1,0,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,1,0,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,1,0,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,1,0,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,1,0,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,1,0,6f21c34c-26aa-493d-aa08-2d4366b4064a,6f21c34c-26aa-493d-aa08-2d4366b4064a,1,0,0f55650a-2422-42a9-8258-61df4c17f1ef,0f55650a-2422-42a9-8258-61df4c17f1ef,1,0,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,1,0,3eaece9d-c9be-4b0b-a6f6-a3932274b806,3eaece9d-c9be-4b0b-a6f6-a3932274b806,1,0,5d9427ec-981d-4fb5-878b-8dba0d3a5536,5d9427ec-981d-4fb5-878b-8dba0d3a5536,1,0,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,1,0,a0047712-5769-495d-97af-20d06751a5b4,a0047712-5769-495d-97af-20d06751a5b4,1,0,e729c3c6-16e5-405b-99b1-a88022300c6d,e729c3c6-16e5-405b-99b1-a88022300c6d,1,0,9c089520-8233-42f6-8eee-9839ac708c6f,9c089520-8233-42f6-8eee-9839ac708c6f,1,0,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,1,0,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,1,0,89055896-49dd-4cfd-ab78-8ac3698e12d5,89055896-49dd-4cfd-ab78-8ac3698e12d5,1,0,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,1,0,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,1,0,672c4741-6d7b-4d3e-baa7-389bef0625d7,672c4741-6d7b-4d3e-baa7-389bef0625d7,1,0,04398ec0-1c13-43f8-8f5d-7b7619592a4d,04398ec0-1c13-43f8-8f5d-7b7619592a4d,1,0,ce463861-92df-47f2-bd0f-4a2dbf72aacc,ce463861-92df-47f2-bd0f-4a2dbf72aacc,1,0,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,1,0,1487d68c-7a2f-48cf-8c80-4074072ed52c,1487d68c-7a2f-48cf-8c80-4074072ed52c,1,0,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,1,0,d97c6536-fd62-4c9a-b83e-490a29a0721b,d97c6536-fd62-4c9a-b83e-490a29a0721b,1,0,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,1,0,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,1,0,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,1,0,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,1,0,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,1,0,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,1,0,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,1,0,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,1,0,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,1,0,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,1,0,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,1,0,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,1,0,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,1,0,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,1,0,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,1,0,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,1,0,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,1,0,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,1,0,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,1,0,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,1,0,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,1,0,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,1,0,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,1,0,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,1,0,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,1,0,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,1,0,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,1,0,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,1,0,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,1,0,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,1,0,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,1,0,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1,0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,1,0,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,1,0,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,1,0,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,1,0,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,1,0,aa8c4a71-3276-4b83-8be2-3528129e58b3,aa8c4a71-3276-4b83-8be2-3528129e58b3,1,0,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,1,0,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,1,0,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,1,0,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,1,0,0072986b-0463-4a39-9851-f9adeda99716,0072986b-0463-4a39-9851-f9adeda99716,1,0,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,1,0,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,1,0,0d4a26fb-7176-43f2-8767-d3e227c7306a,0d4a26fb-7176-43f2-8767-d3e227c7306a,1,0,933cbafc-5667-4a91-8b1d-dca3d7662522,933cbafc-5667-4a91-8b1d-dca3d7662522,1,0,ea0a498a-a1cb-4f28-88cb-0bc62971172b,ea0a498a-a1cb-4f28-88cb-0bc62971172b,1,0,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,1,0,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,1,0,b6e98aee-4936-491d-8c67-8490e1af2e34,b6e98aee-4936-491d-8c67-8490e1af2e34,1,0,b292eb46-df87-43c0-9a37-93c5a22af252,b292eb46-df87-43c0-9a37-93c5a22af252,1,0,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,1,0,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,1,0,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,1,0,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,1,0,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,1,0,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,1,0,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,1,0,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,1,0,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,1,0,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,1,0,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,1,0,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,1,0,e3b84128-95e1-45df-84db-5e1791779543,e3b84128-95e1-45df-84db-5e1791779543,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,e9d95895-8708-4035-89ad-72573b870491,e9d95895-8708-4035-89ad-72573b870491,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f0152598-ffa3-4eb7-811f-906e569373e6,f0152598-ffa3-4eb7-811f-906e569373e6,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,89318397-b3a6-4468-985b-ed5cb8ab5cdb,89318397-b3a6-4468-985b-ed5cb8ab5cdb,1,0,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,4436b2cf-2d71-401f-99fd-012ff0c91fbd,4436b2cf-2d71-401f-99fd-012ff0c91fbd,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,5396be45-d7c0-43df-aed4-cad062a02b11,5396be45-d7c0-43df-aed4-cad062a02b11,1,0,017e3da8-e48e-488b-9bbf-4fef1a4f3417,017e3da8-e48e-488b-9bbf-4fef1a4f3417,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,1e015740-5b45-4729-9732-57359a7c602f,1e015740-5b45-4729-9732-57359a7c602f,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,cd74d617-8ebe-4a7d-b011-38c98d856d8c,cd74d617-8ebe-4a7d-b011-38c98d856d8c,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,8de2c020-0ebe-4374-93d7-d2e19ed82470,8de2c020-0ebe-4374-93d7-d2e19ed82470,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,789a2027-8601-434c-bf47-37696a3966ad,789a2027-8601-434c-bf47-37696a3966ad,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,4c3085e1-2f86-4af4-a392-ab45e30a7152,4c3085e1-2f86-4af4-a392-ab45e30a7152,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,36e096be-ee28-437a-b8f2-c1e274c150e3,36e096be-ee28-437a-b8f2-c1e274c150e3,1,0,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,1,0,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,1,0,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1,0,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,1,0,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,1,0,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,1,0,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,1,0,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,1,0,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,1,0,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,1,0,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,1,0,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1,0,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,1,0,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,1,0,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,1,0,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,1,0,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,1,0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,1,0,23314bcd-2dd4-43f1-9fdb-ae182a48c886,23314bcd-2dd4-43f1-9fdb-ae182a48c886,1,0,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,1,0,9440a132-366f-4fc9-bd72-2544ba2b072a,9440a132-366f-4fc9-bd72-2544ba2b072a,1,0,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,1,0,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,1,0,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,1,0,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,1,0,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,1,0,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,1,0,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,1,0,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,1,0,cadb54f0-dcff-4f96-983e-a309fd72f330,cadb54f0-dcff-4f96-983e-a309fd72f330,1,0,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,1,0,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,1,0,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,1,0,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,1,0,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,1,0,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,1,0,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,1,0,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,1,0,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,1,0,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,1,0,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,1,0,9ff1c73e-71be-4ea6-97fb-e710d995ee62,9ff1c73e-71be-4ea6-97fb-e710d995ee62,1,0,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,1,0,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,1,0,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,1,0,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,1,0,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,1,0,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,1,0,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,1,0,9d669d30-a0af-4095-852a-96b4224ee933,9d669d30-a0af-4095-852a-96b4224ee933,1,0,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,1,0,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,1,0,126d5d78-a2b0-4c16-b429-bf8d251280e7,126d5d78-a2b0-4c16-b429-bf8d251280e7,1,0,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,1,0,12443114-1931-4eb7-968a-7dbe166b7298,12443114-1931-4eb7-968a-7dbe166b7298,1,0,0080c29d-ec54-43a8-aab8-c67e0279b6b7,0080c29d-ec54-43a8-aab8-c67e0279b6b7,1,0,a0271f6e-dc70-4dfe-a395-203e8a89f933,a0271f6e-dc70-4dfe-a395-203e8a89f933,1,0,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,1,0,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,1,0,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,1,0,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,1,0,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,1,0,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,1,0,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,1,0,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,1,0,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,1,0,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,1,0,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,1,0,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,1,0,70f156d8-9cb4-442d-a36b-7a43d03bcd12,70f156d8-9cb4-442d-a36b-7a43d03bcd12,1,0,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,1,0,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,1,0,f0a6de82-45ab-4153-bccf-df82fc960aa1,f0a6de82-45ab-4153-bccf-df82fc960aa1,1,0,77adf47b-6015-46fc-9e29-f1c025ea0d81,77adf47b-6015-46fc-9e29-f1c025ea0d81,1,0,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,1,0,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,1,0,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,1,0,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,1,0,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,1,0,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,1,0,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,1,0,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,1,0,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,1,0,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,1,0,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,1,0,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,1,0,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,1,0,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,1,0,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,1,0,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,1,0,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,1,0,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,1,0,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,1,0,f41e5a5b-394b-423a-bee5-ed4d1da0be71,f41e5a5b-394b-423a-bee5-ed4d1da0be71,1,0,23db175f-ddfb-4af7-9c0c-232b6adb7daf,23db175f-ddfb-4af7-9c0c-232b6adb7daf,1,0,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,1,0,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,1,0,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,1,0,84f05fe4-51d3-49a8-83e7-1cae2028147e,84f05fe4-51d3-49a8-83e7-1cae2028147e,1,0,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,1,0,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,1,0,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,1,0,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,1,0,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,1,0,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,1,0,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,1,0,c6267c5a-3878-4d0c-8674-4d4dd672b99c,c6267c5a-3878-4d0c-8674-4d4dd672b99c,1,0,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,1,0,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,1,0,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,1,0,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,1,0,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,1,0,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,1,0,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,1,0,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,1,0,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,1,0,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,1,0,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,1,0,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1,0,87e6e315-01e0-41eb-8373-0a60635f2f7a,87e6e315-01e0-41eb-8373-0a60635f2f7a,1,0,e9311a22-56b5-4607-8eaa-52382ed040c3,e9311a22-56b5-4607-8eaa-52382ed040c3,1,0,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,1,0,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,1,0,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,1,0,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,1,0,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,1,0,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,1,0,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,1,0,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,1,0,0b303d25-e141-431f-828c-1778d3c247f6,0b303d25-e141-431f-828c-1778d3c247f6,1,0,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,1,0,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,1,0,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,1,0,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,1,0,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,1,0,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,1,0,edf81bbb-905a-474d-959a-db5629a8e104,edf81bbb-905a-474d-959a-db5629a8e104,1,0,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,1,0,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,1,0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,1,0,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1,0,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,1,0,a84891cc-e996-489a-abde-5b5af166a057,a84891cc-e996-489a-abde-5b5af166a057,1,0,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,1,0,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,1,0,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,1,0,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,1,0,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,1,0,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,1,0,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,1,0,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,1,0,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,1,0,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,1,0,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,1,0,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,1,0,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,1,0,f20a04a7-84fa-48e3-8ac5-28176c1fcada,f20a04a7-84fa-48e3-8ac5-28176c1fcada,1,0,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,1,0,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,1,0,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,1,0,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,1,0,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,1,0,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,1,0,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,1,0,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,1,0,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,1,0,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,1,0,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,1,0,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,1,0,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,1,0,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,1,0,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,1,0,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,1,0,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,1,0,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,1,0,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,1,0,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,1,0,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,1,0,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,1,0,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,1,0,646def82-bc88-4187-8be0-93938656a20f,646def82-bc88-4187-8be0-93938656a20f,1,0,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,1,0,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,1,0,06323ebd-5f74-494a-99a5-eb77e23d8637,06323ebd-5f74-494a-99a5-eb77e23d8637,1,0,9c4e28e8-7257-42ed-9fd8-793a0b8eb945,9c4e28e8-7257-42ed-9fd8-793a0b8eb945,1,0,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,1,0,7f6222c1-1a50-4565-b66b-bcb430674efc,7f6222c1-1a50-4565-b66b-bcb430674efc,1,0,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,1,0,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,1,0,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,1,0,4929cf90-54c6-412c-b2fa-dc8230fb8f85,4929cf90-54c6-412c-b2fa-dc8230fb8f85,1,0,52ae6431-afb3-4dea-b106-00e11b174ec7,52ae6431-afb3-4dea-b106-00e11b174ec7,1,0,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,1,0,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,1,0,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,1,0,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,1,0,8b83324c-e10e-49d1-99d7-5bc468c25975,8b83324c-e10e-49d1-99d7-5bc468c25975,1,0,ddb75923-27bf-4996-b024-4bc6eb0f59a7,ddb75923-27bf-4996-b024-4bc6eb0f59a7,1,0,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,1,0,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,1,0,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,1,0,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,1,0,3be0acc7-223a-46ec-9ea2-ec99b869fa78,3be0acc7-223a-46ec-9ea2-ec99b869fa78,1,0,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,1,0,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,1,0,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,1,0,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,1,0,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,1,0,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,1,0,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,1,0,486083d8-33b1-453f-9f05-5ff867e2f4ba,486083d8-33b1-453f-9f05-5ff867e2f4ba,1,0,e4f9d9f6-38d7-4056-a95a-987ad2da2211,e4f9d9f6-38d7-4056-a95a-987ad2da2211,1,0,22c21c2b-4297-43b2-88f0-9555d22f7a14,22c21c2b-4297-43b2-88f0-9555d22f7a14,1,0,734f61c4-5429-4a09-8697-8949ac5e6bd1,734f61c4-5429-4a09-8697-8949ac5e6bd1,1,0,d04e0e2d-0a5f-4866-b0b3-b582915db899,d04e0e2d-0a5f-4866-b0b3-b582915db899,1,0,19649d3f-52aa-4054-bb84-a6a11d212495,19649d3f-52aa-4054-bb84-a6a11d212495,1,0,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,1,0,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,1,0,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,1,0,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,1,0,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,1,0,b7736108-89bd-44eb-89c1-8a5a774058f1,b7736108-89bd-44eb-89c1-8a5a774058f1,1,0,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,1,0,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,1,0,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,1,0,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,1,0,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,1,0,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,1,0,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,1,0,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,1,0,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,1126157b-64c0-4d64-8551-f31c5ed0fd29,1126157b-64c0-4d64-8551-f31c5ed0fd29,1,0,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,1,0,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,1,0,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,1,0,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,1,0,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,1,0,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,1,0,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,1,0,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,1,0,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,1,0,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,1,0,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,1,0,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,1,0,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,1,0,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,1,0,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,1,0,a5633248-8611-4e9b-b223-2f59e7b84a65,a5633248-8611-4e9b-b223-2f59e7b84a65,1,0,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,1,0,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,1,0,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,1,0,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,1,0,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,1,0,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,1,0,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,1,0,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,1,0,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,1,0,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,1,0,e1823be2-b646-4a1a-a9a9-c925a12c0586,e1823be2-b646-4a1a-a9a9-c925a12c0586,1,0,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,1,0,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,1,0,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,1,0,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,1,0,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,1,0,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,1,0,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,1,0,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,1,0,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,1,0,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,1,0,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,1,0,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1,0,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,1,0,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,1,0,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,1,0,3f7ee937-d853-47b7-a1f5-d821208e3531,3f7ee937-d853-47b7-a1f5-d821208e3531,1,0,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,1,0,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,1,0,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,1,0,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,1,0,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,1,0,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,1,0,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,1,0,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,1,0,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,1,0,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,1,0,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,1,0,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,1,0,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,1,0,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,1,0,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,1,0,90032ffa-f117-4a34-82f8-cc7e5a22a542,90032ffa-f117-4a34-82f8-cc7e5a22a542,1,0,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,1,0,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,1,0,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,1,0,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,1,0,49e787c9-753a-468a-b8dd-2e970d9a1fed,49e787c9-753a-468a-b8dd-2e970d9a1fed,1,0,e871dea7-1953-4511-90b0-e0957afac4c0,e871dea7-1953-4511-90b0-e0957afac4c0,1,0,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,1,0,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,1,0,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,1,0,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,1,0,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,1,0,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,1,0,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,1,0,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,1,0,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,1,0,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,1,0,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,1,0,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,1,0,7172bed5-b12b-4e83-b15d-1d95b63a6272,7172bed5-b12b-4e83-b15d-1d95b63a6272,1,0,25d75a3c-b801-4b1e-aed8-90e667f36c67,25d75a3c-b801-4b1e-aed8-90e667f36c67,1,0,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,1,0,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,1,0,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,1,0,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,1,0,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,1,0,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,1,0,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,1,0,49e21b87-beae-4640-a497-ef468da0cbbc,49e21b87-beae-4640-a497-ef468da0cbbc,1,0,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,1,0,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,1,0,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,1,0,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,1,0,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,1,0,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,1,0,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,1,0,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,1,0,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,1,0,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,1,0,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,1,0,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,1,0,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,1,0,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,1,0,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,1,0,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,1,0,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,1,0,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,1,0,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,1,0,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,1,0,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,1,0,393074c4-0afc-4232-8101-11a4ea6ed28a,393074c4-0afc-4232-8101-11a4ea6ed28a,1,0,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,1,0,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,1,0,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,1,0,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,1,0,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,1,0,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,1,0,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,1,0,0e1a45b0-d95d-415f-b954-5689610aa393,0e1a45b0-d95d-415f-b954-5689610aa393,1,0,4736b3d3-f696-4bdd-b0e3-0884ea88f623,4736b3d3-f696-4bdd-b0e3-0884ea88f623,1,0,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,1,0,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,1,0,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,1,0,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,1,0,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,1,0,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,1,0,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,1,0,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,1,0,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,1,0,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,1,0,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,1,0,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,1,0,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,1,0,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,1,0,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,1,0,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,1,0,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,1,0,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,1,0,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,1,0,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,1,0,c7f817ee-9f6a-454c-95a0-b279fd08055e,c7f817ee-9f6a-454c-95a0-b279fd08055e,1,0,1d49b1bb-5f90-46e4-adcf-55ad46442648,1d49b1bb-5f90-46e4-adcf-55ad46442648,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,1,0,259ede1f-05d3-4ece-8994-0ae3b2e89f49,259ede1f-05d3-4ece-8994-0ae3b2e89f49,1,0,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,1,0,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,1,0,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,1,0,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,1,0,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,1,0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,1,0,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,1,0,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,1,0,97edd94a-4bf2-4ed7-b98f-677f869b0715,97edd94a-4bf2-4ed7-b98f-677f869b0715,1,0,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,1,0,2fad50a6-6a3e-4f87-ab84-907364427a63,2fad50a6-6a3e-4f87-ab84-907364427a63,1,0,9567765b-8e02-4262-89a9-5c354109cc4c,9567765b-8e02-4262-89a9-5c354109cc4c,1,0,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1,0,258736e4-93c0-4a46-8caa-75be42c9f006,258736e4-93c0-4a46-8caa-75be42c9f006,1,0,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,1,0,56d0acf3-c888-4824-a6e4-27d61fa35415,56d0acf3-c888-4824-a6e4-27d61fa35415,1,0,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,1,0,439129dd-ad00-484c-b84a-fb325af979ed,439129dd-ad00-484c-b84a-fb325af979ed,1,0,bb4db4de-dec5-4bf9-be83-a0d845398d49,bb4db4de-dec5-4bf9-be83-a0d845398d49,1,0,dcae6376-f44c-421e-87f2-df83413c021e,dcae6376-f44c-421e-87f2-df83413c021e,1,0,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,1,0,151f2d0a-cc43-490d-ad7d-71390703aa72,151f2d0a-cc43-490d-ad7d-71390703aa72,1,0,2a515a4f-683b-4674-b097-62dd2d940c39,2a515a4f-683b-4674-b097-62dd2d940c39,1,0,d14058f5-dfd4-47eb-ae6d-01b7062f5940,d14058f5-dfd4-47eb-ae6d-01b7062f5940,1,0,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,1,0,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,1,0,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,1,0,fdb5b235-1978-4c2a-a03f-02341df00c3c,fdb5b235-1978-4c2a-a03f-02341df00c3c,1,0,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,1,0,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,1,0,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,1,0,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,1,0,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,1,0,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,1,0,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,1,0,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,1,0,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,1,0,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,1,0,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,1,0,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,1,0,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,1,0,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,1,0,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,1,0,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,1,0,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,1,0,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,1,0,1f927f76-5523-4880-9d26-d69a059f2b67,1f927f76-5523-4880-9d26-d69a059f2b67,1,0,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,1,0,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,1,0,ca85912b-87b4-481e-9184-017364b4603d,ca85912b-87b4-481e-9184-017364b4603d,1,0,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,1,0,2650db63-ca98-4a8a-8c36-165548aa5279,2650db63-ca98-4a8a-8c36-165548aa5279,1,0,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,1,0,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,1,0,e8c5c961-0633-438d-ba50-d2a774f6b167,e8c5c961-0633-438d-ba50-d2a774f6b167,1,0,a69525c7-27ff-48df-b26b-325ba580a53e,a69525c7-27ff-48df-b26b-325ba580a53e,1,0,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,1,0,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,1,0,e57f4619-b5ed-44de-a186-a13a3897731b,e57f4619-b5ed-44de-a186-a13a3897731b,1,0,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,1,0,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,1,0,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,1,0,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,1,0,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,1,0,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,1,0,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,1,0,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,1,0,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,1,0,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,1,0,bb3a9973-67ce-479e-8668-c2f3bb20301e,bb3a9973-67ce-479e-8668-c2f3bb20301e,1,0,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,1,0,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,1,0,37169451-1464-4f24-8ca6-802963ffb636,37169451-1464-4f24-8ca6-802963ffb636,1,0,c3a958b1-590f-4418-a74f-5982b478cf52,c3a958b1-590f-4418-a74f-5982b478cf52,1,0,ef0e618d-0942-460a-ac65-9aca2fed976e,ef0e618d-0942-460a-ac65-9aca2fed976e,1,0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,1,0,2ac8bd69-9fbf-4f15-b58d-397d9e903532,2ac8bd69-9fbf-4f15-b58d-397d9e903532,1,0,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,1,0,5b460b92-2c74-4f59-88b2-18d9aac42c04,5b460b92-2c74-4f59-88b2-18d9aac42c04,1,0,db05d35b-5f53-4c27-ba80-b477b9a98299,db05d35b-5f53-4c27-ba80-b477b9a98299,1,0,fa872ae1-b699-46fe-9d6a-e42e1388752b,fa872ae1-b699-46fe-9d6a-e42e1388752b,1,0,1acf34e6-c428-4130-82f0-5160dfcc0858,1acf34e6-c428-4130-82f0-5160dfcc0858,1,0,57046262-b9ce-4670-9cf5-6db9e58dd0d5,57046262-b9ce-4670-9cf5-6db9e58dd0d5,1,0,a9824176-36d5-4be5-9984-f4312ff48515,a9824176-36d5-4be5-9984-f4312ff48515,1,0,8e980ca0-1627-45e8-bd27-5dd1ac199459,8e980ca0-1627-45e8-bd27-5dd1ac199459,1,0,8b653beb-af9f-4f39-b691-ae14f80b7cd6,8b653beb-af9f-4f39-b691-ae14f80b7cd6,1,0,77559c11-713f-454d-aff4-56649e1350e9,77559c11-713f-454d-aff4-56649e1350e9,1,0,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0c965703-c1d0-48b7-80f9-b8d869ff98f5,1,0,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,1,0,7ba42162-557b-4e34-8aca-0cdee8cb2452,7ba42162-557b-4e34-8aca-0cdee8cb2452,1,0,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,1,0,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,1,0,dd577924-c6cb-4aa9-9db5-366d8958d00f,dd577924-c6cb-4aa9-9db5-366d8958d00f,1,0,8ed8f72e-404a-4be4-a44d-ddebbad5f411,8ed8f72e-404a-4be4-a44d-ddebbad5f411,1,0,e919bc4c-86e6-44f6-be27-5a729b63d042,e919bc4c-86e6-44f6-be27-5a729b63d042,1,0,ec580e4f-1518-4923-a10e-bc1da8688b37,ec580e4f-1518-4923-a10e-bc1da8688b37,1,0,91c3902a-314f-4d40-8bcc-8dd131fed2f4,91c3902a-314f-4d40-8bcc-8dd131fed2f4,1,0,ae2b21c5-9349-49e8-9627-26f05c21f43a,ae2b21c5-9349-49e8-9627-26f05c21f43a,1,0,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,1,0,917a19d7-73db-4247-b892-397598d67879,917a19d7-73db-4247-b892-397598d67879,1,0,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1,0,d8066600-c669-449d-a187-fdd3af8f7afa,d8066600-c669-449d-a187-fdd3af8f7afa,1,0,dadf86a6-c118-4827-b1b9-6cfee731242f,dadf86a6-c118-4827-b1b9-6cfee731242f,1,0,45bf7b20-f048-491a-a989-e50bea13d028,45bf7b20-f048-491a-a989-e50bea13d028,1,0,9ad3b432-5b49-44ee-9d8d-83c36458d927,9ad3b432-5b49-44ee-9d8d-83c36458d927,1,0,a9967bff-53b9-4295-a253-3647d956d3cb,a9967bff-53b9-4295-a253-3647d956d3cb,1,0,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,1,0,b8a31397-8974-44ec-92b0-7cbdc481cf7e,b8a31397-8974-44ec-92b0-7cbdc481cf7e,1,0,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,1,0,fb16c4d5-854c-4525-92be-b21fa2df5b0d,fb16c4d5-854c-4525-92be-b21fa2df5b0d,1,0,5771de21-2086-432b-ad91-de14a39bd5bc,5771de21-2086-432b-ad91-de14a39bd5bc,1,0,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,1,0,ed96fbfa-bda7-405c-9073-d0b6feffedad,ed96fbfa-bda7-405c-9073-d0b6feffedad,1,0,50c724cb-dde1-4313-9492-b1750bd0afc1,50c724cb-dde1-4313-9492-b1750bd0afc1,1,0,12901981-6106-4471-ab3a-e127c2bb4ebd,12901981-6106-4471-ab3a-e127c2bb4ebd,1,0,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,1,0,d5ea5dea-233d-4106-b9ba-f030d4f762ef,d5ea5dea-233d-4106-b9ba-f030d4f762ef,1,0,903af05e-5ac5-46aa-843b-d74f9e417c1d,903af05e-5ac5-46aa-843b-d74f9e417c1d,1,0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,1,0,a344290a-c9be-47a7-95ad-ced1b52a0995,a344290a-c9be-47a7-95ad-ced1b52a0995,1,0,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,1,0,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,1,0,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,1,0,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,1,0,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,1,0,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,1,0,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,1,0,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,1,0,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,1,0,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,1,0,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,1,0,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,1,0,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,1,0,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,1,0,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,1,0,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,1,0,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,1,0,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,1,0,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,1,0,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,1,0,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,1,0,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,1,0,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,1,0,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,1,0,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,1,0,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,1,0,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,1,0,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,1,0,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,1,0,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,1,0,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,1,0,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,1,0,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,1,0,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,1,0,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,1,0,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,1,0,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,1,0,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,1,0,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,1,0,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,1,0,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,1,0,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,1,0,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,1,0,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,1,0,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,1,0,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,1,0,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,1,0,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,1,0,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,1,0,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,1,0,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,1,0,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,1,0,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,1,0,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,1,0,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,1,0,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,1,0,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,1,0,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,1,0,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,1,0,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,1,0,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,1,0,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,1,0,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,1,0,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,1,0,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,1,0,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,1,0,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,1,0,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,1,0,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,1,0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,1,0,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,1,0,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,1,0,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,1,0,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,1,0,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,1,0,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,1,0,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,1,0,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,1,0,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,1,0,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,1,0,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,1,0,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,1,0,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,1,0,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,1,0,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,1,0,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,1,0,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,1,0,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,1,0,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,1,0,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,1,0,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,1,0,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,1,0,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,1,0,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,1,0,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,1,0,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,1,0,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,1,0,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,1,0,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1,0,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,1,0,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,1,0,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,1,0,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,1,0,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,1,0,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,1,0,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,1,0,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,1,0,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,1,0,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,1,0,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,1,0,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,1,0,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,1,0,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,1,0,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,1,0,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,1,0,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,1,0,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,1,0,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,1,0,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,1,0,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,1,0,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,1,0,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,1,0,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,1,0,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,1,0,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,1,0,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,1,0,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,1,0,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,1,0,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,1,0,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,1,0,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,1,0,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,1,0,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,1,0,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,1,0,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,1,0,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,1,0,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,1,0,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,1,0,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,1,0,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,1,0,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,1,0,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,1,0,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,1,0,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,1,0,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,1,0,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,1,0,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,1,0,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,1,0,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,1,0,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,1,0,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,1,0,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,1,0,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,1,0,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,1,0,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,1,0,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,1,0,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,1,0,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,1,0,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,1,0,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,1,0,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,1,0,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,1,0,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,1,0,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,1,0,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,1,0,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,1,0,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,1,0,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,1,0,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,1,0,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,1,0,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,1,0,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,1,0,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,1,0,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,1,0,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,1,0,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,1,0,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,1,0,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,1,0,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,1,0,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,1,0,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,1,0,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,1,0,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,1,0,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,1,0,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,1,0,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,1,0,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,1,0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,1,0,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,1,0,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,1,0,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,1,0,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,1,0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,1,0,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,1,0,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,1,0,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,1,0,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,1,0,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,1,0,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,1,0,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,1,0,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,1,0,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,1,0,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,1,0,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,1,0,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,1,0,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,1,0,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,1,0,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,1,0,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,1,0,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,1,0,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,1,0,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,1,0,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,1,0,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,1,0,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,1,0,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,1,0,9f36d26e-aa71-44d5-ac27-9aaa643555c3,9f36d26e-aa71-44d5-ac27-9aaa643555c3,1,0,87b8b5d7-d3d6-450a-adb1-5c875257ec80,87b8b5d7-d3d6-450a-adb1-5c875257ec80,1,0,e3640efe-e46c-4588-b251-dda23bf0641d,e3640efe-e46c-4588-b251-dda23bf0641d,1,0,bb6e6574-4328-4cf5-a043-a7d8f6c81414,bb6e6574-4328-4cf5-a043-a7d8f6c81414,1,0,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,1,0,522a4bff-34d3-46b2-8c66-0b30d881a86e,522a4bff-34d3-46b2-8c66-0b30d881a86e,1,0,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,1,0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1,0,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,1,0,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,1,0,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,1,0,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0f9c08c2-e7fa-4ea0-a935-f927feb01131,1,0,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,1,0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,1,0,57069b56-f732-41c0-9a75-cbdb1e88556c,57069b56-f732-41c0-9a75-cbdb1e88556c,1,0,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,1,0,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,1,0,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,1,0,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,1,0,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,1,0,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,1,0,5dcd8e28-b058-405a-bac4-defab7d4b789,5dcd8e28-b058-405a-bac4-defab7d4b789,1,0,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,1,0,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,1,0,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,1,0,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,1,0,da8f7f30-eb80-44db-a451-348306c90cd8,da8f7f30-eb80-44db-a451-348306c90cd8,1,0,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,1,0,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,1,0,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,1,0,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,1,0,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,1,0,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,1,0,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,1,0,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,1,0,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,1,0,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,1,0,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,1,0,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,1,0,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,1,0,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,1,0,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,1,0,f321e378-6d50-4567-8434-813f367d3a65,f321e378-6d50-4567-8434-813f367d3a65,1,0,27246fd8-a8a3-4244-b49a-c0372a812167,27246fd8-a8a3-4244-b49a-c0372a812167,1,0,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,1,0,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,1,0,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,1,0,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,1,0,5d338e31-a56b-45f0-8a62-0270ca543f6a,5d338e31-a56b-45f0-8a62-0270ca543f6a,1,0,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,1,0,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,1,0,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,1,0,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,1,0,c11d967b-1250-4345-90b0-011a96c5ae5e,c11d967b-1250-4345-90b0-011a96c5ae5e,1,0,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,1,0,24eed105-f612-4340-ad79-388a7b39b58c,24eed105-f612-4340-ad79-388a7b39b58c,1,0,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,1,0,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,1,0,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,1,0,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,1,0,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,1,0,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,1,0,6a2add61-edb7-4561-bae9-06b3741e7726,6a2add61-edb7-4561-bae9-06b3741e7726,1,0,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,1,0,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,1,0,80048d97-e917-4d03-bb49-e797e63f7fd2,80048d97-e917-4d03-bb49-e797e63f7fd2,1,0,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,1,0,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,1,0,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,1,0,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,1,0,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,1,0,ae3876e2-bd06-415b-9d9a-b77d787be09e,ae3876e2-bd06-415b-9d9a-b77d787be09e,1,0,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,1,0,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,1,0,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,1,0,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,1,0,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,1,0,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,1,0,e37a7cf1-a7b5-4b6e-b818-0915598c8505,e37a7cf1-a7b5-4b6e-b818-0915598c8505,1,0,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,1,0,b76c3bd6-924a-4378-acbe-6f17232b201b,b76c3bd6-924a-4378-acbe-6f17232b201b,1,0,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,1,0,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,1,0,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,1,0,9d358304-3fd0-4ec6-9400-cc498ff2f751,9d358304-3fd0-4ec6-9400-cc498ff2f751,1,0,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,1,0,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,1,0,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,1,0,74067eee-6cd4-4ae3-becc-457ecb51dc9a,74067eee-6cd4-4ae3-becc-457ecb51dc9a,1,0,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,1,0,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,1,0,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,1,0,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,1,0,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,1,0,343b979a-97e3-4eac-a314-3bd3eea9c15c,343b979a-97e3-4eac-a314-3bd3eea9c15c,1,0,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,1,0,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,1,0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,1,0,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,1,0,9f32e85c-2ed6-41db-b0ec-6d8596940e80,9f32e85c-2ed6-41db-b0ec-6d8596940e80,1,0,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,1,0,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,1,0,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,1,0,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,1,0,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,1,0,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,1,0,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,1,0,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,1,0,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,1,0,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,1,0,aa0c32ae-da52-4df9-8b77-99ea31f8df81,aa0c32ae-da52-4df9-8b77-99ea31f8df81,1,0,d7dcd391-3a0e-4aa9-9b53-467a1de67593,d7dcd391-3a0e-4aa9-9b53-467a1de67593,1,0,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,1,0,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,1,0,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,1,0,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,1,0,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,1,0,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,1,0,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,1,0,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,1,0,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,1,0,331db120-ba88-4eb3-a8ec-10691be82e2d,331db120-ba88-4eb3-a8ec-10691be82e2d,1,0,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,1,0,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,1,0,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,1,0,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,1,0,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,1,0,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,1,0,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,1,0,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,1,0,9ee03c48-c338-4655-9095-d490231df2a3,9ee03c48-c338-4655-9095-d490231df2a3,1,0,3924c17c-6ee3-4406-8023-0a79a242e389,3924c17c-6ee3-4406-8023-0a79a242e389,1,0,84a159ed-bc5f-4497-94d1-94b187b0bffe,84a159ed-bc5f-4497-94d1-94b187b0bffe,1,0,0a126b0d-28c8-4ed4-836f-e39e17693ad0,0a126b0d-28c8-4ed4-836f-e39e17693ad0,1,0,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,1,0,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,1,0,f95adb50-fa0b-434c-93dd-b7fd211220b7,f95adb50-fa0b-434c-93dd-b7fd211220b7,1,0,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,1,0,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,1,0,bd69bf55-dee0-4553-8f90-5fd025c0f773,bd69bf55-dee0-4553-8f90-5fd025c0f773,1,0,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,1,0,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,1,0,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,1,0,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,1,0,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,1,0,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,1,0,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,1,0,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,1,0,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,1,0,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,1,0,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,1,0,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,1,0,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,1,0,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,1,0,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,91d7687b-7627-473f-a08d-433f9d385107,91d7687b-7627-473f-a08d-433f9d385107,1,0,83db1b00-e9e3-41da-8a59-47589dcfd618,83db1b00-e9e3-41da-8a59-47589dcfd618,1,0,91d2d798-1498-4c52-aa7b-99db4b992876,91d2d798-1498-4c52-aa7b-99db4b992876,1,0,e85a03d3-e7c7-4058-992a-515a557d9e52,e85a03d3-e7c7-4058-992a-515a557d9e52,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,83385f31-2cdf-44a1-85c3-461e4ad5fd45,83385f31-2cdf-44a1-85c3-461e4ad5fd45,1,0,b55b06db-604e-4fb9-9253-638c747bd8f9,b55b06db-604e-4fb9-9253-638c747bd8f9,1,0,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,1,0,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,1,0,deb69010-80b0-4e28-acc7-8c50e8e6f873,deb69010-80b0-4e28-acc7-8c50e8e6f873,1,0,1a9177fe-6699-42b3-9588-eed9c6008c2d,1a9177fe-6699-42b3-9588-eed9c6008c2d,1,0,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,1,0,ae698468-f42a-4400-aee6-fd849740e634,ae698468-f42a-4400-aee6-fd849740e634,1,0,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,1,0,6438435e-97cc-4bd2-98dc-e21cee55bb0f,6438435e-97cc-4bd2-98dc-e21cee55bb0f,1,0,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,5001bea4-c8f9-4950-9eda-d33125e3bb46,5001bea4-c8f9-4950-9eda-d33125e3bb46,1,0,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,d4ab930a-ddaa-4552-afed-2618af822365,d4ab930a-ddaa-4552-afed-2618af822365,1,0,dd03e170-4186-495b-ae1c-fc66385d7ccf,dd03e170-4186-495b-ae1c-fc66385d7ccf,1,0,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,1,0,cdef5df6-f3a1-4950-b197-4f375914f885,cdef5df6-f3a1-4950-b197-4f375914f885,1,0,c1caff49-dc4b-4b3e-be47-122ea8b70416,c1caff49-dc4b-4b3e-be47-122ea8b70416,1,0,a1185a4c-7351-48b0-b662-61f61a1ad715,a1185a4c-7351-48b0-b662-61f61a1ad715,1,0,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,1,0,71d03545-df45-4c70-aa0d-3b916f2a9041,71d03545-df45-4c70-aa0d-3b916f2a9041,1,0,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,1,0,28a25822-2306-409a-a7c8-6f7e42bf25e8,28a25822-2306-409a-a7c8-6f7e42bf25e8,1,0,a45fa0c3-c363-4465-861f-13cedfeb79dd,a45fa0c3-c363-4465-861f-13cedfeb79dd,1,0,a72517c3-8c91-4e40-81ac-83c762789e87,a72517c3-8c91-4e40-81ac-83c762789e87,1,0,0233b335-7e26-4661-9850-8ab09d3178e3,0233b335-7e26-4661-9850-8ab09d3178e3,1,0,d942d536-5d01-4571-b910-abd973996a38,d942d536-5d01-4571-b910-abd973996a38,1,0,b82a7103-b872-49c3-b632-81d5a0051136,b82a7103-b872-49c3-b632-81d5a0051136,1,0,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,1,0,20c2053c-8ebd-4c07-8d95-956b424d047c,20c2053c-8ebd-4c07-8d95-956b424d047c,1,0,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,1,0,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,1,0,bef6081e-f377-41d6-83a1-b0e218a3fb46,bef6081e-f377-41d6-83a1-b0e218a3fb46,1,0,9b67bfd5-ef23-4205-b7ba-9466517e9999,9b67bfd5-ef23-4205-b7ba-9466517e9999,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,63fd620c-59a5-493c-a39e-457fad6fe35f,63fd620c-59a5-493c-a39e-457fad6fe35f,1,0,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,1,0,52e0ede7-de57-4640-b432-96e56131f277,52e0ede7-de57-4640-b432-96e56131f277,1,0,89888993-3b05-475e-ac76-3cd7ced93250,89888993-3b05-475e-ac76-3cd7ced93250,1,0,129f704b-cc63-4a4e-b6a7-9e53de4537a2,129f704b-cc63-4a4e-b6a7-9e53de4537a2,1,0,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,1,0,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,1,0,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,1,0,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,1,0,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,1,0,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,1,0,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,1,0,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,1,0,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,1,0,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,1,0,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,1,0,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,1,0,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,1,0,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,1,0,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,1,0,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1,0,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1,0,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,1,0,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,1,0,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,1,0,5f3d5a05-a581-462d-96a2-2750ba0e0481,5f3d5a05-a581-462d-96a2-2750ba0e0481,1,0,477ab478-b336-4bac-898f-e20e3a4039b5,477ab478-b336-4bac-898f-e20e3a4039b5,1,0,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,1,0,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,1,0,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,1,0,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,1,0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,1,0,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,1,0,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,1,0,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,1,0,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,1,0,e4216976-2747-4078-81d4-8ffab668c1f7,e4216976-2747-4078-81d4-8ffab668c1f7,1,0,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,1,0,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,1,0,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,1,0,9ed2c756-80a1-4559-8494-b7a9b82a4519,9ed2c756-80a1-4559-8494-b7a9b82a4519,1,0,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,1,0,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,1,0,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,1,0,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,1,0,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,1,0,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,1,0,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,1,0,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,1,0,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,1,0,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,1,0,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,1,0,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,1,0,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,1,0,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,1,0,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,1,0,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,1,0,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,1,0,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,1,0,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,1,0,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,1,0,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,1,0,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,1,0,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,1,0,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,1,0,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,1,0,9b4b7424-1af7-4d80-8404-8819fcfeae75,9b4b7424-1af7-4d80-8404-8819fcfeae75,1,0,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,1,0,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,1,0,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,1,0,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,1,0,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,1,0,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,1,0,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,1,0,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,1,0,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,1,0,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,1,0,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,1,0,973609a2-5b5d-45c4-9606-a13d0de1a09b,973609a2-5b5d-45c4-9606-a13d0de1a09b,1,0,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,1,0,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,1,0,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,1,0,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,1,0,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,1,0,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,1,0,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,1,0,48cefa96-46c7-4870-a096-951dcbae479a,48cefa96-46c7-4870-a096-951dcbae479a,1,0,d74e01cc-941b-4974-8771-0bd2e0d86724,d74e01cc-941b-4974-8771-0bd2e0d86724,1,0,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,1,0,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,1,0,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,1,0,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,1,0,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,1,0,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,1,0,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,1,0,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,1,0,845530cd-36fb-44c3-b30a-730985c9ca2d,845530cd-36fb-44c3-b30a-730985c9ca2d,1,0,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,1,0,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,1,0,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,1,0,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,1,0,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,1,0,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,1,0,ce5549bd-ba99-4259-86a3-36521bad59f5,ce5549bd-ba99-4259-86a3-36521bad59f5,1,0,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,1,0,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,1,0,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,1,0,fd12fbe2-56a2-4c9e-a072-989d826a5ea3,fd12fbe2-56a2-4c9e-a072-989d826a5ea3,1,0,08552af7-3c44-42c6-94c5-63a2316127fc,08552af7-3c44-42c6-94c5-63a2316127fc,1,0,41f6f6d1-b7cf-4477-907b-ce69fc08c799,41f6f6d1-b7cf-4477-907b-ce69fc08c799,1,0,9f1a61dd-b04f-48ae-b0c0-17cf23bdb04b,9f1a61dd-b04f-48ae-b0c0-17cf23bdb04b,1,0,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,1,0,a300ecc3-8031-4a50-a17d-b08cf3a72139,a300ecc3-8031-4a50-a17d-b08cf3a72139,1,0,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,1,0,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,1,0,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,1,0,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,1,0,657b8663-713c-4a80-81e1-8c0166742a35,657b8663-713c-4a80-81e1-8c0166742a35,1,0,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,1,0,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,1,0,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,1,0,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,1,0,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,1,0,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,1,0,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,1,0,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,1,0,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,1,0,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,1,0,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,1,0,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,1,0,63470706-f14b-4733-87c2-d1173f5d7e7a,63470706-f14b-4733-87c2-d1173f5d7e7a,1,0,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,1,0,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,1,0,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,1,0,76cdcc51-0e6a-4f9c-a115-1864998c2add,76cdcc51-0e6a-4f9c-a115-1864998c2add,1,0,71c3e5d3-7504-433f-9d48-7c287b2b863b,71c3e5d3-7504-433f-9d48-7c287b2b863b,1,0,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,1,0,0d8c215d-1210-47a2-897d-a3257b9f849a,0d8c215d-1210-47a2-897d-a3257b9f849a,1,0,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,1,0,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,1,0,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,1,0,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,1,0,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,1,0,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,1,0,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,1,0,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,1,0,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,1,0,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,1,0,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,1,0,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,1,0,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,1,0,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,1,0,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,1,0,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,1,0,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,1,0,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,1,0,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,1,0,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,1,0,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,1,0,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,1,0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,1,0,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,1,0,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,1,0,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,1,0,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,1,0,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,1,0,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,1,0,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1,0,7a944c45-9b3d-411f-b2ef-de3c896092bb,7a944c45-9b3d-411f-b2ef-de3c896092bb,1,0,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,1,0,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,1,0,323997ca-488d-4d84-aa44-da60b6b4d414,323997ca-488d-4d84-aa44-da60b6b4d414,1,0,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,1,0,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1,0,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,1,0,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,1,0,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,1,0,44afff59-0590-4929-93b8-7b49735f21b5,44afff59-0590-4929-93b8-7b49735f21b5,1,0,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,1,0,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,1,0,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,1,0,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,1,0,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,1,0,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,1,0,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,1,0,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,1,0,9892f922-8745-4164-a200-94b5edc1ea0a,9892f922-8745-4164-a200-94b5edc1ea0a,1,0,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,1,0,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,1,0,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,1,0,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,1,0,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,1,0,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,1,0,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,1,0,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,1,0,30f6aedf-946f-400c-822d-5fa375b8fb1d,30f6aedf-946f-400c-822d-5fa375b8fb1d,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,1,0,26986f8d-d56d-4641-9184-2632d0881cca,26986f8d-d56d-4641-9184-2632d0881cca,1,0,144676de-f369-49f1-bb21-d60e073936df,144676de-f369-49f1-bb21-d60e073936df,1,0,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,1,0,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,1,0,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,1,0,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,1,0,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,a2a51b70-9570-4f53-9d30-e9a9b099a475,a2a51b70-9570-4f53-9d30-e9a9b099a475,1,0,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,1,0,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,1,0,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,1,0,fdcbe67c-55fb-444d-bed8-cee956ca3530,fdcbe67c-55fb-444d-bed8-cee956ca3530,1,0,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,1,0,6ff5b3cb-efff-430d-bf0a-957405f116ca,6ff5b3cb-efff-430d-bf0a-957405f116ca,1,0,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,1,0,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,1,0,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,1,0,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,1,0,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,1,0,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,1,0,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,1,0,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,1,0,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,1,0,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,1,0,ad6384d5-278b-44d3-993a-d5a39e7c98ca,ad6384d5-278b-44d3-993a-d5a39e7c98ca,1,0,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,1,0,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,1,0,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,1,0,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,1,0,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,1,0,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,1,0,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,1,0,540be4e1-6eae-48e2-a645-8bd0a1259c65,540be4e1-6eae-48e2-a645-8bd0a1259c65,1,0,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,1,0,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,1,0,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,1,0,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,1,0,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,1,0,83ead93b-4ff6-487d-934e-25088944fccc,83ead93b-4ff6-487d-934e-25088944fccc,1,0,764c76cc-0473-4633-868d-02f96aa43c10,764c76cc-0473-4633-868d-02f96aa43c10,1,0,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,1,0,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,1,0,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,1,0,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,1,0,9416a741-5106-454e-b953-81f3d99d5e71,9416a741-5106-454e-b953-81f3d99d5e71,1,0,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,1,0,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,1,0,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,1,0,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,1,0,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,1,0,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,1,0,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,1,0,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,1,0,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,1,0,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1,0,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,1,0,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,1,0,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,1,0,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,1,0,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,1,0,5a088468-4065-4e0c-9b84-1162de8d3fdd,5a088468-4065-4e0c-9b84-1162de8d3fdd,1,0,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,1,0,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,1,0,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,1,0,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,1,0,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,1,0,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,1,0,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,1,0,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,1,0,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,1,0,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,1,0,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,1,0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,1,0,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,1,0,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,1,0,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,1,0,73c1a829-0191-486b-97a0-7f333c6f8011,73c1a829-0191-486b-97a0-7f333c6f8011,1,0,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,1,0,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,1,0,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,1,0,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,1,0,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,1,0,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,1,0,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,1,0,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,1,0,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,1,0,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,1,0,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,1,0,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,1,0,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,1,0,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,1,0,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,1,0,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,1,0,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,1,0,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,1,0,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,1,0,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,1,0,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,1,0,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,1,0,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,1,0,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,1,0,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,1,0,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,1,0,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,1,0,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,1,0,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,1,0,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,1,0,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,1,0,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,1,0,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,1,0,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,1,0,73d8b319-9bea-4638-a602-23c12f37c227,73d8b319-9bea-4638-a602-23c12f37c227,1,0,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,1,0,a43e9de0-2921-4c58-a5f8-7446258be967,a43e9de0-2921-4c58-a5f8-7446258be967,1,0,307656e3-df7f-46e7-946c-bbd439265c95,307656e3-df7f-46e7-946c-bbd439265c95,1,0,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,1,0,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,1,0,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,1,0,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,1,0,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,1,0,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,1,0,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,1,0,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,1,0,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,1,0,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,1,0,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,1,0,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,1,0,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,1,0,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,1,0,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,1,0,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,1,0,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,1,0,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,1,0,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,1,0,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,1,0,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,1,0,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,1,0,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,1,0,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,1,0,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,1,0,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,1,0,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,1,0,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,1,0,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,1,0,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,1,0,dd383422-dddb-4a81-9326-015fd345b5c1,dd383422-dddb-4a81-9326-015fd345b5c1,1,0,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,1,0,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,1,0,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,1,0,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,1,0,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,1,0,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,1,0,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,1,0,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,1,0,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,1,0,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,1,0,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,1,0,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,1,0,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,1,0,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,1,0,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,1,0,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,1,0,13dee5d8-f165-48de-9ccb-3ef0239f4b27,13dee5d8-f165-48de-9ccb-3ef0239f4b27,1,0,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,1,0,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,1,0,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,1,0,eb3f959c-94a4-4e77-b9f9-e81954254079,eb3f959c-94a4-4e77-b9f9-e81954254079,1,0,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,1,0,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,1,0,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,1,0,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,1,0,36d6b0e1-5e10-408a-8eb1-09839e57690f,36d6b0e1-5e10-408a-8eb1-09839e57690f,1,0,6423b849-7ca4-4501-8856-445157d7e5df,6423b849-7ca4-4501-8856-445157d7e5df,1,0,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,1,0,e814287f-1c13-4f74-9507-d22a62394fd2,e814287f-1c13-4f74-9507-d22a62394fd2,1,0,417ac987-7369-45af-b670-fdffb048f33d,417ac987-7369-45af-b670-fdffb048f33d,1,0,640a5d72-dbc7-421b-afdb-cc3a4622ae04,640a5d72-dbc7-421b-afdb-cc3a4622ae04,1,0,4d94689b-d0f2-4075-9dad-be712878e300,4d94689b-d0f2-4075-9dad-be712878e300,1,0,79da84c1-5ac2-4472-8eb9-f0484b9582c2,79da84c1-5ac2-4472-8eb9-f0484b9582c2,1,0,2d0b161b-7d69-4ec4-a483-79bd458cb62c,2d0b161b-7d69-4ec4-a483-79bd458cb62c,1,0,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,1,0,e33a9c94-7e98-4b38-ba20-4546a90b2937,e33a9c94-7e98-4b38-ba20-4546a90b2937,1,0,5011e9cb-bfde-46bf-be3f-8f6ccfbee406,5011e9cb-bfde-46bf-be3f-8f6ccfbee406,1,0,1610e73c-58df-41cc-8349-51b920806821,1610e73c-58df-41cc-8349-51b920806821,1,0,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,1,0,c6ccf82f-f130-4037-9e89-1e0365b996a4,c6ccf82f-f130-4037-9e89-1e0365b996a4,1,0,c532963e-0d92-44b9-9cfc-43ed2744ccf9,c532963e-0d92-44b9-9cfc-43ed2744ccf9,1,0,6aff2855-24d4-4f90-b617-53326efdd1bd,6aff2855-24d4-4f90-b617-53326efdd1bd,1,0,0107a9c7-4c85-49c4-918a-925d85d57a0b,0107a9c7-4c85-49c4-918a-925d85d57a0b,1,0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,1,0,e5b578a1-e33b-4d49-8064-427aa928a844,e5b578a1-e33b-4d49-8064-427aa928a844,1,0,f74e97ad-fef6-4122-a056-86f2d59dfdaf,f74e97ad-fef6-4122-a056-86f2d59dfdaf,1,0,df1ef691-1e86-4a80-8671-53b3d4504bfb,df1ef691-1e86-4a80-8671-53b3d4504bfb,1,0,474b9918-23da-4289-91a9-9115526c9b5d,474b9918-23da-4289-91a9-9115526c9b5d,1,0,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1,0,60aa9d44-5986-490e-8093-f65e194b3607,60aa9d44-5986-490e-8093-f65e194b3607,1,0,a36dee5e-7184-4caf-bf46-3977b165093b,a36dee5e-7184-4caf-bf46-3977b165093b,1,0,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,1,0,182916b2-972b-4e39-93ba-d45aa7a195f5,182916b2-972b-4e39-93ba-d45aa7a195f5,1,0,2b654a53-7ce8-421f-aaf5-aa1451d91415,2b654a53-7ce8-421f-aaf5-aa1451d91415,1,0,30e55306-ea5c-4ef4-9903-ea030afa3d85,30e55306-ea5c-4ef4-9903-ea030afa3d85,1,0,234c1a72-8349-472a-8373-2a25ce6252f2,234c1a72-8349-472a-8373-2a25ce6252f2,1,0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,1,0,539e0db9-be24-4086-9632-af20553ee50f,539e0db9-be24-4086-9632-af20553ee50f,1,0,b9adeb51-a009-4e83-85f8-bfa1547429d6,b9adeb51-a009-4e83-85f8-bfa1547429d6,1,0,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,1,0,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,1,0,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,1,0,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,1,0,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,1,0,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,1,0,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,1,0,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,1,0,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,1,0,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,1,0,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,1,0,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,1,0,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,1,0,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,1,0,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,1,0,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,1,0,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,1,0,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,1,0,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,1,0,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,1,0,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,1,0,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,1,0,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,1,0,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,1,0,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,1,0,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,1,0,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,1,0,1b4feda1-e555-4b85-b236-b21153a7246f,1b4feda1-e555-4b85-b236-b21153a7246f,1,0,61d3cef4-2c42-417d-a762-a2d2f5a28924,61d3cef4-2c42-417d-a762-a2d2f5a28924,1,0,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,1,0,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,1,0,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,1,0,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,1,0,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,1,0,7ab6acda-6732-4582-8092-d43f9a98a28d,7ab6acda-6732-4582-8092-d43f9a98a28d,1,0,5ab1d405-bfc3-4440-8cdd-3a63013b064d,5ab1d405-bfc3-4440-8cdd-3a63013b064d,1,0,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,1,0,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,1,0,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,1,0,6bcba052-4d81-409d-b1a2-eed6be6fb024,6bcba052-4d81-409d-b1a2-eed6be6fb024,1,0,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,1,0,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,1,0,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,1,0,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,1,0,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,1,0,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,1,0,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,1,0,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,1,0,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,1,0,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,1,0,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,1,0,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,1,0,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,1,0,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,1,0,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,1,0,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,1,0,093332f5-3eb4-478c-ac95-59dcdc96765a,093332f5-3eb4-478c-ac95-59dcdc96765a,1,0,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,1,0,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,1,0,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,1,0,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,1,0,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,1,0,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,1,0,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,1,0,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,1,0,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,1,0,e72e59c0-391d-497e-9407-063e0edf573e,e72e59c0-391d-497e-9407-063e0edf573e,1,0,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,1,0,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,1,0,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,1,0,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,1,0,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,1,0,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,1,0,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,1,0,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,1,0,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,1,0,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,1,0,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,1,0,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,1,0,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,1,0,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,1,0,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,1,0,13b27ec3-2be9-4959-92e5-94ba7bb64f03,13b27ec3-2be9-4959-92e5-94ba7bb64f03,1,0,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,1,0,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,1,0,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,1,0,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,1,0,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,1,0,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,1,0,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,1,0,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,1,0,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,1,0,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,1,0,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,1,0,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,1,0,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,1,0,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,1,0,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,1,0,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,1,0,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,1,0,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,1,0,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,1,0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,1,0,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,1,0,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,1,0,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,1,0,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,1,0,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,1,0,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,1,0,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,1,0,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,1,0,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,1,0,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,1,0,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,1,0,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,1,0,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,1,0,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,1,0,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,1,0,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,1,0,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,1,0,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,1,0,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,1,0,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,1,0,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,1,0,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,1,0,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,1,0,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,1,0,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,1,0,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,1,0,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,1,0,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,1,0,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,1,0,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,1,0,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,1,0,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,1,0,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,1,0,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,1,0,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,1,0,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,1,0,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1,0,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,1,0,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,1,0,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,1,0,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,1,0,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,1,0,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,1,0,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,1,0,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,1,0,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,1,0,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,1,0,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,1,0,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,1,0,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,1,0,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,1,0,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,1,0,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,1,0,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1,0,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,1,0,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,1,0,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,1,0,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,1,0,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,1,0,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,1,0,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,1,0,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,1,0,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,1,0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,1,0,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,1,0,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,1,0,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,1,0,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,1,0,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,1,0,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,1,0,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,1,0,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,1,0,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,1,0,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,1,0,67a04d72-afea-487a-b629-e4b7dfc1df32,67a04d72-afea-487a-b629-e4b7dfc1df32,1,0,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,1,0,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,1,0,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,1,0,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,1,0,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,1,0,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,1,0,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,1,0,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,1,0,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,1,0,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,1,0,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,1,0,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,1,0,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,1,0,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,1,0,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,1,0,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,1,0,8f09cbed-6f24-461f-9b35-31c64310e74a,8f09cbed-6f24-461f-9b35-31c64310e74a,1,0,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,1,0,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,1,0,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,1,0,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,1,0,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,1,0,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,1,0,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,1,0,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,1,0,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,1,0,211d226f-dac6-43d5-8720-952da4339e35,211d226f-dac6-43d5-8720-952da4339e35,1,0,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,1,0,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,1,0,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,1,0,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,1,0,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,1,0,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,1,0,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,1,0,463b8966-a5f9-4a80-82b9-1608a1622e13,463b8966-a5f9-4a80-82b9-1608a1622e13,1,0,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,1,0,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,1,0,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,1,0,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,1,0,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,1,0,01cb357c-af28-4855-afae-45b6df19b344,01cb357c-af28-4855-afae-45b6df19b344,1,0,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,1,0,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,1,0,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,1,0,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,1,0,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,1,0,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,1,0,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,1,0,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,1,0,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,1,0,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,1,0,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,1,0,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,1,0,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,1,0,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,1,0,aa509aa3-dd45-41f3-82c7-59662c2e2c47,aa509aa3-dd45-41f3-82c7-59662c2e2c47,1,0,c4552529-e69e-4c5c-bd66-04b2f7dac281,c4552529-e69e-4c5c-bd66-04b2f7dac281,1,0,381b49ba-793a-4418-9fd4-598844fb72a6,381b49ba-793a-4418-9fd4-598844fb72a6,1,0,1aee302d-df31-49ea-b542-436dc1d79ae1,1aee302d-df31-49ea-b542-436dc1d79ae1,1,0,593509da-d33c-49ff-a62c-a28cbc4651c1,593509da-d33c-49ff-a62c-a28cbc4651c1,1,0,5e346a0b-a322-4565-adb9-70131fb05fa3,5e346a0b-a322-4565-adb9-70131fb05fa3,1,0,9a69c559-194b-4f74-9879-82740260f5f6,9a69c559-194b-4f74-9879-82740260f5f6,1,0,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,1,0,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,1,0,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,1,0,2e19fb7b-270f-4181-b4a1-640280bbbc5c,2e19fb7b-270f-4181-b4a1-640280bbbc5c,1,0,cf69b045-665d-4f6c-827f-5044beacd125,cf69b045-665d-4f6c-827f-5044beacd125,1,0,aa773eef-0c4a-49be-9f5e-9131bc041415,aa773eef-0c4a-49be-9f5e-9131bc041415,1,0,9b31e474-01d4-4c3b-a633-3a2ff3917d62,9b31e474-01d4-4c3b-a633-3a2ff3917d62,1,0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1,0,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,1,0,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,1,0,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,1,0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,1,0,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,1,0,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,1,0,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,1,0,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,1,0,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,1,0,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,1,0,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,1,0,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,1,0,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,1,0,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,1,0,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,1,0,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,1,0,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,1,0,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,1,0,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,1,0,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,1,0,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,1,0,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,1,0,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,1,0,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,1,0,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,1,0,37e3d914-643e-4963-b4a0-7bc6727c0c9b,37e3d914-643e-4963-b4a0-7bc6727c0c9b,1,0,b6902500-3e03-4e83-a077-00500abc00b6,b6902500-3e03-4e83-a077-00500abc00b6,1,0,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,1,0,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,1,0,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,1,0,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,1,0,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,1,0,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,1,0,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,1,0,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,1,0,cd8fd85f-f02e-4f11-b4b4-40670febfaca,cd8fd85f-f02e-4f11-b4b4-40670febfaca,1,0,3f023afb-c02a-42ee-9afe-0f47ef3fe721,3f023afb-c02a-42ee-9afe-0f47ef3fe721,1,0,d7fe80d3-7fcf-427e-a991-5384f0c3947e,d7fe80d3-7fcf-427e-a991-5384f0c3947e,1,0,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,1,0,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,1,0,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,1,0,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,1,0,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,1,0,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,1,0,091ccac1-9a63-4a89-bb0c-333b274b0c70,091ccac1-9a63-4a89-bb0c-333b274b0c70,1,0,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,1,0,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,1,0,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,1,0,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,1,0,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,1,0,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,1,0,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,1,0,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,1,0,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,1,0,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,1,0,2a6e1f2b-7378-456b-9657-9e971eaff716,2a6e1f2b-7378-456b-9657-9e971eaff716,1,0,c3cdea20-3055-4b4e-a531-a02d4f3ed294,c3cdea20-3055-4b4e-a531-a02d4f3ed294,1,0,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,1,0,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,1,0,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,1,0,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,1,0,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,1,0,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,1,0,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,1,0,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,1,0,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,1,0,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,1,0,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,1,0,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,1,0,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,1,0,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,1,0,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,1,0,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,1,0,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,1,0,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,1,0,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,1,0,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,1,0,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,1,0,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,1,0,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,1,0,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,1,0,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,1,0,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,1,0,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,1,0,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,1,0,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,1,0,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,1,0,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,1,0,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,1,0,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,1,0,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,1,0,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,1,0,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,1,0,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,1,0,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,1,0,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,1,0,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,1,0,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,1,0,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,1,0,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,1,0,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,1,0,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,1,0,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,1,0,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,1,0,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,1,0,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,1,0,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,1,0,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,1,0,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,1,0,cc8e3172-491d-45d8-a7eb-fc6c400845cb,cc8e3172-491d-45d8-a7eb-fc6c400845cb,1,0,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,1,0,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,1,0,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,1,0,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,1,0,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,1,0,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,1,0,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,1,0,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,1,0,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,1,0,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,1,0,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,1,0,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,1,0,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,1,0,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,1,0,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,1,0,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,1,0,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1,0,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,1,0,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,1,0,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,1,0,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,1,0,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,1,0,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,1,0,40a59681-f31d-4fb9-9301-67c1430590e0,40a59681-f31d-4fb9-9301-67c1430590e0,1,0,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,1,0,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,1,0,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,1,0,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,1,0,9c3bc502-bcb1-4c90-ae43-53c798958339,9c3bc502-bcb1-4c90-ae43-53c798958339,1,0,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,1,0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,1,0,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,1,0,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,1,0,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,1,0,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,1,0,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,1,0,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,1,0,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,1,0,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,1,0,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,1,0,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,1,0,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,1,0,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,1,0,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,1,0,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,1,0,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,1,0,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,1,0,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,1,0,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,1,0,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,1,0,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,1,0,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,1,0,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,1,0,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,1,0,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,1,0,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,1,0,55bce105-51c0-452e-9eec-b960fe740db2,55bce105-51c0-452e-9eec-b960fe740db2,1,0,776c171d-5dd5-4965-94dc-c2fe6792d5f2,776c171d-5dd5-4965-94dc-c2fe6792d5f2,1,0,86bb1105-702a-47be-906a-1821a69b1b6c,86bb1105-702a-47be-906a-1821a69b1b6c,1,0,40653767-9542-44e9-a84b-ffee75584638,40653767-9542-44e9-a84b-ffee75584638,1,0,e16865c3-75d0-4b66-b52a-ca7991274d87,e16865c3-75d0-4b66-b52a-ca7991274d87,1,0,ca0a362a-edd9-4f33-9285-db7e7d3de7e9,ca0a362a-edd9-4f33-9285-db7e7d3de7e9,1,0,69e13959-51ad-4ac2-9cfc-17ac28b78c78,69e13959-51ad-4ac2-9cfc-17ac28b78c78,1,0,f890ca1b-f2c2-4630-9002-301b759ca6d9,f890ca1b-f2c2-4630-9002-301b759ca6d9,1,0,f1e1edf0-94f0-4dc1-8b4d-6f44866e98a4,f1e1edf0-94f0-4dc1-8b4d-6f44866e98a4,1,0,22093cbc-357a-4458-8c54-ce7f51cbf61e,22093cbc-357a-4458-8c54-ce7f51cbf61e,1,0,e614c04d-d877-42fa-b836-91b298e3d3d6,e614c04d-d877-42fa-b836-91b298e3d3d6,1,0,72a16a43-433c-4bb0-919d-cf2bc43d016a,72a16a43-433c-4bb0-919d-cf2bc43d016a,1,0,935cca1c-5ac6-4a7d-9c8e-e733e99cbd40,935cca1c-5ac6-4a7d-9c8e-e733e99cbd40,1,0,f295c68d-7e29-48b8-a95a-56e96d9843c1,f295c68d-7e29-48b8-a95a-56e96d9843c1,1,0,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,1,0,38556870-93c1-4d45-8bbd-2bb663a7068d,38556870-93c1-4d45-8bbd-2bb663a7068d,1,0,0b195c56-ac0f-4120-a097-3f4f9743c4f2,0b195c56-ac0f-4120-a097-3f4f9743c4f2,1,0,a3337da8-d35d-4cd2-b1de-ffed887a5f73,a3337da8-d35d-4cd2-b1de-ffed887a5f73,1,0,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,1,0,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,1,0,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,1,0,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,1,0,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,1,0,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,1,0,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,1,0,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,1,0,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,1,0,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,1,0,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,1,0,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,1,0,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,1,0,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,1,0,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,1,0,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,1,0,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,1,0,85223d37-2503-4783-94dc-fe6265e718d5,85223d37-2503-4783-94dc-fe6265e718d5,1,0,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0918cd76-56e5-4314-8a1c-c21d023ba6f8,1,0,9db21c2e-79fa-44e4-902e-416abfccb54a,9db21c2e-79fa-44e4-902e-416abfccb54a,1,0,fb082db3-197b-4d1e-b9ea-362624d547ee,fb082db3-197b-4d1e-b9ea-362624d547ee,1,0,c09dcf00-a45a-4487-99c5-d3a37956ec88,c09dcf00-a45a-4487-99c5-d3a37956ec88,1,0,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,1,0,2714e1b6-6b02-43a1-bc94-2934b429ed35,2714e1b6-6b02-43a1-bc94-2934b429ed35,1,0,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,1,0,4c7016da-9991-4917-8eaa-e760cc9e29d1,4c7016da-9991-4917-8eaa-e760cc9e29d1,1,0,febb3770-5c11-4ada-9e49-a27950bdaddf,febb3770-5c11-4ada-9e49-a27950bdaddf,1,0,d7b57669-e538-4e54-ab1b-8428f0586466,d7b57669-e538-4e54-ab1b-8428f0586466,1,0,9c484a15-039e-416d-af97-4c2bd90fd873,9c484a15-039e-416d-af97-4c2bd90fd873,1,0,534855e3-4cf2-471c-b982-7138917050c9,534855e3-4cf2-471c-b982-7138917050c9,1,0,4c72b944-d000-4920-aec8-54029f88ddf4,4c72b944-d000-4920-aec8-54029f88ddf4,1,0,b4033d05-05c2-4617-80d9-abfa389c47f4,b4033d05-05c2-4617-80d9-abfa389c47f4,1,0,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,1,0,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,1,0,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,1,0,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,1,0,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,1,0,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,1,0,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,1,0,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,1,0,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,1,0,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,1,0,dd07b255-25af-466e-a224-c561a8ca567b,dd07b255-25af-466e-a224-c561a8ca567b,1,0,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,1,0,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1,0,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,1,0,67993b79-6aca-4641-b2e2-0a15f44e47d5,67993b79-6aca-4641-b2e2-0a15f44e47d5,1,0,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,1,0,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,1,0,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,1,0,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,1,0,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,1,0,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,1,0,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,1,0,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,1,0,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,1,0,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,1,0,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,1,0,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,1,0,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,1,0,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,1,0,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,1,0,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,1,0,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,1,0,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,1,0,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,1,0,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,1,0,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,1,0,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,1,0,0d89036c-af6e-4709-847c-0dab74a33d72,0d89036c-af6e-4709-847c-0dab74a33d72,1,0,7d223aab-d4f6-41d5-a701-6fe03517cf50,7d223aab-d4f6-41d5-a701-6fe03517cf50,1,0,631cdd15-eb1f-4903-9073-4de3911ba2e6,631cdd15-eb1f-4903-9073-4de3911ba2e6,1,0,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,1,0,42630eee-ce93-40a8-b96e-3eb759f48976,42630eee-ce93-40a8-b96e-3eb759f48976,1,0,174e0187-cf34-4949-8dc2-a1f9aece78dc,174e0187-cf34-4949-8dc2-a1f9aece78dc,1,0,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,1,0,e4dbeb50-292f-452f-a0da-a55e5ea936e4,e4dbeb50-292f-452f-a0da-a55e5ea936e4,1,0,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,1,0,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,1,0,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,1,0,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,1,0,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,1,0,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,1,0,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,1,0,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,1,0,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,1,0,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,1,0,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,1,0,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,1,0,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,1,0,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,1,0,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,1,0,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,1,0,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,1,0,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,1,0,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,1,0,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,1,0,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,1,0,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,1,0,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,1,0,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,1,0,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,1,0,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,1,0,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,1,0,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,1,0,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,1,0,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,1,0,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,1,0,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,1,0,5b379a72-8605-4e88-84cb-14272a3b8f5f,5b379a72-8605-4e88-84cb-14272a3b8f5f,1,0,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,1,0,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,1,0,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,1,0,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,1,0,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,1,0,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,1,0,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,1,0,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,1,0,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,1,0,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,1,0,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,1,0,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,1,0,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,1,0,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,1,0,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,1,0,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,1,0,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,1,0,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,1,0,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,1,0,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,1,0,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,1,0,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,1,0,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,1,0,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,1,0,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,1,0,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,1,0,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,1,0,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,1,0,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,1,0,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,1,0,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,1,0,616cd2cc-eaf4-4586-bca1-c044429b491a,616cd2cc-eaf4-4586-bca1-c044429b491a,1,0,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,1,0,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,1,0,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,1,0,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,1,0,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,1,0,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,1,0,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,1,0,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,1,0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,1,0,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,1,0,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,1,0,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,1,0,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,1,0,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,1,0,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,1,0,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,1,0,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,1,0,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,1,0,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,1,0,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,1,0,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,1,0,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,1,0,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,1,0,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,1,0,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,1,0,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,1,0,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,1,0,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,1,0,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,1,0,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,1,0,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,1,0,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,1,0,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,1,0,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,1,0,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,1,0,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,1,0,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,1,0,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,1,0,5189beb9-b939-4f97-aca0-c2f3492ac8b9,5189beb9-b939-4f97-aca0-c2f3492ac8b9,1,0,0b139d7a-b583-4082-b9f2-8f3fb444bd51,0b139d7a-b583-4082-b9f2-8f3fb444bd51,1,0,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,1,0,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,1,0,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,1,0,0761c32c-1de6-4c40-9178-64aeb46b6622,0761c32c-1de6-4c40-9178-64aeb46b6622,1,0,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,1,0,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,1,0,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,1,0,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,1,0,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,1,0,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,1,0,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,1,0,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,1,0,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,1,0,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,1,0,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,1,0,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,1,0,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,1,0,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,1,0,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,1,0,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,1,0,b9b24093-810c-4158-846d-e2c7aea54d36,b9b24093-810c-4158-846d-e2c7aea54d36,1,0,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,1,0,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,1,0,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,1,0,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,1,0,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,1,0,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,1,0,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,1,0,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,1,0,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,1,0,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,1,0,8ce759ff-f579-461c-bb1e-9ac2b01e88df,8ce759ff-f579-461c-bb1e-9ac2b01e88df,1,0,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,1,0,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,1,0,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,1,0,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,1,0,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1,0,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,1,0,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,1,0,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,1,0,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,1,0,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,1,0,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,1,0,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,1,0,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,1,0,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,1,0,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,1,0,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,1,0,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,1,0,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1,0,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,1,0,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1,0,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,1,0,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,1,0,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,1,0,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,1,0,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,1,0,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,1,0,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1,0,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,1,0,28080e64-cd09-410d-9e3e-3ffdb43d3ace,28080e64-cd09-410d-9e3e-3ffdb43d3ace,1,0,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,1,0,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,1,0,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,1,0,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,1,0,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,1,0,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,1,0,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,1,0,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,1,0,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,1,0,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,1,0,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,1,0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,1,0,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,1,0,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,1,0,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,1,0,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,1,0,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,1,0,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,1,0,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,1,0,d3443b92-32f5-4ac0-8356-062647efe3d8,d3443b92-32f5-4ac0-8356-062647efe3d8,1,0,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,1,0,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,1,0,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,1,0,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,1,0,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,1,0,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,1,0,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,1,0,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,1,0,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,1,0,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,1,0,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,1,0,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,1,0,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,1,0,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,1,0,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,1,0,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,1,0,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,1,0,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,1,0,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,1,0,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,1,0,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,1,0,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,1,0,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,1,0,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,1,0,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,1,0,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,1,0,aa63c001-c3da-4179-8fd8-fe2ff510511e,aa63c001-c3da-4179-8fd8-fe2ff510511e,1,0,b2e894b0-6443-4a52-95b6-6b564f809680,b2e894b0-6443-4a52-95b6-6b564f809680,1,0,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,1,0,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,1,0,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,1,0,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,1,0,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,1,0,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,1,0,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,1,0,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,1,0,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,1,0,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,1,0,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,1,0,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,1,0,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,1,0,8a8848b8-345a-452d-bf95-28f9c91c7e95,8a8848b8-345a-452d-bf95-28f9c91c7e95,1,0,a9441693-87ca-4157-98e1-63375852755c,a9441693-87ca-4157-98e1-63375852755c,1,0,6303ea55-e8ed-4acc-9717-941eefafc2a9,6303ea55-e8ed-4acc-9717-941eefafc2a9,1,0,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,1,0,d0b17206-3949-4513-a47f-02e1a8ba369a,d0b17206-3949-4513-a47f-02e1a8ba369a,1,0,cb4f20d4-13e6-4c27-b491-da7931f4bf05,cb4f20d4-13e6-4c27-b491-da7931f4bf05,1,0,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,1,0,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,1,0,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,1,0,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,1,0,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,1,0,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,1,0,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,1,0,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,1,0,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,1,0,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,1,0,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,1,0,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,1,0,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,1,0,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,1,0,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,1,0,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,1,0,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,1,0,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,1,0,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,1,0,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,1,0,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,1,0,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,1,0,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,1,0,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,1,0,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,1,0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,1,0,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,1,0,94bc76ae-72a0-418f-98c4-ae0a0326a2da,94bc76ae-72a0-418f-98c4-ae0a0326a2da,1,0,784475ff-eec5-462a-a511-ba31f8374c2e,784475ff-eec5-462a-a511-ba31f8374c2e,1,0,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,1,0,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,1,0,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,1,0,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,1,0,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,1,0,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,1,0,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,1,0,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,1,0,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,1,0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,1,0,356a8091-4c0b-41d0-b8d2-963b3a807469,356a8091-4c0b-41d0-b8d2-963b3a807469,1,0,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,1,0,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,1,0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,1,0,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,1,0,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,1,0,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,1,0,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,1,0,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,1,0,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,1,0,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,1,0,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1,0,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,1,0,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,1,0,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,1,0,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,1,0,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,1,0,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,1,0,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,1,0,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,1,0,ee008096-1ae8-4a64-9d3d-14cb15c8be70,ee008096-1ae8-4a64-9d3d-14cb15c8be70,1,0,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,1,0,a4754a7b-971f-4517-963e-b7cb9d57f86d,a4754a7b-971f-4517-963e-b7cb9d57f86d,1,0,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,1,0,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,1,0,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,1,0,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,1,0,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,1,0,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,1,0,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,1,0,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,1,0,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,1,0,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,1,0,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,1,0,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,1,0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,1,0,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,1,0,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,1,0,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,1,0,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,1,0,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,1,0,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,1,0,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,1,0,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,1,0,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,1,0,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,1,0,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,1,0,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,1,0,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,1,0,733d4494-01e2-46f5-a49b-f289267a90c9,733d4494-01e2-46f5-a49b-f289267a90c9,1,0,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,1,0,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,1,0,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,1,0,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,1,0,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,1,0,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,1,0,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,1,0,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,1,0,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,1,0,1e14d062-1d5a-4939-8ce6-4d9514990376,1e14d062-1d5a-4939-8ce6-4d9514990376,1,0,f86f24d2-9a83-47ae-9d95-b49a0a295770,f86f24d2-9a83-47ae-9d95-b49a0a295770,1,0,8368e1fa-da0c-4a9b-9d50-a122933c7899,8368e1fa-da0c-4a9b-9d50-a122933c7899,1,0,37986729-a275-4e86-8613-faee9a4f2525,37986729-a275-4e86-8613-faee9a4f2525,1,0,5814cb3a-8f7c-45b4-a590-b69d4912120f,5814cb3a-8f7c-45b4-a590-b69d4912120f,1,0,f06c8396-65ec-4ece-aed0-d45b2d8969b5,f06c8396-65ec-4ece-aed0-d45b2d8969b5,1,0,1faeab7f-7bd7-496d-8882-4aab6c425854,1faeab7f-7bd7-496d-8882-4aab6c425854,1,0,af922fb8-a99c-4154-89fe-d30a4d13024a,af922fb8-a99c-4154-89fe-d30a4d13024a,1,0,24c2f463-2bbb-471f-a409-507afad52caf,24c2f463-2bbb-471f-a409-507afad52caf,1,0,cbb07013-9ae1-43ec-8142-a724d788cb67,cbb07013-9ae1-43ec-8142-a724d788cb67,1,0,2403ac84-b513-4aa0-9a68-8d1ad705ce24,2403ac84-b513-4aa0-9a68-8d1ad705ce24,1,0,952b49e0-e1a1-4130-8fb2-083e3988255c,952b49e0-e1a1-4130-8fb2-083e3988255c,1,0,367b227f-f66e-4cec-9fc3-850bca8bc6c8,367b227f-f66e-4cec-9fc3-850bca8bc6c8,1,0,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1,0,7fcb9d79-1144-4099-8d7f-309d3bf045a5,7fcb9d79-1144-4099-8d7f-309d3bf045a5,1,0,db418313-8583-48a9-9fec-e2c5de4fdf76,db418313-8583-48a9-9fec-e2c5de4fdf76,1,0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,1,0,2f26970e-b964-43e2-8d6d-999bbc577689,2f26970e-b964-43e2-8d6d-999bbc577689,1,0,65a50026-88e7-45dd-bb0c-f212218ca093,65a50026-88e7-45dd-bb0c-f212218ca093,1,0,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,1,0,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1,0,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,1,0,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,1,0,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,1,0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,1,0,01a1fd57-6c09-4a5b-9f75-da4366159423,01a1fd57-6c09-4a5b-9f75-da4366159423,1,0,71d79b25-3682-4f2c-b6b2-a307e3e72844,71d79b25-3682-4f2c-b6b2-a307e3e72844,1,0,45c1ed0d-202e-4289-820f-e1de0f544386,45c1ed0d-202e-4289-820f-e1de0f544386,1,0,e889e80f-97c9-43c6-8268-d652764fcafb,e889e80f-97c9-43c6-8268-d652764fcafb,1,0,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,1,0,95ccaaf2-f6ca-4540-8a39-3c90121c4236,95ccaaf2-f6ca-4540-8a39-3c90121c4236,1,0,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,1,0,f47a9bec-2a9f-4955-a432-acb63a5b0e46,f47a9bec-2a9f-4955-a432-acb63a5b0e46,1,0,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1,0,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,1,0,b787818e-5572-4ef2-ba54-1e9b69569824,b787818e-5572-4ef2-ba54-1e9b69569824,1,0,1e13bd37-61b5-4901-a607-e00e5d1900a8,1e13bd37-61b5-4901-a607-e00e5d1900a8,1,0,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,1,0,231d7b21-c00c-4782-b610-d56593be436f,231d7b21-c00c-4782-b610-d56593be436f,1,0,79250d1a-77ff-4015-a5b5-83460b1611e2,79250d1a-77ff-4015-a5b5-83460b1611e2,1,0,60018ee0-71ec-4975-a95d-f6f188748ff2,60018ee0-71ec-4975-a95d-f6f188748ff2,1,0,68d35468-279a-43ef-9d71-fed44a792177,68d35468-279a-43ef-9d71-fed44a792177,1,0,77bec3d8-582a-4156-861b-4902008f014c,77bec3d8-582a-4156-861b-4902008f014c,1,0,bf3304c0-5078-478f-bbf8-6178264c5f26,bf3304c0-5078-478f-bbf8-6178264c5f26,1,0,2ad1caba-7a89-4389-934f-419970260961,2ad1caba-7a89-4389-934f-419970260961,1,0,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,1,0,f88c4a72-368c-4f45-bb2c-d18f214a5079,f88c4a72-368c-4f45-bb2c-d18f214a5079,1,0,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,1,0,9dc2e313-c086-4fd9-83e8-911859ef480d,9dc2e313-c086-4fd9-83e8-911859ef480d,1,0,8a14ced0-9e45-4b3a-a135-11413c3a33c2,8a14ced0-9e45-4b3a-a135-11413c3a33c2,1,0,af7377db-0b27-42f7-a639-e2feb4015412,af7377db-0b27-42f7-a639-e2feb4015412,1,0,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,1,0,ab7db146-f26a-418a-8c45-e2513bf84e08,ab7db146-f26a-418a-8c45-e2513bf84e08,1,0,ece3bd8d-6616-44d5-9c14-6b3557738872,ece3bd8d-6616-44d5-9c14-6b3557738872,1,0,663a80ba-b97e-4265-a627-4a7d273f9472,663a80ba-b97e-4265-a627-4a7d273f9472,1,0,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,1,0,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,1,0,4893ad50-df19-4d86-9469-40491ba733c9,4893ad50-df19-4d86-9469-40491ba733c9,1,0,25a65c1e-8e67-4135-843d-1e0da72dfd64,25a65c1e-8e67-4135-843d-1e0da72dfd64,1,0,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,1,0,29a6416e-b0f5-4111-8f86-1ba80244e73a,29a6416e-b0f5-4111-8f86-1ba80244e73a,1,0,0f49085a-9b83-4256-be60-f341b2ef132e,0f49085a-9b83-4256-be60-f341b2ef132e,1,0,f44c66d6-cfe2-482f-a921-de3db3cd09ea,f44c66d6-cfe2-482f-a921-de3db3cd09ea,1,0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,1,0,c521bd61-386e-41c8-bcc3-29d54b63cc32,c521bd61-386e-41c8-bcc3-29d54b63cc32,1,0,d46e3424-6d30-4229-9a56-ab256517534a,d46e3424-6d30-4229-9a56-ab256517534a,1,0,09d3633d-8e8c-47f3-8f34-d70eb94577e1,09d3633d-8e8c-47f3-8f34-d70eb94577e1,1,0,fe868143-363b-4da1-889b-98d4dd10a1fd,fe868143-363b-4da1-889b-98d4dd10a1fd,1,0,b791a549-ae94-46f2-8f04-771fdeb4cc54,b791a549-ae94-46f2-8f04-771fdeb4cc54,1,0,4681cb63-c581-4c08-b18c-016d9b478ef2,4681cb63-c581-4c08-b18c-016d9b478ef2,1,0,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,1,0,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,1,0,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,1,0,1d429511-9446-4102-95f4-df676125e14c,1d429511-9446-4102-95f4-df676125e14c,1,0,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,1,0,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,1,0,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,1,0,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,1,0,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,1,0,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,1,0,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,1,0,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,1,0,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,1,0,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,1,0,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,1,0,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,1,0,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,1,0,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,1,0,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,1,0,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,1,0,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,1,0,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,1,0,eefa9859-4168-4a10-923f-e4a713c99a3b,eefa9859-4168-4a10-923f-e4a713c99a3b,1,0,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,1,0,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,1,0,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,1,0,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,1,0,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,1,0,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,1,0,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,1,0,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,1,0,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,1,0,39bddcde-697c-4e77-adfd-e4a77529ea97,39bddcde-697c-4e77-adfd-e4a77529ea97,1,0,a3b15381-bf9b-4b26-96eb-392fa2cc8223,a3b15381-bf9b-4b26-96eb-392fa2cc8223,1,0,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,1,0,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,1,0,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,1,0,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,1,0,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,1,0,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,1,0,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,1,0,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,1,0,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,1,0,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,1,0,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,1,0,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,1,0,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,1,0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,1,0,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,1,0,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,1,0,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,1,0,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,1,0,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,1,0,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,1,0,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,1,0,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,1,0,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,1,0,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,1,0,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,1,0,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,1,0,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,1,0,c49cef0d-3b71-4e66-9e35-72b94920dae5,c49cef0d-3b71-4e66-9e35-72b94920dae5,1,0,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,1,0,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,1,0,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,1,0,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,1,0,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,1,0,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,1,0,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,1,0,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,1,0,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,1,0,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,1,0,b363f72f-3629-453c-9f7d-9828ef6de733,b363f72f-3629-453c-9f7d-9828ef6de733,1,0,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,1,0,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,1,0,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,1,0,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,1,0,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,1,0,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,1,0,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,1,0,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,1,0,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,1,0,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,1,0,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,1,0,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,1,0,dd0610c8-cd87-4fe2-8a1f-70157132785b,dd0610c8-cd87-4fe2-8a1f-70157132785b,1,0,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,1,0,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,1,0,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,1,0,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,1,0,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,1,0,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,1,0,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,1,0,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,1,0,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,1,0,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,1,0,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,1,0,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,1,0,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,1,0,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,1,0,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,1,0,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,1,0,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,1,0,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,1,0,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,1,0,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,1,0,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,1,0,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,1,0,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,1,0,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,1,0,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,1,0,02abb5e3-9d4e-4c45-af19-71796966ed19,02abb5e3-9d4e-4c45-af19-71796966ed19,1,0,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,1,0,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,1,0,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,1,0,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,1,0,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,1,0,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,1,0,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,1,0,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,1,0,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,1,0,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,1,0,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,1,0,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,1,0,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,1,0,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,1,0,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,1,0,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,1,0,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,1,0,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,1,0,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,1,0,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,1,0,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,1,0,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,1,0,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,1,0,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,1,0,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,1,0,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,1,0,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,1,0,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,1,0,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,1,0,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,1,0,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,1,0,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,1,0,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,1,0,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,1,0,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,1,0,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,1,0,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,1,0,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,1,0,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,1,0,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,1,0,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,1,0,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,1,0,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,1,0,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,1,0,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,1,0,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,1,0,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,1,0,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,1,0,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,1,0,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,1,0,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,1,0,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,1,0,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,1,0,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,1,0,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,1,0,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,1,0,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,1,0,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,1,0,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,1,0,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,1,0,d754ed75-2a32-4b86-a153-7b50c39f9836,d754ed75-2a32-4b86-a153-7b50c39f9836,1,0,b81f3ee1-66f7-4626-a35b-ef85388c678e,b81f3ee1-66f7-4626-a35b-ef85388c678e,1,0,2ad04793-c162-4915-a260-ca4da535cdac,2ad04793-c162-4915-a260-ca4da535cdac,1,0,6568d853-dfe5-4064-aa73-c1f546e951b4,6568d853-dfe5-4064-aa73-c1f546e951b4,1,0,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,1,0,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,1,0,bbe718b2-6b4c-4d78-a408-5369d356a1e6,bbe718b2-6b4c-4d78-a408-5369d356a1e6,1,0,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,1,0,eb7623df-b4e3-4272-9f92-42a9214f9f17,eb7623df-b4e3-4272-9f92-42a9214f9f17,1,0,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,1,0,b08fd921-c3d6-44eb-9401-fec5acab5d22,b08fd921-c3d6-44eb-9401-fec5acab5d22,1,0,1611855a-abf4-4269-aed3-3f78dce7bea5,1611855a-abf4-4269-aed3-3f78dce7bea5,1,0,c5bd277c-b258-43af-9c80-3e328b1581f5,c5bd277c-b258-43af-9c80-3e328b1581f5,1,0,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,1,0,f9cefef4-2182-42ca-93ef-b6a51d6555cc,f9cefef4-2182-42ca-93ef-b6a51d6555cc,1,0,71e1c7de-7367-424c-ae07-6ec04b408b83,71e1c7de-7367-424c-ae07-6ec04b408b83,1,0,b3956392-199c-4934-80d1-8cdab453d879,b3956392-199c-4934-80d1-8cdab453d879,1,0,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,1,0,d1bd7448-aa5f-43fc-9735-224f36960c3e,d1bd7448-aa5f-43fc-9735-224f36960c3e,1,0,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,1,0,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,1,0,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1,0,8227471b-8ffb-4ba7-b4da-b21570582876,8227471b-8ffb-4ba7-b4da-b21570582876,1,0,25864028-1a53-4a8d-b6e4-189fa62c62f5,25864028-1a53-4a8d-b6e4-189fa62c62f5,1,0,e923beae-0bd8-4119-a802-fd6bfb729f10,e923beae-0bd8-4119-a802-fd6bfb729f10,1,0,d40bb9f7-3397-40ad-b658-f8942bdbbaee,d40bb9f7-3397-40ad-b658-f8942bdbbaee,1,0,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,1,0,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,1,0,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,1,0,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,1,0,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,1,0,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,1,0,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,1,0,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,1,0,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,1,0,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,1,0,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,1,0,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,1,0,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,1,0,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,1,0,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,1,0,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,1,0,61dc318a-c17d-402e-bf64-a0c0a63a1c93,61dc318a-c17d-402e-bf64-a0c0a63a1c93,1,0,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,1,0,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,1,0,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,1,0,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,1,0,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,1,0,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,1,0,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,1,0,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,1,0,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,1,0,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,1,0,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,1,0,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,1,0,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,1,0,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,1,0,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1,0,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,1,0,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,1,0,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,1,0,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,1,0,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,1,0,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,1,0,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,1,0,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,1,0,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,1,0,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,1,0,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,1,0,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,1,0,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,1,0,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,1,0,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,1,0,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,1,0,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,1,0,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,1,0,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,1,0,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,1,0,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,1,0,6852c584-d989-418d-8d18-255492891ef0,6852c584-d989-418d-8d18-255492891ef0,1,0,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,1,0,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,1,0,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,1,0,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,1,0,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,1,0,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,1,0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,1,0,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,1,0,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,1,0,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,1,0,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,1,0,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,1,0,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,1,0,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,1,0,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,1,0,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,1,0,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,1,0,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,1,0,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,1,0,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,1,0,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,1,0,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,1,0,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,1,0,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,1,0,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,1,0,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,1,0,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,1,0,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,1,0,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1,0,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,1,0,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,1,0,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,1,0,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,1,0,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1,0,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,1,0,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,1,0,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,1,0,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,1,0,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,1,0,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,1,0,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,1,0,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,1,0,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,1,0,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,1,0,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,1,0,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,1,0,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,1,0,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,1,0,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,1,0,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,1,0,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,1,0,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,1,0,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,1,0,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,1,0,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,1,0,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,1,0,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,1,0,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,1,0,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,1,0,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,1,0,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,1,0,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,1,0,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,1,0,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,1,0,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,1,0,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,1,0,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,1,0,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,1,0,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,1,0,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,1,0,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,1,0,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,1,0,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,1,0,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,1,0,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,1,0,8525d945-08aa-4928-8dca-4e172ea94328,8525d945-08aa-4928-8dca-4e172ea94328,1,0,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,1,0,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,1,0,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,1,0,82be906c-bb06-40ea-b908-54574b0b4848,82be906c-bb06-40ea-b908-54574b0b4848,1,0,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,1,0,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,1,0,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1,0,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,1,0,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,1,0,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,1,0,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,1,0,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,1,0,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,1,0,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,1,0,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,1,0,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,1,0,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,1,0,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,1,0,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,1,0,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,1,0,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,1,0,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,1,0,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,1,0,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,1,0,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,1,0,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,1,0,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,1,0,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,1,0,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,1,0,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,1,0,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,1,0,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,1,0,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,1,0,03f32b08-1b71-47cb-ba1d-965037df4d64,03f32b08-1b71-47cb-ba1d-965037df4d64,1,0,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,1,0,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,1,0,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,1,0,19a0b881-302e-4d0e-ace0-29a9d8379a48,19a0b881-302e-4d0e-ace0-29a9d8379a48,1,0,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,1,0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,1,0,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,1,0,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,1,0,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,1,0,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,1,0,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,1,0,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,1,0,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,1,0,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,1,0,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,1,0,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,1,0,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,1,0,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,1,0,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,1,0,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,1,0,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,1,0,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,1,0,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,1,0,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,1,0,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,1,0,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,1,0,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,1,0,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,1,0,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,1,0,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,1,0,f9229c3e-4a47-49a4-8b14-908218012ff7,f9229c3e-4a47-49a4-8b14-908218012ff7,1,0,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,1,0,b9743978-ba6d-4892-bb32-f24d4a47dd50,b9743978-ba6d-4892-bb32-f24d4a47dd50,1,0,c43accb9-f33d-437f-b305-0595f8fe3032,c43accb9-f33d-437f-b305-0595f8fe3032,1,0,084a398b-836e-424c-af93-22aa39d5a15a,084a398b-836e-424c-af93-22aa39d5a15a,1,0,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,1,0,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,1,0,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,1,0,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,1,0,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,1,0,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,1,0,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,1,0,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,1,0,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,1,0,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,1,0,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,1,0,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,1,0,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,1,0,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,1,0,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,1,0,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,1,0,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,1,0,8be10d88-8c37-4444-9c89-6cbbe9913bda,8be10d88-8c37-4444-9c89-6cbbe9913bda,1,0,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,1,0,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,1,0,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,1,0,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,1,0,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,1,0,cb1d4a41-20a9-4d76-8798-d47d8858bff1,cb1d4a41-20a9-4d76-8798-d47d8858bff1,1,0,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,1,0,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,1,0,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,1,0,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,1,0,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,1,0,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,1,0,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,1,0,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,1,0,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,1,0,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,1,0,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,1,0,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,1,0,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,1,0,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,1,0,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,1,0,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,1,0,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,1,0,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,1,0,8c241467-76f7-4161-a8a1-5da4a6576b75,8c241467-76f7-4161-a8a1-5da4a6576b75,1,0,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1,0,fd7e5257-024c-46de-9ff3-edd302fadba5,fd7e5257-024c-46de-9ff3-edd302fadba5,1,0,a4168057-d99f-4b55-b762-214f95ae3a30,a4168057-d99f-4b55-b762-214f95ae3a30,1,0,ab4fe549-1c07-42d9-b412-8b89ed115591,ab4fe549-1c07-42d9-b412-8b89ed115591,1,0,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,1,0,b49c589d-b45d-4aff-8899-72cfe433e9a6,b49c589d-b45d-4aff-8899-72cfe433e9a6,1,0,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,1,0,273ad3f7-c645-434d-93b0-e832134f3043,273ad3f7-c645-434d-93b0-e832134f3043,1,0,d320803b-1de4-4e66-b455-0afe39be5c41,d320803b-1de4-4e66-b455-0afe39be5c41,1,0,67e85b9a-a138-49ea-b474-04475f0f8c90,67e85b9a-a138-49ea-b474-04475f0f8c90,1,0,6a4ef611-7a8c-4b60-b497-db6b7de6ec44,6a4ef611-7a8c-4b60-b497-db6b7de6ec44,1,0,7e69b9e2-c673-4f81-bb9e-70ac962674e2,7e69b9e2-c673-4f81-bb9e-70ac962674e2,1,0,a43bb3ed-e439-4037-976a-68e37792567d,a43bb3ed-e439-4037-976a-68e37792567d,1,0,0147553c-fbce-42d3-a151-16c110c27d84,0147553c-fbce-42d3-a151-16c110c27d84,1,0,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,1,0,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,1,0,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,1,0,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,1,0,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,1,0,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,1,0,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,1,0,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,1,0,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,1,0,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,1,0,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,1,0,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,1,0,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,1,0,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,1,0,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,1,0,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,1,0,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,1,0,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,1,0,98aa8a80-29fa-4a54-8d0e-90d413d63da1,98aa8a80-29fa-4a54-8d0e-90d413d63da1,1,0,60af0c11-852e-4b45-afb7-251d75a87150,60af0c11-852e-4b45-afb7-251d75a87150,1,0,37e81463-a558-4b03-b0e4-82ac0e99c80c,37e81463-a558-4b03-b0e4-82ac0e99c80c,1,0,8be35c43-32e6-418d-b3d6-e53ef56babb7,8be35c43-32e6-418d-b3d6-e53ef56babb7,1,0,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,1,0,935d01e1-232b-480e-a6bf-c21c617c6348,935d01e1-232b-480e-a6bf-c21c617c6348,1,0,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,1,0,05c702a1-2c74-45d5-b2ee-fdd795b0945a,05c702a1-2c74-45d5-b2ee-fdd795b0945a,1,0,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,1,0,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,1,0,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,1,0,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,1,0,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,1,0,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,1,0,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,1,0,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,1,0,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,1,0,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,1,0,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,1,0,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,1,0,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,1,0,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,1,0,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,1,0,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,1,0,2f9c347d-ee82-49f2-a5eb-97f55374856f,2f9c347d-ee82-49f2-a5eb-97f55374856f,1,0,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,1,0,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,1,0,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,1,0,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,1,0,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,1,0,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,1,0,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,1,0,a89ee622-6942-411a-8566-f03d139c9e5b,a89ee622-6942-411a-8566-f03d139c9e5b,1,0,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,1,0,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,1,0,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,1,0,198ea989-5001-47ac-86b8-aa2585a5f7d7,198ea989-5001-47ac-86b8-aa2585a5f7d7,1,0,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,1,0,fb84c5f7-11da-4b17-979e-41e27a74e789,fb84c5f7-11da-4b17-979e-41e27a74e789,1,0,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,1,0,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,1,0,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,1,0,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,1,0,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,1,0,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,1,0,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,1,0,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,1,0,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,1,0,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,1,0,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,1,0,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,1,0,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,1,0,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,1,0,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,1,0,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,1,0,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,1,0,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,1,0,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,1,0,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,1,0,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,1,0,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,1,0,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,1,0,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,1,0,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,1,0,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,1,0,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,1,0,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,1,0,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,1,0,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,1,0,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,1,0,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,1,0,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,1,0,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,1,0,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,1,0,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,1,0,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,1,0,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,1,0,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,1,0,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,1,0,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,1,0,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,1,0,5a94a307-3f54-4753-8ef5-ce9f88417827,5a94a307-3f54-4753-8ef5-ce9f88417827,1,0,0f09b6b8-72ac-4461-96c4-683be403e2ff,0f09b6b8-72ac-4461-96c4-683be403e2ff,1,0,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,1,0,19d1d74a-de5f-475a-896c-a32b7d28f918,19d1d74a-de5f-475a-896c-a32b7d28f918,1,0,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,1,0,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,1,0,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,1,0,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,1,0,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,1,0,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,1,0,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,1,0,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,1,0,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,1,0,e6a53f32-0b7d-499d-844e-fb8df13a3519,e6a53f32-0b7d-499d-844e-fb8df13a3519,1,0,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,1,0,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,1,0,2c5a56d3-386e-45df-adc2-4471f52f9bdc,2c5a56d3-386e-45df-adc2-4471f52f9bdc,1,0,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,1,0,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,1,0,22474ca3-565b-4b67-a5b4-b0b959306d10,22474ca3-565b-4b67-a5b4-b0b959306d10,1,0,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1,0,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,1,0,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,1,0,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,1,0,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,1,0,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,1,0,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,1,0,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,1,0,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,1,0,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,1,0,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,1,0,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,1,0,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,1,0,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,1,0,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,1,0,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,1,0,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,1,0,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,1,0,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,1,0,3e44d463-f253-4a64-8d68-631fcb66935c,3e44d463-f253-4a64-8d68-631fcb66935c,1,0,653d6483-029b-4453-a7d0-3a3c6d9d0b05,653d6483-029b-4453-a7d0-3a3c6d9d0b05,1,0,ac507771-50bd-4f8b-b72f-5954562c9131,ac507771-50bd-4f8b-b72f-5954562c9131,1,0,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,1,0,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,1,0,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,1,0,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,1,0,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,1,0,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,1,0,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,1,0,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,1,0,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,1,0,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,1,0,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,1,0,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,1,0,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,1,0,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,1,0,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,1,0,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,1,0,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,1,0,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1,0,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,1,0,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,1,0,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,1,0,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,1,0,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,1,0,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,1,0,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,1,0,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,1,0,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,1,0,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,1,0,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,1,0,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,1,0,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,1,0,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,1,0,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,1,0,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1,0,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,1,0,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,1,0,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,1,0,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,1,0,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,1,0,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,1,0,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,1,0,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,1,0,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,1,0,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,1,0,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,1,0,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,1,0,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,1,0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,1,0,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,1,0,7e4afed8-5c56-4765-bcd0-a40e6121ba22,7e4afed8-5c56-4765-bcd0-a40e6121ba22,1,0,155660a1-8a63-4562-a715-d75a8af7176b,155660a1-8a63-4562-a715-d75a8af7176b,1,0,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,1,0,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,1,0,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,1,0,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,1,0,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,1,0,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,1,0,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,1,0,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,1,0,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,1,0,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,1,0,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,1,0,fc65918a-2ad1-47b1-980d-5afe63579964,fc65918a-2ad1-47b1-980d-5afe63579964,1,0,6b608ab2-97f1-4f57-af74-3f940283ba16,6b608ab2-97f1-4f57-af74-3f940283ba16,1,0,cc9c3d1b-ba17-4257-a448-376c15670f66,cc9c3d1b-ba17-4257-a448-376c15670f66,1,0,c6fad2a9-136a-4a18-b4ab-bcb3ff573403,c6fad2a9-136a-4a18-b4ab-bcb3ff573403,1,0,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,1,0,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,1,0,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,1,0,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,1,0,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,1,0,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,1,0,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,1,0,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,1,0,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,1,0,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,1,0,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,1,0,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,1,0,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,1,0,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,1,0,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,1,0,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,1,0,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,1,0,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,1,0,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,1,0,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,1,0,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,1,0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,1,0,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1,0,00605607-03ab-43fc-ba08-9fc32f582d0a,00605607-03ab-43fc-ba08-9fc32f582d0a,1,0,5ab0a910-74ab-4af0-b5a3-40845a789fde,5ab0a910-74ab-4af0-b5a3-40845a789fde,1,0,bb659006-c11e-4427-8d86-229ba43ef679,bb659006-c11e-4427-8d86-229ba43ef679,1,0,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,1,0,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,1,0,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,1,0,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,1,0,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,1,0,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,1,0,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,1,0,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,1,0,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,1,0,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,1,0,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,1,0,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1,0,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,1,0,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,1,0,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,1,0,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,1,0,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,1,0,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,1,0,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,1,0,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,1,0,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,1,0,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,1,0,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,1,0,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,1,0,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,1,0,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,1,0,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,1,0,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,1,0,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,1,0,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,1,0,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,1,0,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,1,0,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,1,0,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,1,0,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,1,0,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,1,0,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,1,0,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,1,0,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,1,0,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,1,0,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,1,0,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,1,0,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,1,0,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,1,0,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,1,0,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,1,0,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,1,0,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,1,0,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,1,0,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,1,0,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,1,0,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,1,0,00696255-ea14-4fee-8633-0962f3c441d1,00696255-ea14-4fee-8633-0962f3c441d1,1,0,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,1,0,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,1,0,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,1,0,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,1,0,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,1,0,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,1,0,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,1,0,fef27478-ddfd-4ad9-8161-148761f29698,fef27478-ddfd-4ad9-8161-148761f29698,1,0,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,1,0,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,1,0,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,1,0,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,1,0,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,1,0,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,1,0,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,1,0,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,1,0,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1,0,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,1,0,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,1,0,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,1,0,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,1,0,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,1,0,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,1,0,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,1,0,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,1,0,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,1,0,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,1,0,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,1,0,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,1,0,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,1,0,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,1,0,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,1,0,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,1,0,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,1,0,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,1,0,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,1,0,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,1,0,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,1,0,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,1,0,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,1,0,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,1,0,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,1,0,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,1,0,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,1,0,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,1,0,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,1,0,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,1,0,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,1,0,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,1,0,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,1,0,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,1,0,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,1,0,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,1,0,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,1,0,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,1,0,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,1,0,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,1,0,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,1,0,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,1,0,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,1,0,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,1,0,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,1,0,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,1,0,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,1,0,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,1,0,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,1,0,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,1,0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,1,0,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,1,0,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,1,0,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,1,0,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,1,0,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,1,0,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,1,0,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,1,0,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,1,0,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,1,0,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,1,0,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,1,0,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,1,0,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,1,0,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,1,0,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,1,0,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,1,0,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,1,0,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,1,0,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,1,0,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,1,0,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,1,0,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,1,0,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,1,0,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,1,0,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,1,0,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,1,0,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,1,0,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,1,0,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,1,0,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,1,0,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,1,0,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,1,0,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,1,0,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,1,0,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,1,0,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,1,0,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,1,0,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,1,0,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1,0,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,1,0,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,1,0,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,1,0,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,1,0,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,1,0,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1,0,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,1,0,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,1,0,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,1,0,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,1,0,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,1,0,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,1,0,3afe11f6-7424-4b41-a42f-91db33756fa3,3afe11f6-7424-4b41-a42f-91db33756fa3,1,0,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,1,0,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,1,0,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,1,0,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,1,0,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,1,0,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,1,0,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,1,0,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,1,0,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,1,0,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,1,0,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,1,0,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,1,0,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,1,0,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,1,0,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,1,0,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,1,0,97ec899d-a2a0-4691-83ff-25b78dd49ef6,97ec899d-a2a0-4691-83ff-25b78dd49ef6,1,0,411db885-f761-44e5-bdd1-9fdf9e741ac1,411db885-f761-44e5-bdd1-9fdf9e741ac1,1,0,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,1,0,3c305f89-e453-46c7-987b-f01dc964efdb,3c305f89-e453-46c7-987b-f01dc964efdb,1,0,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1,0,269ada84-71a9-4b4b-9604-caa40c5b7067,269ada84-71a9-4b4b-9604-caa40c5b7067,1,0,ea13607a-3e05-4468-9932-41b6d51cfedf,ea13607a-3e05-4468-9932-41b6d51cfedf,1,0,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,1,0,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,1,0,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,1,0,43e37533-ed38-4000-a387-5749f8d9aaf3,43e37533-ed38-4000-a387-5749f8d9aaf3,1,0,e93bdb44-64b3-43d8-b15a-c561dbb91974,e93bdb44-64b3-43d8-b15a-c561dbb91974,1,0,a7c7c835-5402-4bdd-a0e3-d21746174d5a,a7c7c835-5402-4bdd-a0e3-d21746174d5a,1,0,07e81872-afac-4720-86b4-91e7bf4a2881,07e81872-afac-4720-86b4-91e7bf4a2881,1,0,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,1,0,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,1,0,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,1,0,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,1,0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,1,0,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,1,0,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,1,0,39598414-9c1d-46ec-a534-8bd43e622e45,39598414-9c1d-46ec-a534-8bd43e622e45,1,0,b552c510-4fd4-4c16-9022-dc5babcafc52,b552c510-4fd4-4c16-9022-dc5babcafc52,1,0,3892c06d-28f1-4238-a929-201316cac1ed,3892c06d-28f1-4238-a929-201316cac1ed,1,0,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,1,0,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,1,0,1f587ff1-95a4-4f45-85b4-22bb97011177,1f587ff1-95a4-4f45-85b4-22bb97011177,1,0,567c68fd-74c7-4b6e-9119-56ac8d78073c,567c68fd-74c7-4b6e-9119-56ac8d78073c,1,0,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,1,0,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,1,0,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,1,0,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,1,0,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,1,0,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,1,0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,1,0,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,1,0,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,1,0,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,1,0,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,1,0,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,1,0,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,1,0,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,1,0,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,1,0,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,1,0,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,1,0,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,1,0,d5a73869-381e-4878-8db7-596643937202,d5a73869-381e-4878-8db7-596643937202,1,0,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,1,0,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,1,0,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,1,0,11a93e3a-3c5b-4242-913c-02474a383344,11a93e3a-3c5b-4242-913c-02474a383344,1,0,ddd2861c-592b-4879-b9de-4b05a22c0b43,ddd2861c-592b-4879-b9de-4b05a22c0b43,1,0,5b383021-a800-4f0b-b8a3-d344389bff6c,5b383021-a800-4f0b-b8a3-d344389bff6c,1,0,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,1,0,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,1,0,8a57d427-a34e-4121-84e6-1a86a9f9092d,8a57d427-a34e-4121-84e6-1a86a9f9092d,1,0,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,1,0,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,1,0,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,1,0,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,1,0,68447105-a784-4803-8eb8-3701b0fc819d,68447105-a784-4803-8eb8-3701b0fc819d,1,0,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,1,0,59dee70d-aeca-470a-b3c4-e43bb16c5753,59dee70d-aeca-470a-b3c4-e43bb16c5753,1,0,82777e92-0681-44bf-b51e-4d98fcd5d5bd,82777e92-0681-44bf-b51e-4d98fcd5d5bd,1,0,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,1,0,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,1,0,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,1,0,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,1,0,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,1,0,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,1,0,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,1,0,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,1,0,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,1,0,325bacdd-793f-47d8-b987-57e9d5f2782b,325bacdd-793f-47d8-b987-57e9d5f2782b,1,0,80395d47-70d7-4d8d-9b18-93283fba80c2,80395d47-70d7-4d8d-9b18-93283fba80c2,1,0,8b621ec9-24c9-4166-90ce-29c5ad30f78b,8b621ec9-24c9-4166-90ce-29c5ad30f78b,1,0,cc98670a-7b18-4973-b211-90261c5c8c10,cc98670a-7b18-4973-b211-90261c5c8c10,1,0,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,1,0,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,1,0,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,1,0,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,1,0,62957889-503f-4923-a372-29776dc3b5e5,62957889-503f-4923-a372-29776dc3b5e5,1,0,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,1,0,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,1,0,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,1,0,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,1,0,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,1,0,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,1,0,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,1,0,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,1,0,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,1,0,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,1,0,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,1,0,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,1,0,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,1,0,4f0bda80-2246-43be-95f8-ae8480682cd5,4f0bda80-2246-43be-95f8-ae8480682cd5,1,0,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,1,0,6f683f46-9eef-4e78-bc2f-7174238bf53c,6f683f46-9eef-4e78-bc2f-7174238bf53c,1,0,7d1ed38b-98cf-4a0e-a605-680bb580d904,7d1ed38b-98cf-4a0e-a605-680bb580d904,1,0,b769eda0-11de-401c-a68b-4fce4555d4fc,b769eda0-11de-401c-a68b-4fce4555d4fc,1,0,fd7a668f-3099-4e15-956a-92c6295dd4d5,fd7a668f-3099-4e15-956a-92c6295dd4d5,1,0,afcbd830-ec5f-4865-a176-ea3014dff908,afcbd830-ec5f-4865-a176-ea3014dff908,1,0,dc5fc801-14e4-42e8-b396-76eb30b69eea,dc5fc801-14e4-42e8-b396-76eb30b69eea,1,0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,1,0,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,1,0,398bf9d1-c353-461e-a1be-683047dcbe41,398bf9d1-c353-461e-a1be-683047dcbe41,1,0,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,1,0,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,1,0,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,1,0,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,1,0,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,1,0,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,1,0,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,1,0,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,1,0,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,1,0,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,1,0,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,1,0,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,1,0,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,1,0,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,1,0,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,1,0,80512d95-5458-4934-98ae-a7b58099196b,80512d95-5458-4934-98ae-a7b58099196b,1,0,6f2354cd-4a34-4921-96bb-b786486f85cf,6f2354cd-4a34-4921-96bb-b786486f85cf,1,0,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,1,0,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,1,0,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,1,0,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,1,0,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,1,0,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,1,0,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,1,0,1db1cb24-f364-4b91-bc96-c216764207a0,1db1cb24-f364-4b91-bc96-c216764207a0,1,0,64d7c8a7-1c15-4afb-ad97-abf8729c604e,64d7c8a7-1c15-4afb-ad97-abf8729c604e,1,0,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,1,0,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,1,0,c04b685a-0d2d-404c-a74a-775ffab298ce,c04b685a-0d2d-404c-a74a-775ffab298ce,1,0,5fe6967d-e333-464b-a89e-8c868c0ce37d,5fe6967d-e333-464b-a89e-8c868c0ce37d,1,0,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,1,0,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,1,0,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,1,0,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,1,0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,1,0,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,1,0,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,1,0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,1,0,e057e428-99c1-419d-a169-697c1e825e94,e057e428-99c1-419d-a169-697c1e825e94,1,0,784a60bd-4070-476d-9b8b-f607c76dc52b,784a60bd-4070-476d-9b8b-f607c76dc52b,1,0,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,1,0,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,1,0,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,1,0,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,1,0,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,1,0,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,1,0,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,1,0,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,1,0,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,1,0,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,1,0,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,1,0,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,1,0,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,1,0,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,1,0,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,1,0,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,1,0,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,1,0,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,1,0,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,1,0,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,1,0,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,1,0,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,1,0,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,1,0,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,1,0,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,1,0,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,1,0,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,1,0,e870a1bd-0c08-4d1e-832a-357922983c19,e870a1bd-0c08-4d1e-832a-357922983c19,1,0,9f71aeac-f889-40dc-91bd-d670da4efd2b,9f71aeac-f889-40dc-91bd-d670da4efd2b,1,0,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,1,0,614ef0bd-3298-408b-bf71-37df8ee60702,614ef0bd-3298-408b-bf71-37df8ee60702,1,0,26ff1be6-f72a-456a-9dce-302029752603,26ff1be6-f72a-456a-9dce-302029752603,1,0,db850a08-0c99-4a57-9b04-38be64bd38fb,db850a08-0c99-4a57-9b04-38be64bd38fb,1,0,abeca127-5ae9-46af-a5e8-d6438fd68367,abeca127-5ae9-46af-a5e8-d6438fd68367,1,0,bce81631-9f6d-42b3-b4b6-2199afb08f2f,bce81631-9f6d-42b3-b4b6-2199afb08f2f,1,0,67d6878f-3e47-4142-8f98-c5a207f0b8a8,67d6878f-3e47-4142-8f98-c5a207f0b8a8,1,0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,1,0,68636657-4d46-4c2a-9b2f-11521a55dfb4,68636657-4d46-4c2a-9b2f-11521a55dfb4,1,0,18a83f43-dc84-4f8a-9580-681b19f571c4,18a83f43-dc84-4f8a-9580-681b19f571c4,1,0,01c588b0-d0ce-4978-b04d-084e6a00fcc7,01c588b0-d0ce-4978-b04d-084e6a00fcc7,1,0,a23642d9-8c4f-44a5-8865-bfb286e47c55,a23642d9-8c4f-44a5-8865-bfb286e47c55,1,0,7b37e038-dcef-41e1-b6e7-ed73c6958415,7b37e038-dcef-41e1-b6e7-ed73c6958415,1,0,24df2d14-5ebf-4ded-ba14-5daee7a0c536,24df2d14-5ebf-4ded-ba14-5daee7a0c536,1,0,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,1,0,03bb028a-ee8c-411e-8382-653046f803c6,03bb028a-ee8c-411e-8382-653046f803c6,1,0,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,1,0,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,1,0,38d5ed93-133b-44fe-827a-69a6cfc0461d,38d5ed93-133b-44fe-827a-69a6cfc0461d,1,0,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,1,0,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,1,0,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,1,0,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,1,0,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1,0,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,1,0,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,1,0,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1,0,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,1,0,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,1,0,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,1,0,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,1,0,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,1,0,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,1,0,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,1,0,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1,0,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,1,0,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,1,0,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,1,0,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,1,0,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,1,0,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,1,0,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,1,0,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,1,0,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,1,0,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,1,0,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,1,0,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1,0,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,1,0,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,1,0,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,1,0,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,1,0,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,1,0,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,1,0,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,1,0,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,1,0,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,1,0,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,1,0,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,1,0,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,1,0,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,1,0,45ca19df-90f3-4143-a659-bc0cb97efee9,45ca19df-90f3-4143-a659-bc0cb97efee9,1,0,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,1,0,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,1,0,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,1,0,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,1,0,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,1,0,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,1,0,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,1,0,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,1,0,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,1,0,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,1,0,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,1,0,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,1,0,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,1,0,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,1,0,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,1,0,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,1,0,4fa11304-fbd4-4c90-909d-5024283a6868,4fa11304-fbd4-4c90-909d-5024283a6868,1,0,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,1,0,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,1,0,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,1,0,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,1,0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,1,0,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,1,0,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,1,0,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,1,0,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,1,0,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,1,0,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,1,0,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,1,0,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,1,0,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,1,0,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,1,0,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,1,0,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,1,0,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,1,0,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,1,0,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,1,0,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,1,0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,1,0,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,1,0,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,1,0,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,1,0,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,1,0,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,1,0,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,1,0,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,1,0,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1,0,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,1,0,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,1,0,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,1,0,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,1,0,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,1,0,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,1,0,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,1,0,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,1,0,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,1,0,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,1,0,2e459a7c-c448-4db4-ae21-e59646527030,2e459a7c-c448-4db4-ae21-e59646527030,1,0,891194d9-9f02-4b22-89cd-941181c83ecb,891194d9-9f02-4b22-89cd-941181c83ecb,1,0,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,1,0,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,1,0,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,1,0,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,1,0,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,1,0,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1,0,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,1,0,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,1,0,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,1,0,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,1,0,d08679db-f83f-476e-b8c4-f3f52c3cf6fd,d08679db-f83f-476e-b8c4-f3f52c3cf6fd,1,0,e0227e4b-be22-4614-8980-5d573fae705d,e0227e4b-be22-4614-8980-5d573fae705d,1,0,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,1,0,6f36007b-04dc-4007-abf7-e20fbd126b97,6f36007b-04dc-4007-abf7-e20fbd126b97,1,0,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,1,0,aa6444a8-6c17-4207-a623-9b734e08e30e,aa6444a8-6c17-4207-a623-9b734e08e30e,1,0,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,1,0,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,1,0,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,1,0,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,1,0,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,1,0,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,1,0,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,1,0,c224e520-7204-4f4a-aac9-b6221ea9ce44,c224e520-7204-4f4a-aac9-b6221ea9ce44,1,0,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,1,0,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,1,0,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,1,0,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,1,0,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,1,0,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,1,0,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,1,0,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,1,0,acd30e63-68dc-4ab2-a6fe-16eb69d09271,acd30e63-68dc-4ab2-a6fe-16eb69d09271,1,0,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,1,0,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,1,0,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,1,0,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,1,0,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,1,0,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,1,0,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,1,0,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,1,0,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,1,0,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,1,0,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,1,0,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,1,0,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,1,0,491a2337-1bf9-45c1-8ae6-95605ef41992,491a2337-1bf9-45c1-8ae6-95605ef41992,1,0,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,1,0,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,1,0,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,1,0,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,1,0,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,1,0,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,1,0,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,1,0,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,1,0,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,1,0,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,1,0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,1,0,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,1,0,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,1,0,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,1,0,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,1,0,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,1,0,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,1,0,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,1,0,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,1,0,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1,0,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,1,0,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,1,0,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,1,0,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,1,0,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,1,0,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,1,0,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,1,0,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,1,0,aef03c0b-2846-43b7-b382-9a51ec783e85,aef03c0b-2846-43b7-b382-9a51ec783e85,1,0,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,1,0,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1,0,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,1,0,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,1,0,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,1,0,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,1,0,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,1,0,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,1,0,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,1,0,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,1,0,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,1,0,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,1,0,1c2da2ac-e797-11e6-0489-a8667f21fde4,1c2da2ac-e797-11e6-0489-a8667f21fde4,1,0,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,1,0,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,1,0,df7892fe-e796-11e6-0489-a8667f21fde4,df7892fe-e796-11e6-0489-a8667f21fde4,1,0,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,1,0,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,1,0,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,1,0,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,1,0,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,1,0,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,1,0,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,1,0,fae8b26c-e796-11e6-0489-a8667f21fde4,fae8b26c-e796-11e6-0489-a8667f21fde4,1,0,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,1,0,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,1,0,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,1,0,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,1,0,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,1,0,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,1,0,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,1,0,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,1,0,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,1,0,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,1,0,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1,0,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,1,0,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,1,0,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,1,0,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,1,0,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,1,0,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,1,0,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,1,0,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,1,0,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,1,0,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,1,0,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,1,0,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,1,0,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,1,0,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,1,0,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,1,0,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,1,0,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,1,0,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,1,0,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,1,0,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,1,0,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,1,0,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,1,0,dc024d33-1715-40da-9c00-443d25a31ebc,dc024d33-1715-40da-9c00-443d25a31ebc,1,0,f8f585d1-01a0-4892-8852-c692ffaa1344,f8f585d1-01a0-4892-8852-c692ffaa1344,1,0,35c237a7-71e1-415c-809d-e99babee4e0e,35c237a7-71e1-415c-809d-e99babee4e0e,1,0,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,1,0,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,1,0,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,1,0,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,1,0,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,1,0,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,1,0,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,1,0,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,1,0,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,1,0,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,1,0,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,1,0,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,1,0,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,1,0,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,1,0,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,1,0,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,1,0,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,1,0,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,1,0,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,1,0,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,1,0,f660bf92-7de1-4a22-9cea-777069e4679d,f660bf92-7de1-4a22-9cea-777069e4679d,1,0,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,1,0,20feb794-eb05-46a6-90e7-ca4e2376d7b2,20feb794-eb05-46a6-90e7-ca4e2376d7b2,1,0,c73da415-6fc3-449a-a784-b25aed54eccd,c73da415-6fc3-449a-a784-b25aed54eccd,1,0,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,1,0,2f484aa4-452a-46af-a707-a5a6917bc0db,2f484aa4-452a-46af-a707-a5a6917bc0db,1,0,fd6ff934-6f11-4182-b0cb-6926902d33c0,fd6ff934-6f11-4182-b0cb-6926902d33c0,1,0,315af891-2075-4833-a404-6c0f2004ee53,315af891-2075-4833-a404-6c0f2004ee53,1,0,5725db77-bfbf-4d85-9565-163b309a53ee,5725db77-bfbf-4d85-9565-163b309a53ee,1,0,99a7142c-b3c7-4221-abf8-6831a3cbc16e,99a7142c-b3c7-4221-abf8-6831a3cbc16e,1,0,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,1,0,2e09abe1-0934-42ae-970f-5e001c35c31a,2e09abe1-0934-42ae-970f-5e001c35c31a,1,0,587d48a3-5627-4481-b13e-c22740b57d8a,587d48a3-5627-4481-b13e-c22740b57d8a,1,0,1f3e3089-1e04-4147-8ece-aa96a76467dd,1f3e3089-1e04-4147-8ece-aa96a76467dd,1,0,22a213b5-ed72-4181-8ff8-89f860c87aa1,22a213b5-ed72-4181-8ff8-89f860c87aa1,1,0,4c56cbff-653e-4f16-b702-c77190d7eb7f,4c56cbff-653e-4f16-b702-c77190d7eb7f,1,0,172ff335-c7ae-4905-b705-2a1475b95713,172ff335-c7ae-4905-b705-2a1475b95713,1,0,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,1,0,cf896f41-7cea-4083-a9f8-96ad881ce641,cf896f41-7cea-4083-a9f8-96ad881ce641,1,0,1d852dc0-90c9-4568-84f9-b1d822573b6b,1d852dc0-90c9-4568-84f9-b1d822573b6b,1,0,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,1,0,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,1,0,37c8f5e1-3513-47f8-896d-a54d11b83dcd,37c8f5e1-3513-47f8-896d-a54d11b83dcd,1,0,9e07733c-39f0-491b-91e1-bf2782d957dd,9e07733c-39f0-491b-91e1-bf2782d957dd,1,0,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,1,0,5902d979-1235-4d5a-ace7-93261bdeb725,5902d979-1235-4d5a-ace7-93261bdeb725,1,0,5a090286-7969-44c9-815b-fc58aeb5d8d3,5a090286-7969-44c9-815b-fc58aeb5d8d3,1,0,8e87cf35-af54-4fa2-9428-460b765b282b,8e87cf35-af54-4fa2-9428-460b765b282b,1,0,73380bb1-bee3-4b73-a3df-1dbea99011d2,73380bb1-bee3-4b73-a3df-1dbea99011d2,1,0,8be29533-38de-413d-b420-7dac2e80af6c,8be29533-38de-413d-b420-7dac2e80af6c,1,0,82a77018-8e38-41dd-9d1f-3130bc29a707,82a77018-8e38-41dd-9d1f-3130bc29a707,1,0,4d75aaef-532e-4ed3-8153-083f04f05cc1,4d75aaef-532e-4ed3-8153-083f04f05cc1,1,0,3854a0ba-e156-4ba3-a301-b1a41ac386c4,3854a0ba-e156-4ba3-a301-b1a41ac386c4,1,0,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,1,0,c2321963-cd86-45ec-b323-3fdb5932da3a,c2321963-cd86-45ec-b323-3fdb5932da3a,1,0,d5af38bf-6261-4177-8f74-998a85f0ef39,d5af38bf-6261-4177-8f74-998a85f0ef39,1,0,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,1,0,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,1,0,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,1,0,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,1,0,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,1,0,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,1,0,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,1,0,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,1,0,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,1,0,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,1,0,d61ca454-505b-4fd6-be15-d7ed948a5ff6,d61ca454-505b-4fd6-be15-d7ed948a5ff6,1,0,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,1,0,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,1,0,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,1,0,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,1,0,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,1,0,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,1,0,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,1,0,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,1,0,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,1,0,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,1,0,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,1,0,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,1,0,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,1,0,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,1,0,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,1,0,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,1,0,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,1,0,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,1,0,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,1,0,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,1,0,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,1,0,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,1,0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,1,0,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,1,0,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,1,0,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,1,0,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,1,0,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,1,0,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,1,0,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,1,0,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,1,0,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,1,0,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,1,0,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,1,0,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,1,0,a469f018-da26-485f-87c3-f580321a34f0,a469f018-da26-485f-87c3-f580321a34f0,1,0,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,1,0,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,1,0,628de771-c19c-4474-989f-8fb6cd7756a2,628de771-c19c-4474-989f-8fb6cd7756a2,1,0,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,1,0,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,1,0,6789e57b-1293-442c-97d0-b8007367602e,6789e57b-1293-442c-97d0-b8007367602e,1,0,0f193c89-b664-448e-bed3-2147430367f7,0f193c89-b664-448e-bed3-2147430367f7,1,0,4c9b2506-75a8-47d3-a5d5-d946088ba14a,4c9b2506-75a8-47d3-a5d5-d946088ba14a,1,0,36eacaa1-2efd-49c0-82de-2f8972535bf2,36eacaa1-2efd-49c0-82de-2f8972535bf2,1,0,c35a643d-fe3a-4293-93c0-074fa68a31e3,c35a643d-fe3a-4293-93c0-074fa68a31e3,1,0,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,1,0,72ee9a03-a320-4e60-be04-0ee813ea567f,72ee9a03-a320-4e60-be04-0ee813ea567f,1,0,f6f52cc8-23a3-4402-b1eb-0e41584c802a,f6f52cc8-23a3-4402-b1eb-0e41584c802a,1,0,8398e065-8b4b-4901-b057-2a048776bafe,8398e065-8b4b-4901-b057-2a048776bafe,1,0,073c56ca-bf45-422d-957a-f9c57aeee4d0,073c56ca-bf45-422d-957a-f9c57aeee4d0,1,0,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,1,0,68598d98-0c59-4cda-b0b2-6901d3aff88b,68598d98-0c59-4cda-b0b2-6901d3aff88b,1,0,219c1375-f26e-4698-aa82-4b9d735df783,219c1375-f26e-4698-aa82-4b9d735df783,1,0,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,1,0,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,1,0,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,1,0,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1,0,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,1,0,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,1,0,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,1,0,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,1,0,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,1,0,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,1,0,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,1,0,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,1,0,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,1,0,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,1,0,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,1,0,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,1,0,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,1,0,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,1,0,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,1,0,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,1,0,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,1,0,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,1,0,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,1,0,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,1,0,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,1,0,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,1,0,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,1,0,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1,0,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,1,0,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,1,0,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,1,0,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,1,0,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,1,0,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,1,0,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,1,0,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,1,0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,1,0,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,1,0,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,1,0,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,1,0,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,1,0,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,1,0,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,1,0,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,1,0,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,1,0,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1,0,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,1,0,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,1,0,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,1,0,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,1,0,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,1,0,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1,0,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,1,0,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,1,0,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,1,0,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,1,0,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,1,0,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,1,0,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,1,0,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,1,0,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,1,0,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,1,0,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,1,0,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,1,0,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,1,0,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,1,0,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,1,0,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,1,0,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,1,0,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,1,0,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,1,0,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,1,0,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,1,0,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,1,0,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,1,0,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,1,0,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,1,0,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,1,0,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,1,0,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,1,0,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,1,0,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,1,0,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,1,0,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,1,0,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,1,0,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,1,0,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,1,0,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,1,0,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,1,0,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,1,0,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,1,0,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,1,0,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,1,0,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,1,0,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,1,0,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,1,0,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,1,0,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,1,0,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,1,0,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,1,0,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,1,0,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,1,0,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,1,0,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,1,0,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,1,0,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,1,0,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,1,0,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,1,0,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,1,0,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,1,0,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,1,0,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,1,0,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,1,0,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,1,0,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,1,0,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,1,0,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,1,0,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,1,0,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,1,0,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,1,0,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,1,0,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,1,0,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,1,0,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,1,0,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,1,0,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,1,0,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,1,0,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,1,0,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,1,0,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,1,0,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,1,0,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,1,0,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,1,0,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,1,0,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,1,0,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,1,0,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,1,0,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,1,0,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,1,0,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,1,0,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,1,0,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,1,0,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,1,0,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,1,0,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,1,0,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,1,0,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,1,0,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,1,0,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,1,0,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,1,0,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,1,0,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,1,0,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,1,0,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,1,0,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,1,0,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,1,0,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,1,0,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,1,0,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,1,0,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,1,0,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,1,0,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,1,0,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,1,0,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,1,0,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,1,0,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,1,0,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,1,0,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,1,0,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,1,0,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,1,0,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,1,0,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,1,0,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,1,0,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,1,0,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,1,0,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,1,0,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,1,0,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,1,0,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,1,0,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,1,0,036868c2-e2c4-426b-8402-0d77b4224828,036868c2-e2c4-426b-8402-0d77b4224828,1,0,1bf18e24-8157-4aa4-b790-21c6535f5233,1bf18e24-8157-4aa4-b790-21c6535f5233,1,0,18470536-57df-48f0-9a85-68e4006558eb,18470536-57df-48f0-9a85-68e4006558eb,1,0,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,1,0,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,1,0,77ee9f6c-0be9-450f-978c-297626d6275b,77ee9f6c-0be9-450f-978c-297626d6275b,1,0,a63e6145-0d4b-4da2-9864-485a61e621df,a63e6145-0d4b-4da2-9864-485a61e621df,1,0,f29738d5-ad22-47bf-9053-497763674486,f29738d5-ad22-47bf-9053-497763674486,1,0,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,1,0,9aca958a-a938-4421-9e37-6606e02f7b77,9aca958a-a938-4421-9e37-6606e02f7b77,1,0,44109976-b763-4807-a013-9d04c3675bf3,44109976-b763-4807-a013-9d04c3675bf3,1,0,46127175-144d-438e-8fbe-c55ae0233620,46127175-144d-438e-8fbe-c55ae0233620,1,0,20754057-6397-4478-a484-74b8c2f243ee,20754057-6397-4478-a484-74b8c2f243ee,1,0,b8a06e8b-4581-4088-a5b4-a5d3330eab22,b8a06e8b-4581-4088-a5b4-a5d3330eab22,1,0,ea838b79-af81-4767-a8b1-fce68baa866a,ea838b79-af81-4767-a8b1-fce68baa866a,1,0,5e1056d0-6778-4030-8806-3dc90ffed318,5e1056d0-6778-4030-8806-3dc90ffed318,1,0,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,1,0,3701531a-b408-455f-a49d-652d3fcab4ef,3701531a-b408-455f-a49d-652d3fcab4ef,1,0,63e229aa-2638-45f1-9c5e-f821d9397ac3,63e229aa-2638-45f1-9c5e-f821d9397ac3,1,0,9e425f71-ef7d-4936-9f1b-7dceca99ca95,9e425f71-ef7d-4936-9f1b-7dceca99ca95,1,0,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,1,0,c6777ffe-1fb2-4807-8624-43f47a4e3947,c6777ffe-1fb2-4807-8624-43f47a4e3947,1,0,91c8e02d-ec9c-41d6-a2b1-ec1e906c055a,91c8e02d-ec9c-41d6-a2b1-ec1e906c055a,1,0,be42c5c6-b604-4180-a3d7-24b2348c8d5e,be42c5c6-b604-4180-a3d7-24b2348c8d5e,1,0,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,1,0,6fd083fe-a132-4f63-b38f-4891004aca8a,6fd083fe-a132-4f63-b38f-4891004aca8a,1,0,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,1,0,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,1,0,ab057ce4-ac51-4465-8aad-eadc9088c62d,ab057ce4-ac51-4465-8aad-eadc9088c62d,1,0,8842c0e3-2e20-4f37-ae7c-f5449004994b,8842c0e3-2e20-4f37-ae7c-f5449004994b,1,0,5b2cc44b-69cb-495c-a26b-003a495df40b,5b2cc44b-69cb-495c-a26b-003a495df40b,1,0,30250d93-10ff-45c9-920b-5fed3f9d8093,30250d93-10ff-45c9-920b-5fed3f9d8093,1,0,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,1,0,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,1,0,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,1,0,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,1,0,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,1,0,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,1,0,23f93492-59f5-491b-8708-45096934c7e6,23f93492-59f5-491b-8708-45096934c7e6,1,0,30f5471a-17fb-4184-9798-4f8e3ef0cccb,30f5471a-17fb-4184-9798-4f8e3ef0cccb,1,0,27abda4c-a43c-49b4-90cd-db780afe0c45,27abda4c-a43c-49b4-90cd-db780afe0c45,1,0,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,1,0,1a28db16-d410-4101-bf31-21cefa880dae,1a28db16-d410-4101-bf31-21cefa880dae,1,0,2b85bcf6-85b0-4efb-bada-b65414a8d264,2b85bcf6-85b0-4efb-bada-b65414a8d264,1,0,cf027de4-59c9-4b8f-9695-b1d4d16548fe,cf027de4-59c9-4b8f-9695-b1d4d16548fe,1,0,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,1,0,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,1,0,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,1,0,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,1,0,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,1,0,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,1,0,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,1,0,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,1,0,88cefe4a-a6c5-4753-935e-f956d9de9f77,88cefe4a-a6c5-4753-935e-f956d9de9f77,1,0,882e78b7-90bd-4b95-8852-146bdb51ec15,882e78b7-90bd-4b95-8852-146bdb51ec15,1,0,ae4435c3-62c0-4f08-b526-7f9571eed8ae,ae4435c3-62c0-4f08-b526-7f9571eed8ae,1,0,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,1,0,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,1,0,c7b46558-d688-4c42-ae52-f98de7923176,c7b46558-d688-4c42-ae52-f98de7923176,1,0,31fdbb46-1df1-4b74-a54e-b922260dcca6,31fdbb46-1df1-4b74-a54e-b922260dcca6,1,0,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,1,0,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,1,0,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,1,0,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,1,0,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,1,0,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,1,0,8317ac49-890d-4921-8c0d-1bfc676f0b40,8317ac49-890d-4921-8c0d-1bfc676f0b40,1,0,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,1,0,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,1,0,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,1,0,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,1,0,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,1,0,f55d74bf-5824-4228-9683-31f7c7fdf74d,f55d74bf-5824-4228-9683-31f7c7fdf74d,1,0,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,1,0,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,1,0,c30c6860-befb-497e-b432-3dba0f86c540,c30c6860-befb-497e-b432-3dba0f86c540,1,0,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,1,0,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,1,0,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,1,0,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,1,0,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,1,0,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,1,0,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,1,0,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,1,0,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,1,0,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,1,0,e67dff00-92e2-4f58-a950-d5bbca9291c5,e67dff00-92e2-4f58-a950-d5bbca9291c5,1,0,e1964724-804a-4ecc-be9e-5b84e58f2b84,e1964724-804a-4ecc-be9e-5b84e58f2b84,1,0,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,1,0,bf3cb513-2856-472b-8713-7bf8ba70cdce,bf3cb513-2856-472b-8713-7bf8ba70cdce,1,0,de4815c8-0853-47e0-862b-b60119c674f6,de4815c8-0853-47e0-862b-b60119c674f6,1,0,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,1,0,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,1,0,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,1,0,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,1,0,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,1,0,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,1,0,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,1,0,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,1,0,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,1,0,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,1,0,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,1,0,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,1,0,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,1,0,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,1,0,436b558e-6547-4ba6-8cee-954fe36743ea,436b558e-6547-4ba6-8cee-954fe36743ea,1,0,6120bb6e-b177-48bf-b467-02bab0d4cc0d,6120bb6e-b177-48bf-b467-02bab0d4cc0d,1,0,a5af4715-6c4f-484b-9599-5b1b9147713f,a5af4715-6c4f-484b-9599-5b1b9147713f,1,0,307b6e66-6fef-4777-b20a-37898928932f,307b6e66-6fef-4777-b20a-37898928932f,1,0,a69494c0-dcce-4359-aa82-c1cfae8a43eb,a69494c0-dcce-4359-aa82-c1cfae8a43eb,1,0,2b243d49-5500-403a-b177-ac1c70bb889d,2b243d49-5500-403a-b177-ac1c70bb889d,1,0,51c040c6-e7a4-4e0e-b479-039636fdb6ec,51c040c6-e7a4-4e0e-b479-039636fdb6ec,1,0,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,1,0,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,1,0,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,1,0,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,1,0,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,1,0,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,1,0,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,1,0,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,1,0,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,1,0,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,1,0,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,1,0,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,1,0,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,1,0,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,1,0,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,1,0,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,1,0,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,1,0,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,1,0,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,1,0,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,1,0,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,1,0,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,1,0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,1,0,d2160866-78ca-424a-92b9-d389fb341ee0,d2160866-78ca-424a-92b9-d389fb341ee0,1,0,73b36823-72a4-4286-8ee2-02b2f086d5ea,73b36823-72a4-4286-8ee2-02b2f086d5ea,1,0,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,1,0,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,1,0,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,1,0,c013a650-bd4b-4e14-97cc-05df17dbb0d5,c013a650-bd4b-4e14-97cc-05df17dbb0d5,1,0,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,1,0,177710c8-2441-4436-a096-64c27aa7aec5,177710c8-2441-4436-a096-64c27aa7aec5,1,0,ab143db8-185b-4093-a3b1-c65322cb8fd6,ab143db8-185b-4093-a3b1-c65322cb8fd6,1,0,e3ce5882-541e-4620-9c24-f00deacc33c2,e3ce5882-541e-4620-9c24-f00deacc33c2,1,0,c9694243-390e-4217-8996-b33924c4fe60,c9694243-390e-4217-8996-b33924c4fe60,1,0,8e08ea9b-8c63-475a-9335-c8edc6214555,8e08ea9b-8c63-475a-9335-c8edc6214555,1,0,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,1,0,72846fcc-a9ab-4393-9133-38c1805abab1,72846fcc-a9ab-4393-9133-38c1805abab1,1,0,91a81670-9124-4b65-aecd-77f252249030,91a81670-9124-4b65-aecd-77f252249030,1,0,ed2e5344-9261-4473-86a5-f914b8458cfc,ed2e5344-9261-4473-86a5-f914b8458cfc,1,0,4ff32c59-4ca5-4e60-b54c-f46f757758e2,4ff32c59-4ca5-4e60-b54c-f46f757758e2,1,0,acbc674d-d053-43f4-9d62-86fbbb962ee2,acbc674d-d053-43f4-9d62-86fbbb962ee2,1,0,e0608801-124b-4c52-9a17-9072eb5b676c,e0608801-124b-4c52-9a17-9072eb5b676c,1,0,64e3295e-89c6-4b09-8dc4-b552da47db84,64e3295e-89c6-4b09-8dc4-b552da47db84,1,0,2c1846a5-09f2-414b-b95c-67ed7432ce0e,2c1846a5-09f2-414b-b95c-67ed7432ce0e,1,0,ce339ae7-a794-425b-8d5f-b04fd4b21364,ce339ae7-a794-425b-8d5f-b04fd4b21364,1,0,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,1,0,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,1,0,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,1,0,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,1,0,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,1,0,951927d4-7bfc-4edb-b97f-dcc29a937400,951927d4-7bfc-4edb-b97f-dcc29a937400,1,0,71309e88-d514-40f3-a329-b2a420e75504,71309e88-d514-40f3-a329-b2a420e75504,1,0,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,1,0,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,1,0,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,1,0,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,1,0,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,1,0,fddfb2fd-4d58-4bc6-b196-720425a8c029,fddfb2fd-4d58-4bc6-b196-720425a8c029,1,0,ce075cf1-1778-4671-aa40-166e6c41adc8,ce075cf1-1778-4671-aa40-166e6c41adc8,1,0,eddb111f-7622-44a3-b7d8-97faec67b23c,eddb111f-7622-44a3-b7d8-97faec67b23c,1,0,84872892-842e-4d7d-a3cd-576c42343a7a,84872892-842e-4d7d-a3cd-576c42343a7a,1,0,78ad6047-473d-494b-a2ba-81e062b567e6,78ad6047-473d-494b-a2ba-81e062b567e6,1,0,0fdbd1ab-716d-46b5-aa75-fb09812ced5b,0fdbd1ab-716d-46b5-aa75-fb09812ced5b,1,0,b26ab92b-9739-4eb4-b855-be6850274432,b26ab92b-9739-4eb4-b855-be6850274432,1,0,17944416-85a5-49e4-9fa8-652c671c3df0,17944416-85a5-49e4-9fa8-652c671c3df0,1,0,b7936cda-654e-4707-af76-385a63243cdf,b7936cda-654e-4707-af76-385a63243cdf,1,0,192844c3-7cb9-4477-a4af-0edb8ce5129d,192844c3-7cb9-4477-a4af-0edb8ce5129d,1,0,33324481-55d1-475f-9f12-7542a05429a2,33324481-55d1-475f-9f12-7542a05429a2,1,0,07b7591f-dcfc-483f-85f6-b5a08d952fe2,07b7591f-dcfc-483f-85f6-b5a08d952fe2,1,0,866c418f-332e-415a-bb8e-794d38f15080,866c418f-332e-415a-bb8e-794d38f15080,1,0,a34b8fdc-e756-4065-b68a-12a07fa7c40e,a34b8fdc-e756-4065-b68a-12a07fa7c40e,1,0,b853debb-d715-4296-9070-45cc5dae571d,b853debb-d715-4296-9070-45cc5dae571d,1,0,fc406b50-f267-44b8-a833-ba7e8880903e,fc406b50-f267-44b8-a833-ba7e8880903e,1,0,6517bf8b-d2fd-4b6b-a4a5-b3086ebad8de,6517bf8b-d2fd-4b6b-a4a5-b3086ebad8de,1,0,391a1891-85a2-45b8-a747-3ecd705fc75b,391a1891-85a2-45b8-a747-3ecd705fc75b,1,0,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,1,0,b9ef62f6-9b1d-4d13-8016-73ed531d195a,b9ef62f6-9b1d-4d13-8016-73ed531d195a,1,0,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,1,0,229fe764-87f5-4d19-b042-c31fef5cddd6,229fe764-87f5-4d19-b042-c31fef5cddd6,1,0,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,1,0,e932800c-fd81-417d-a601-c774b888d66a,e932800c-fd81-417d-a601-c774b888d66a,1,0,a2335b6f-1dbb-4722-979b-8bed83aa8c94,a2335b6f-1dbb-4722-979b-8bed83aa8c94,1,0,211cf921-d880-4f74-b8ee-5312dea28613,211cf921-d880-4f74-b8ee-5312dea28613,1,0,2fd3a396-b8ae-409e-9373-02a039393a80,2fd3a396-b8ae-409e-9373-02a039393a80,1,0,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,1,0,346ef414-b20b-4095-86fe-18ca21c9887f,346ef414-b20b-4095-86fe-18ca21c9887f,1,0,c01ab97b-4964-4f7d-b749-56c0b94feb93,c01ab97b-4964-4f7d-b749-56c0b94feb93,1,0,0cc63813-cf16-4a99-b3bd-18a773091230,0cc63813-cf16-4a99-b3bd-18a773091230,1,0,4fc00971-c980-468a-9690-5cd520d12eb0,4fc00971-c980-468a-9690-5cd520d12eb0,1,0,85972c27-4f39-4982-9307-7877e87ef87b,85972c27-4f39-4982-9307-7877e87ef87b,1,0,96afdffb-7595-4c49-9e86-8296f50bd2f5,96afdffb-7595-4c49-9e86-8296f50bd2f5,1,0,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,1,0,e125d3e0-950f-42ee-8904-bd26091afa55,e125d3e0-950f-42ee-8904-bd26091afa55,1,0,2b4797a5-074a-4a01-b99f-1c5590cfde40,2b4797a5-074a-4a01-b99f-1c5590cfde40,1,0,718e53d2-24ec-40fb-9def-825441ada46c,718e53d2-24ec-40fb-9def-825441ada46c,1,0,4c0a7fd6-8f09-41d6-949f-65ce708c1256,4c0a7fd6-8f09-41d6-949f-65ce708c1256,1,0,792abc06-b52a-4691-ba92-96ed73ca702a,792abc06-b52a-4691-ba92-96ed73ca702a,1,0,148dbe44-86d1-4362-b9db-8ff68cd2b34d,148dbe44-86d1-4362-b9db-8ff68cd2b34d,1,0,1fbc893e-3000-4fac-88f5-c82251835d65,1fbc893e-3000-4fac-88f5-c82251835d65,1,0,05852816-63ec-4179-abca-66372bbfb04c,05852816-63ec-4179-abca-66372bbfb04c,1,0,0165f721-b011-4524-bfd5-81e35092f2be,0165f721-b011-4524-bfd5-81e35092f2be,1,0,e74925d4-1979-4600-8560-0932d26450ad,e74925d4-1979-4600-8560-0932d26450ad,1,0,aa108131-151d-4356-8a24-345e4ec74281,aa108131-151d-4356-8a24-345e4ec74281,1,0,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,1,0,e3251f1a-3c80-4c86-9960-270920bd512f,e3251f1a-3c80-4c86-9960-270920bd512f,1,0,3c3d5474-977b-4df9-88de-042e997bd10d,3c3d5474-977b-4df9-88de-042e997bd10d,1,0,4b88d172-5a44-4011-bb38-e94bf7a9c879,4b88d172-5a44-4011-bb38-e94bf7a9c879,1,0,3bced2d4-e3d7-4489-a26d-f84620b096f4,3bced2d4-e3d7-4489-a26d-f84620b096f4,1,0,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,1,0,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,1,0,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,1,0,18436045-1008-4114-8032-274fea0f4627,18436045-1008-4114-8032-274fea0f4627,1,0,cad93727-cffb-44a6-aaee-be73a078e802,cad93727-cffb-44a6-aaee-be73a078e802,1,0,c034f410-ff8e-45d7-925f-94448f88a7af,c034f410-ff8e-45d7-925f-94448f88a7af,1,0,0027727b-3917-4010-9953-1649266e8ed7,0027727b-3917-4010-9953-1649266e8ed7,1,0,b088786a-046f-458c-8e7a-5bebf8df8b34,b088786a-046f-458c-8e7a-5bebf8df8b34,1,0,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,1,0,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,1,0,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,1,0,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,1,0,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,1,0,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,1,0,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,1,0,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,1,0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,1,0,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,1,0,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,1,0,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,1,0,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,1,0,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,1,0,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,1,0,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,1,0,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,1,0,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,1,0,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,1,0,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,1,0,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,1,0,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,1,0,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,1,0,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,1,0,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,1,0,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,1,0,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,1,0,de2bdd4f-93f2-4341-86d6-7082fc286a5c,de2bdd4f-93f2-4341-86d6-7082fc286a5c,1,0,ba96ec0e-931e-45be-a782-e68ba4fedddb,ba96ec0e-931e-45be-a782-e68ba4fedddb,1,0,9af5882f-3a42-4fae-83df-6aa8de577112,9af5882f-3a42-4fae-83df-6aa8de577112,1,0,79bc5e39-3017-48bf-8e42-fa34e8b581ef,79bc5e39-3017-48bf-8e42-fa34e8b581ef,1,0,fe6e207f-d306-4470-8441-ffd3f3710d31,fe6e207f-d306-4470-8441-ffd3f3710d31,1,0,7451af80-7387-4e8d-a3da-2ae0540c3fd4,7451af80-7387-4e8d-a3da-2ae0540c3fd4,1,0,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1,0,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,1,0,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,1,0,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,1,0,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,1,0,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,1,0,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,1,0,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,1,0,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,1,0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,1,0,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,1,0,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,1,0,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,1,0,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1,0,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,1,0,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,1,0,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,1,0,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,1,0,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,1,0,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,1,0,b67b872e-236a-4ea7-9838-0827234867b4,b67b872e-236a-4ea7-9838-0827234867b4,1,0,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1,0,ce422d4f-1221-4ebf-a801-975a3220a226,ce422d4f-1221-4ebf-a801-975a3220a226,1,0,8735949b-f259-48b9-97e9-a81dfc7dcc8d,8735949b-f259-48b9-97e9-a81dfc7dcc8d,1,0,b8810612-dc7a-4a45-a83c-163a8669b578,b8810612-dc7a-4a45-a83c-163a8669b578,1,0,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,1,0,349c3dc3-0729-41f3-983f-3b13170c6509,349c3dc3-0729-41f3-983f-3b13170c6509,1,0,8281df26-4bde-47ba-926e-f22a8042bf1f,8281df26-4bde-47ba-926e-f22a8042bf1f,1,0,7278fb66-1d48-4c1d-bd15-425f78ad0c32,7278fb66-1d48-4c1d-bd15-425f78ad0c32,1,0,6893007f-8354-4b3b-b205-7c7d385cbde0,6893007f-8354-4b3b-b205-7c7d385cbde0,1,0,d74365a3-b434-41d0-84a7-543c336b5880,d74365a3-b434-41d0-84a7-543c336b5880,1,0,3d42502a-5705-49d7-b4ed-29edbd6306bc,3d42502a-5705-49d7-b4ed-29edbd6306bc,1,0,221e24e6-b31c-45b6-8835-2ad08d595c5f,221e24e6-b31c-45b6-8835-2ad08d595c5f,1,0,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,1,0,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,1,0,55956063-b227-4c74-8d9c-4a62b4f0dbc7,55956063-b227-4c74-8d9c-4a62b4f0dbc7,1,0,b6871b83-7269-43a9-b9a6-a195ff93365d,b6871b83-7269-43a9-b9a6-a195ff93365d,1,0,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,1,0,0cf89f30-e702-4c9e-8af4-888634463b99,0cf89f30-e702-4c9e-8af4-888634463b99,1,0,77f890ac-3c9c-4043-a5b7-12158772bcf5,77f890ac-3c9c-4043-a5b7-12158772bcf5,1,0,2bc734f9-8c0d-473a-b1c3-340395069501,2bc734f9-8c0d-473a-b1c3-340395069501,1,0,316c3933-21dd-4e8a-9450-0900e85ef7e2,316c3933-21dd-4e8a-9450-0900e85ef7e2,1,0,994fe78b-9f61-4aaf-9355-fafcae6b816d,994fe78b-9f61-4aaf-9355-fafcae6b816d,1,0,8448f07b-751b-4670-b44c-3564e81e5cdc,8448f07b-751b-4670-b44c-3564e81e5cdc,1,0,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,1,0,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,1,0,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,1,0,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,1,0,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,1,0,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,1,0,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,1,0,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,1,0,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,1,0,ee0412d3-58e7-4715-8774-d49778e1ef73,ee0412d3-58e7-4715-8774-d49778e1ef73,1,0,ea31df21-1402-417a-9788-b17a7116e842,ea31df21-1402-417a-9788-b17a7116e842,1,0,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,1,0,e964753f-7f4c-4f9f-bd17-cdac317c1d35,e964753f-7f4c-4f9f-bd17-cdac317c1d35,1,0,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,1,0,43c22498-3fd6-4038-a291-05f0db9ab66a,43c22498-3fd6-4038-a291-05f0db9ab66a,1,0,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,1,0,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,1,0,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,1,0,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,1,0,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,1,0,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,1,0,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,1,0,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,1,0,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,1,0,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,1,0,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,1,0,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,1,0,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1,0,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,1,0,483720db-6c9e-4179-b5c7-56159c9b6073,483720db-6c9e-4179-b5c7-56159c9b6073,1,0,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,1,0,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,1,0,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,1,0,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,1,0,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,1,0,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,1,0,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,1,0,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,1,0,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,1,0,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,1,0,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,1,0,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,1,0,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,1,0,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,1,0,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,1,0,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,1,0,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,1,0,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,1,0,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,1,0,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,1,0,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,1,0,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,1,0,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,1,0,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,1,0,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,1,0,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,1,0,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,1,0,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,1,0,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,1,0,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,1,0,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,1,0,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,1,0,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,1,0,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,1,0,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,1,0,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,1,0,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,1,0,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,1,0,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,1,0,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,1,0,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,1,0,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,1,0,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,1,0,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,1,0,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,1,0,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,1,0,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,1,0,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,1,0,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,1,0,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,1,0,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,1,0,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,1,0,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,1,0,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,1,0,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,1,0,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,1,0,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,1,0,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,1,0,7a4e17bf-3649-4982-a9c6-5982390f1f1d,7a4e17bf-3649-4982-a9c6-5982390f1f1d,1,0,722be6e0-2698-431b-9206-777a36e6742f,722be6e0-2698-431b-9206-777a36e6742f,1,0,75bb0122-26bd-40be-8de8-7a57680c85ae,75bb0122-26bd-40be-8de8-7a57680c85ae,1,0,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,1,0,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,1,0,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1,0,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,1,0,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,1,0,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,1,0,a6be80f7-d6aa-4371-a180-3d355080d849,a6be80f7-d6aa-4371-a180-3d355080d849,1,0,b37722c3-e29f-4a40-b4eb-0317919fc7a5,b37722c3-e29f-4a40-b4eb-0317919fc7a5,1,0,b1b1cd90-094d-428b-a6bc-156521c1c54d,b1b1cd90-094d-428b-a6bc-156521c1c54d,1,0,4f79ef7c-79be-4a69-acc0-bd591c712d03,4f79ef7c-79be-4a69-acc0-bd591c712d03,1,0,a0dd2129-d3a1-4bca-b555-72b065be1c13,a0dd2129-d3a1-4bca-b555-72b065be1c13,1,0,dc5e8229-e301-477c-846e-2e7078e3ee5f,dc5e8229-e301-477c-846e-2e7078e3ee5f,1,0,24836e44-8fdd-44bd-91d8-4ddab2caf485,24836e44-8fdd-44bd-91d8-4ddab2caf485,1,0,3727bcfe-4d75-4270-86e7-4a66ab14866c,3727bcfe-4d75-4270-86e7-4a66ab14866c,1,0,870a4708-0b5a-4fa3-9978-d94b161d289a,870a4708-0b5a-4fa3-9978-d94b161d289a,1,0,30e9f89d-7b94-488e-9963-886c271b1af7,30e9f89d-7b94-488e-9963-886c271b1af7,1,0,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,1,0,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1,0,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,1,0,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,1,0,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,1,0,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,1,0,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,1,0,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,1,0,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,1,0,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,1,0,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,1,0,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,1,0,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,1,0,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,1,0,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,1,0,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,1,0,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,1,0,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,1,0,2d279d24-1953-4a2f-8206-77481d2fd718,2d279d24-1953-4a2f-8206-77481d2fd718,1,0,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,1,0,0a920200-77d0-42ea-abf6-0d40d63289b0,0a920200-77d0-42ea-abf6-0d40d63289b0,1,0,c850bafc-4073-44ef-b148-194f87c46f0e,c850bafc-4073-44ef-b148-194f87c46f0e,1,0,6d1dd726-815d-476e-b668-95cff4182e54,6d1dd726-815d-476e-b668-95cff4182e54,1,0,12f4a0ed-4798-4467-8834-de3eb385e22d,12f4a0ed-4798-4467-8834-de3eb385e22d,1,0,5710809e-4c41-42ab-952f-f7778fe9be0f,5710809e-4c41-42ab-952f-f7778fe9be0f,1,0,0811f6c2-6bb3-43b8-9944-910adc4c6f23,0811f6c2-6bb3-43b8-9944-910adc4c6f23,1,0,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,1,0,c86b02ab-3532-4f4c-b993-e237ed0d4d12,c86b02ab-3532-4f4c-b993-e237ed0d4d12,1,0,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,1,0,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,1,0,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,1,0,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,1,0,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,1,0,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,1,0,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,1,0,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,1,0,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,1,0,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,1,0,feb5f490-e791-11e6-508c-a8667f21fde4,feb5f490-e791-11e6-508c-a8667f21fde4,1,0,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,1,0,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,1,0,6962f838-e792-11e6-508c-a8667f21fde4,6962f838-e792-11e6-508c-a8667f21fde4,1,0,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,1,0,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,1,0,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,1,0,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,1,0,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,1,0,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,1,0,4f2b6bf8-e792-11e6-508c-a8667f21fde4,4f2b6bf8-e792-11e6-508c-a8667f21fde4,1,0,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,1,0,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,1,0,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,1,0,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,1,0,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,1,0,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,1,0,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,1,0,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,1,0,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,1,0,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,1,0,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,1,0,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,1,0,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,1,0,8e877990-a64c-4c45-91f1-007d47618cc7,8e877990-a64c-4c45-91f1-007d47618cc7,1,0,73c6640e-2fe6-4132-9237-d6f28cbacc1c,73c6640e-2fe6-4132-9237-d6f28cbacc1c,1,0,69489064-c131-4618-b31f-e6964d593f4a,69489064-c131-4618-b31f-e6964d593f4a,1,0,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,1,0,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,1,0,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,1,0,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,1,0,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,1,0,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,1,0,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,1,0,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,1,0,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,1,0,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,1,0,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,1,0,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,1,0,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,1,0,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,1,0,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,1,0,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,1,0,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,1,0,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,1,0,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,1,0,bd0e4aeb-19f9-48fc-b838-38d785004360,bd0e4aeb-19f9-48fc-b838-38d785004360,1,0,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,1,0,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,1,0,6d351276-2c04-4198-a3e4-865881c12f5c,6d351276-2c04-4198-a3e4-865881c12f5c,1,0,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,1,0,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,1,0,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,1,0,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,1,0,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,1,0,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,1,0,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,1,0,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,1,0,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,1,0,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,1,0,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,1,0,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,1,0,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,1,0,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,1,0,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,1,0,afde7867-15d3-43fa-b439-6d9e40df580b,afde7867-15d3-43fa-b439-6d9e40df580b,1,0,a676ff94-a0d1-4de9-8690-ec67f2c891d8,a676ff94-a0d1-4de9-8690-ec67f2c891d8,1,0,012bf716-3672-462e-b390-7bb4384ab4b1,012bf716-3672-462e-b390-7bb4384ab4b1,1,0,65342599-ff37-4f99-8e40-f05d87403bcf,65342599-ff37-4f99-8e40-f05d87403bcf,1,0,3a3f505a-7a50-4111-8029-5b9057fed232,3a3f505a-7a50-4111-8029-5b9057fed232,1,0,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,1,0,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,1,0,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,1,0,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,1,0,1363523a-929e-49ac-ae39-d43acf9f0478,1363523a-929e-49ac-ae39-d43acf9f0478,1,0,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,1,0,2876c476-8280-426d-8bf9-c93beda0ddd5,2876c476-8280-426d-8bf9-c93beda0ddd5,1,0,963e0813-4f6b-4d31-b66d-77125c47ce19,963e0813-4f6b-4d31-b66d-77125c47ce19,1,0,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,1,0,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,1,0,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,1,0,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,1,0,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,1,0,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,1,0,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,1,0,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,1,0,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,1,0,ebedc283-5eb0-459b-b686-f8643666b8b8,ebedc283-5eb0-459b-b686-f8643666b8b8,1,0,6a6afffd-cfed-4801-8b59-34d27e46565c,6a6afffd-cfed-4801-8b59-34d27e46565c,1,0,a469b12d-4537-419c-91e0-37abc9d31505,a469b12d-4537-419c-91e0-37abc9d31505,1,0,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,1,0,82c42232-531e-403f-8599-cc21a248fa2c,82c42232-531e-403f-8599-cc21a248fa2c,1,0,9104b791-9ac4-41ba-a7f0-9e609db3b578,9104b791-9ac4-41ba-a7f0-9e609db3b578,1,0,2d3721d1-816f-4e84-9df1-863cb269d83d,2d3721d1-816f-4e84-9df1-863cb269d83d,1,0,73554821-8ab5-44ab-a593-37ca10a1b777,73554821-8ab5-44ab-a593-37ca10a1b777,1,0,d5a98e02-e199-445e-8d53-11acd07f473f,d5a98e02-e199-445e-8d53-11acd07f473f,1,0,79db55d6-e916-4bde-b417-7d0a53bb85af,79db55d6-e916-4bde-b417-7d0a53bb85af,1,0,3084fb99-59cb-4338-ae37-0b1e8b333f01,3084fb99-59cb-4338-ae37-0b1e8b333f01,1,0,818a1fbf-17c1-44f9-8e20-27d4ceda549c,818a1fbf-17c1-44f9-8e20-27d4ceda549c,1,0,959a5d25-03e5-4911-bbb7-b93714db7eed,959a5d25-03e5-4911-bbb7-b93714db7eed,1,0,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1,0,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,1,0,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,1,0,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,1,0,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,1,0,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,1,0,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,1,0,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,1,0,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,1,0,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,1,0,f0b0608c-178f-4dea-b461-0d8f00d79d30,f0b0608c-178f-4dea-b461-0d8f00d79d30,1,0,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,1,0,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,1,0,5546b9a9-a4fe-4a2b-9492-883bcb37a210,5546b9a9-a4fe-4a2b-9492-883bcb37a210,1,0,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,1,0,275a5772-8428-497a-81ef-c919f15fcccd,275a5772-8428-497a-81ef-c919f15fcccd,1,0,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,1,0,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,1,0,10336352-f3a1-4bc3-bdec-1a2eef15f176,10336352-f3a1-4bc3-bdec-1a2eef15f176,1,0,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,1,0,3b7c713e-81ae-4adc-9519-99c936599ef7,3b7c713e-81ae-4adc-9519-99c936599ef7,1,0,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1,0,ecda2c4b-6411-4b47-ab59-1918bad5acdd,ecda2c4b-6411-4b47-ab59-1918bad5acdd,1,0,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,1,0,2c811ee8-f50d-4c39-82ee-0492feb1c431,2c811ee8-f50d-4c39-82ee-0492feb1c431,1,0,399f679b-f48a-4d4e-b890-5eab9e4598c3,399f679b-f48a-4d4e-b890-5eab9e4598c3,1,0,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,1,0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,1,0,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,1,0,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,1,0,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,1,0,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,1,0,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,1,0,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,1,0,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,1,0,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,1,0,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,1,0,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,1,0,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,1,0,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,1,0,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,1,0,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,1,0,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,1,0,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,1,0,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,1,0,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,1,0,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,1,0,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,1,0,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,1,0,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,1,0,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,1,0,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,1,0,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,1,0,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,1,0,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,1,0,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,1,0,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,1,0,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,1,0,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,1,0,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,1,0,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,1,0,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,1,0,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,1,0,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,1,0,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,1,0,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,1,0,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,1,0,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,1,0,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,1,0,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,1,0,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,1,0,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,1,0,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,1,0,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,1,0,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,1,0,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,1,0,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,1,0,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,1,0,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,1,0,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,1,0,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,1,0,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,1,0,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,1,0,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,1,0,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,1,0,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,1,0,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,1,0,fd271670-bde6-4351-abec-eb82548c6c98,fd271670-bde6-4351-abec-eb82548c6c98,1,0,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,1,0,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,1,0,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,1,0,799b3dda-fbfc-4dea-a577-30321e64f4d5,799b3dda-fbfc-4dea-a577-30321e64f4d5,1,0,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,1,0,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,1,0,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,1,0,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,1,0,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,1,0,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,1,0,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,1,0,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,1,0,19a18193-c5d3-4e56-86c5-5a81c525e9ad,19a18193-c5d3-4e56-86c5-5a81c525e9ad,1,0,c208fcc0-d7b2-435b-963a-e18c97727f8f,c208fcc0-d7b2-435b-963a-e18c97727f8f,1,0,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,1,0,bf11f7b1-6332-4499-ba48-b94bc10ef869,bf11f7b1-6332-4499-ba48-b94bc10ef869,1,0,479d9428-02fd-47d2-a869-a3695b315724,479d9428-02fd-47d2-a869-a3695b315724,1,0,838b4840-86e3-4bf3-8b95-1e58ef60e97a,838b4840-86e3-4bf3-8b95-1e58ef60e97a,1,0,36d258b5-bfda-4b40-88a8-1e0abf351805,36d258b5-bfda-4b40-88a8-1e0abf351805,1,0,cc95b010-ca42-4b54-9c50-0551b2c690ed,cc95b010-ca42-4b54-9c50-0551b2c690ed,1,0,829fb3c0-6d96-4765-adc6-f177344a4a33,829fb3c0-6d96-4765-adc6-f177344a4a33,1,0,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,1,0,05c27c89-2c26-4252-842d-9aa43ba0ea2f,05c27c89-2c26-4252-842d-9aa43ba0ea2f,1,0,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,1,0,f092729c-6b5d-4709-8b28-15e06129731d,f092729c-6b5d-4709-8b28-15e06129731d,1,0,c03be2f7-d681-417d-975a-5c8c7b716659,c03be2f7-d681-417d-975a-5c8c7b716659,1,0,fca7af5f-bdc0-4264-be68-5e5e38545368,fca7af5f-bdc0-4264-be68-5e5e38545368,1,0,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,1,0,ae124745-edfb-11e6-4681-a8667f21fde4,ae124745-edfb-11e6-4681-a8667f21fde4,1,0,f6fcf9c2-edfb-11e6-4681-a8667f21fde4,f6fcf9c2-edfb-11e6-4681-a8667f21fde4,1,0,ec70cf10-edfb-11e6-4681-a8667f21fde4,ec70cf10-edfb-11e6-4681-a8667f21fde4,1,0,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,1,0,0b7cee9b-3870-49f5-a58e-063cf5353467,0b7cee9b-3870-49f5-a58e-063cf5353467,1,0,d392a791-af74-40c9-ab20-6ed6aeabe864,d392a791-af74-40c9-ab20-6ed6aeabe864,1,0,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,1,0,1612570d-b069-405a-9dd3-80b8175fb468,1612570d-b069-405a-9dd3-80b8175fb468,1,0,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,1,0,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,1,0,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,1,0,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,1,0,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,1,0,561ed574-617d-4a46-b32b-f022e07846c8,561ed574-617d-4a46-b32b-f022e07846c8,1,0,cba706bf-a9a7-4dda-9c5a-a26e85119396,cba706bf-a9a7-4dda-9c5a-a26e85119396,1,0,159a4eb5-00cd-426c-86e3-09cd3f569f22,159a4eb5-00cd-426c-86e3-09cd3f569f22,1,0,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,1,0,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,1,0,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,1,0,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,1,0,2ded5135-b6c3-46dd-b563-7b6fab986d23,2ded5135-b6c3-46dd-b563-7b6fab986d23,1,0,14215720-ccb3-4e5a-8345-cd42c96a3e77,14215720-ccb3-4e5a-8345-cd42c96a3e77,1,0,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,1,0,0690a5c7-bc25-4101-afa5-69c095d415c2,0690a5c7-bc25-4101-afa5-69c095d415c2,1,0,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,1,0,79013bba-a0f2-481c-a63e-095a54ee52aa,79013bba-a0f2-481c-a63e-095a54ee52aa,1,0,8523c346-f144-41b8-a702-2d588e7097c2,8523c346-f144-41b8-a702-2d588e7097c2,1,0,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,1,0,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,1,0,fa2bd6a6-bb46-4e21-8684-248578310164,fa2bd6a6-bb46-4e21-8684-248578310164,1,0,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,1,0,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,1,0,88ccac36-169d-48f8-bc68-15e3bb775b79,88ccac36-169d-48f8-bc68-15e3bb775b79,1,0,a1640988-bd60-43b3-86f1-184b9db275c6,a1640988-bd60-43b3-86f1-184b9db275c6,1,0,300a02f7-8062-4843-b11e-0321f8b40f4d,300a02f7-8062-4843-b11e-0321f8b40f4d,1,0,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,1,0,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,1,0,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,1,0,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,1,0,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,1,0,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,1,0,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,1,0,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,1,0,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,1,0,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,1,0,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,1,0,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,1,0,e4cd44e6-1255-490f-96d9-f805ac92cf67,e4cd44e6-1255-490f-96d9-f805ac92cf67,1,0,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,1,0,5a9011fc-c023-47fb-a999-2c6ca33a04b9,5a9011fc-c023-47fb-a999-2c6ca33a04b9,1,0,398199c4-4830-48e9-89c5-45c2c5a30ee6,398199c4-4830-48e9-89c5-45c2c5a30ee6,1,0,ab574fa5-0730-4456-b741-111e5ea8a896,ab574fa5-0730-4456-b741-111e5ea8a896,1,0,b8d5adf0-dc2f-4041-bc97-cb2442f00054,b8d5adf0-dc2f-4041-bc97-cb2442f00054,1,0,e5bc54f0-d7d0-471c-adda-a0e73e0dd3cf,e5bc54f0-d7d0-471c-adda-a0e73e0dd3cf,1,0,af447f33-ef41-4eda-96ec-5bac26fff33e,af447f33-ef41-4eda-96ec-5bac26fff33e,1,0,f0c83fc5-6e9a-4185-ab43-2b419ace7909,f0c83fc5-6e9a-4185-ab43-2b419ace7909,1,0,4bd15718-6a0e-4a86-921a-09d38ba4be4c,4bd15718-6a0e-4a86-921a-09d38ba4be4c,1,0,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,1,0,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,1,0,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,1,0,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,1,0,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,1,0,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,1,0,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,1,0,fc67b510-3fb4-4305-92d2-c252bc718f03,fc67b510-3fb4-4305-92d2-c252bc718f03,1,0,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,1,0,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,1,0,cf1f7915-94ad-47e7-8676-73271d0cf71e,cf1f7915-94ad-47e7-8676-73271d0cf71e,1,0,fceb6e4a-bd51-4193-a542-70d2317af669,fceb6e4a-bd51-4193-a542-70d2317af669,1,0,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,1,0,80847d57-1795-46c7-a106-926e1f43ac1e,80847d57-1795-46c7-a106-926e1f43ac1e,1,0,38685415-dc87-48b4-8cc4-f85b438f2ec2,38685415-dc87-48b4-8cc4-f85b438f2ec2,1,0,110eff8b-aeec-4ba5-b710-fefc1bd60284,110eff8b-aeec-4ba5-b710-fefc1bd60284,1,0,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,1,0,75eca481-002b-4046-898d-dfac9357611f,75eca481-002b-4046-898d-dfac9357611f,1,0,0110decc-d06e-43cf-9d01-30d412edcdd7,0110decc-d06e-43cf-9d01-30d412edcdd7,1,0,3ea32a24-d37b-4fad-937a-9d1357d649a9,3ea32a24-d37b-4fad-937a-9d1357d649a9,1,0,2856ee9a-0fea-4684-b7b8-4844773eae07,2856ee9a-0fea-4684-b7b8-4844773eae07,1,0,84e09840-8d67-416f-87a2-7f03c04180c9,84e09840-8d67-416f-87a2-7f03c04180c9,1,0,0388f22d-f91d-45c9-a8ae-900a24cbfe67,0388f22d-f91d-45c9-a8ae-900a24cbfe67,1,0,60fa2562-4914-46d6-a00a-1bb6e2803263,60fa2562-4914-46d6-a00a-1bb6e2803263,1,0,0d61a8d4-2dc8-435e-a238-416d7640576f,0d61a8d4-2dc8-435e-a238-416d7640576f,1,0,5ea899d4-e076-4a1c-838c-e369abc4705f,5ea899d4-e076-4a1c-838c-e369abc4705f,1,0,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,1,0,ab2e75f0-8da7-4b38-8f30-537424b719db,ab2e75f0-8da7-4b38-8f30-537424b719db,1,0,db344a42-61b8-4544-9aa1-8840ab8a70f0,db344a42-61b8-4544-9aa1-8840ab8a70f0,1,0,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,1,0,043bd776-5a7b-45ff-8b4a-5eed2bba0054,043bd776-5a7b-45ff-8b4a-5eed2bba0054,1,0,6a708860-e3b6-46ea-bea5-0d3e426c72f6,6a708860-e3b6-46ea-bea5-0d3e426c72f6,1,0,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,1,0,78058cd3-eb56-483c-96f5-1bf8883abc76,78058cd3-eb56-483c-96f5-1bf8883abc76,1,0,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,1,0,fae4675c-dcdc-42fc-911d-07c3c577b8b8,fae4675c-dcdc-42fc-911d-07c3c577b8b8,1,0,f1050611-4f82-411b-97f2-bcd8a5c914bf,f1050611-4f82-411b-97f2-bcd8a5c914bf,1,0,efacf22d-b474-4d49-af8b-6d3784aa5cf2,efacf22d-b474-4d49-af8b-6d3784aa5cf2,1,0,f818b937-9ac3-4a0c-ba50-26c060984f09,f818b937-9ac3-4a0c-ba50-26c060984f09,1,0,f385778d-96cb-4e09-884d-533739b393b1,f385778d-96cb-4e09-884d-533739b393b1,1,0,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,1,0,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,1,0,f64089ee-72dd-4fcf-8926-31e95c6fcf77,f64089ee-72dd-4fcf-8926-31e95c6fcf77,1,0,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,1,0,e1e151cc-7b8a-4125-804f-c902a522ed81,e1e151cc-7b8a-4125-804f-c902a522ed81,1,0,f475494e-fe94-4902-b2da-3ade01eba5bb,f475494e-fe94-4902-b2da-3ade01eba5bb,1,0,fbb814b2-cb2f-474d-9c96-5571cef3030e,fbb814b2-cb2f-474d-9c96-5571cef3030e,1,0,7bf36370-3761-4fd5-bea5-90fa142a9d57,7bf36370-3761-4fd5-bea5-90fa142a9d57,1,0,3b81427f-cf64-4a5e-adb3-5415d515fecd,3b81427f-cf64-4a5e-adb3-5415d515fecd,1,0,e9f2b604-7181-476d-8b34-3a544cbb353d,e9f2b604-7181-476d-8b34-3a544cbb353d,1,0,73773919-d01c-41dd-bb31-9c66648ac0ff,73773919-d01c-41dd-bb31-9c66648ac0ff,1,0,5d1afad0-3d7e-4214-b52a-72c184490084,5d1afad0-3d7e-4214-b52a-72c184490084,1,0,5f7901a1-f992-42fa-9ddb-d63574da3b56,5f7901a1-f992-42fa-9ddb-d63574da3b56,1,0,26abd45a-12b3-4312-88fb-53c90a6e6679,26abd45a-12b3-4312-88fb-53c90a6e6679,1,0,1541ad74-3e73-4699-bccf-c13313fbedfe,1541ad74-3e73-4699-bccf-c13313fbedfe,1,0,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1,0,0b2356a4-5571-4ba0-9095-265106f2b3b3,0b2356a4-5571-4ba0-9095-265106f2b3b3,1,0,a2581834-dde8-439a-8204-6712c829738e,a2581834-dde8-439a-8204-6712c829738e,1,0,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,1,0,c746a268-815b-4917-8b06-af745ba9db04,c746a268-815b-4917-8b06-af745ba9db04,1,0,5cc01f13-0faa-4c3c-8e5e-156656f71efd,5cc01f13-0faa-4c3c-8e5e-156656f71efd,1,0,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,1,0,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,1,0,be2b4dba-e77e-4947-bd2f-0710b357ca2a,be2b4dba-e77e-4947-bd2f-0710b357ca2a,1,0,86182e9a-89e0-40d7-b2d7-fcd92ee42942,86182e9a-89e0-40d7-b2d7-fcd92ee42942,1,0,df750e63-50fc-4085-b8b8-f05e4751ff51,df750e63-50fc-4085-b8b8-f05e4751ff51,1,0,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,1,0,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,1,0,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,1,0,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,1,0,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,1,0,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,1,0,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,1,0,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,1,0,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,1,0,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,1,0,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,1,0,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,1,0,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,1,0,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,1,0,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,1,0,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,1,0,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,1,0,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,1,0,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,1,0,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,1,0,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,1,0,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,1,0,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,1,0,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,1,0,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,1,0,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,1,0,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,1,0,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,1,0,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,1,0,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,1,0,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,1,0,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,1,0,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,1,0,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,1,0,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,1,0,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,1,0,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,1,0,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,1,0,25451a36-c842-44a5-94f4-7e540050b825,25451a36-c842-44a5-94f4-7e540050b825,1,0,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,1,0,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,1,0,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,1,0,e1e9862e-c87b-400f-bca1-b1380cb98ddc,e1e9862e-c87b-400f-bca1-b1380cb98ddc,1,0,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,1,0,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,1,0,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,1,0,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,1,0,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,1,0,0db78226-37d0-4016-b4c9-5134af1aabc7,0db78226-37d0-4016-b4c9-5134af1aabc7,1,0,8d6b4d23-a260-4352-9975-c13ce3e05220,8d6b4d23-a260-4352-9975-c13ce3e05220,1,0,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,1,0,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,1,0,6f5ac40b-ea22-47cf-acf2-614406669a72,6f5ac40b-ea22-47cf-acf2-614406669a72,1,0,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,1,0,488d2644-6fef-488a-af38-40f59c0e0d8c,488d2644-6fef-488a-af38-40f59c0e0d8c,1,0,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,1,0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,1,0,f1efef30-8651-4728-becd-abe3f9026a43,f1efef30-8651-4728-becd-abe3f9026a43,1,0,c2612e22-4f0d-4713-b4eb-decd9780d088,c2612e22-4f0d-4713-b4eb-decd9780d088,1,0,11b1410f-8e14-4b2f-8890-177f4875020e,11b1410f-8e14-4b2f-8890-177f4875020e,1,0,2276b2b0-1705-4014-956f-5087e9dd5c1e,2276b2b0-1705-4014-956f-5087e9dd5c1e,1,0,f72b9d4b-7196-45a3-9349-e32fc91e875a,f72b9d4b-7196-45a3-9349-e32fc91e875a,1,0,6c509dcc-4529-4ac3-86fe-26f807991b1c,6c509dcc-4529-4ac3-86fe-26f807991b1c,1,0,529c8887-f691-4ba8-aeaf-937858d61c30,529c8887-f691-4ba8-aeaf-937858d61c30,1,0,43435d30-8c25-4757-9a29-9173415959ff,43435d30-8c25-4757-9a29-9173415959ff,1,0,4aef5419-7cf5-4443-b773-9273c983844f,4aef5419-7cf5-4443-b773-9273c983844f,1,0,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,1,0,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,1,0,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,1,0,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,1,0,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,1,0,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,1,0,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,1,0,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,1,0,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,1,0,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,1,0,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,1,0,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,1,0,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,1,0,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,1,0,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,1,0,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,1,0,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,1,0,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,1,0,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,1,0,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,1,0,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,1,0,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,1,0,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,1,0,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,1,0,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,1,0,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,1,0,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,1,0,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,1,0,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,1,0,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,1,0,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,1,0,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,1,0,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,1,0,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,1,0,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,1,0,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,1,0,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,1,0,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,1,0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,1,0,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,1,0,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,1,0,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,1,0,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,1,0,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,1,0,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,1,0,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,1,0,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,1,0,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,1,0,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,1,0,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,1,0,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,1,0,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,1,0,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1,0,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,1,0,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,1,0,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,1,0,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,1,0,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,1,0,5c68c57a-31d6-4ae9-855f-3fbc57922e39,5c68c57a-31d6-4ae9-855f-3fbc57922e39,1,0,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,1,0,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,1,0,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,1,0,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,1,0,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,1,0,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,1,0,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,1,0,911f8810-e96e-4f02-9377-47e49919f87e,911f8810-e96e-4f02-9377-47e49919f87e,1,0,cde46d6d-9f8a-45b6-98a7-9411030ccd72,cde46d6d-9f8a-45b6-98a7-9411030ccd72,1,0,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,1,0,224b9439-4b30-4b64-8edf-e7718ee90a7d,224b9439-4b30-4b64-8edf-e7718ee90a7d,1,0,74dc2374-daf1-4a8a-ba10-d3aced96af3b,74dc2374-daf1-4a8a-ba10-d3aced96af3b,1,0,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,1,0,e28e953f-93b3-4d4d-9ee4-c56df26037eb,e28e953f-93b3-4d4d-9ee4-c56df26037eb,1,0,578e0fd2-997c-437a-befc-33d128097a7e,578e0fd2-997c-437a-befc-33d128097a7e,1,0,14089231-31a8-4471-b85b-064836794ff3,14089231-31a8-4471-b85b-064836794ff3,1,0,014de276-fb2f-4deb-873f-475729be0f66,014de276-fb2f-4deb-873f-475729be0f66,1,0,40a60ff7-96ca-485b-a2d9-640a208a7de6,40a60ff7-96ca-485b-a2d9-640a208a7de6,1,0,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,1,0,2c2526c1-bdf8-4115-bdff-3e79d28321cb,2c2526c1-bdf8-4115-bdff-3e79d28321cb,1,0,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,1,0,95ab774f-27fa-4bd4-a422-0f997f632679,95ab774f-27fa-4bd4-a422-0f997f632679,1,0,ee3ad891-b7d6-439d-892b-de2f3399d147,ee3ad891-b7d6-439d-892b-de2f3399d147,1,0,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,1,0,a2ae0338-ed11-422a-8442-f6c4002ddf0d,a2ae0338-ed11-422a-8442-f6c4002ddf0d,1,0,eb59c9c3-6043-401c-87cc-ba7620139d6a,eb59c9c3-6043-401c-87cc-ba7620139d6a,1,0,2b5ce871-8630-4f2f-9ccb-d9f863886420,2b5ce871-8630-4f2f-9ccb-d9f863886420,1,0,86ae353e-7eed-434c-b4ab-cede36e462bc,86ae353e-7eed-434c-b4ab-cede36e462bc,1,0,18e65717-738b-4d39-9c85-676bca15e6b7,18e65717-738b-4d39-9c85-676bca15e6b7,1,0,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,1,0,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,1,0,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,1,0,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,1,0,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,1,0,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,1,0,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,1,0,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,1,0,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,1,0,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,1,0,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,1,0,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,1,0,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,1,0,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,1,0,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,1,0,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,1,0,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,1,0,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,1,0,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,1,0,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,1,0,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,1,0,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,1,0,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,1,0,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,1,0,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,1,0,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,1,0,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,1,0,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,1,0,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,1,0,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,1,0,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,1,0,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,1,0,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,1,0,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,1,0,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,1,0,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,1,0,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,1,0,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,1,0,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,1,0,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,1,0,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,1,0,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,1,0,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,1,0,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,1,0,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,1,0,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,1,0,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,1,0,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,1,0,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,1,0,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,1,0,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,1,0,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,1,0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,1,0,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,1,0,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,1,0,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,1,0,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,1,0,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,1,0,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,1,0,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,1,0,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,1,0,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,1,0,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,1,0,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,1,0,577f2671-7d38-4806-b7ff-840d649e6d69,577f2671-7d38-4806-b7ff-840d649e6d69,1,0,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,1,0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,1,0,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,1,0,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,1,0,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,1,0,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,1,0,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,1,0,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,1,0,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,1,0,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,1,0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1,0,b50f3157-3c3a-4553-a16a-7fcd660e2824,b50f3157-3c3a-4553-a16a-7fcd660e2824,1,0,19858faf-2bc5-4cfb-b258-cb101ab66e87,19858faf-2bc5-4cfb-b258-cb101ab66e87,1,0,f779f4a1-1fab-46d4-8043-ac25c247d361,f779f4a1-1fab-46d4-8043-ac25c247d361,1,0,308358bc-773a-43fa-adff-dcc5884a2bd4,308358bc-773a-43fa-adff-dcc5884a2bd4,1,0,ed541a1c-a842-40a9-b357-612db71ec32c,ed541a1c-a842-40a9-b357-612db71ec32c,1,0,b0e37495-7d9e-41d0-8225-652f9ac328cf,b0e37495-7d9e-41d0-8225-652f9ac328cf,1,0,3bd2e1c8-9ef3-449b-acf6-397b90669c49,3bd2e1c8-9ef3-449b-acf6-397b90669c49,1,0,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,1,0,f9865a2a-50e3-4f9c-a509-319be62dc468,f9865a2a-50e3-4f9c-a509-319be62dc468,1,0,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,1,0,766d8852-3bb4-4a6c-81c0-911722af4e8e,766d8852-3bb4-4a6c-81c0-911722af4e8e,1,0,f6dae699-06eb-41ef-878b-3fdfe1b1f213,f6dae699-06eb-41ef-878b-3fdfe1b1f213,1,0,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,1,0,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,1,0,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,1,0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,1,0,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,1,0,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,1,0,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,1,0,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,1,0,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,1,0,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,1,0,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,1,0,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,1,0,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,1,0,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,1,0,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,1,0,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,1,0,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1,0,8064eb3a-d56c-4517-9db0-b7300149c7c4,8064eb3a-d56c-4517-9db0-b7300149c7c4,1,0,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,1,0,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,1,0,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,1,0,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,1,0,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,1,0,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,1,0,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,1,0,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,1,0,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,1,0,8adebe50-a946-40c2-9258-b17efe787e0e,8adebe50-a946-40c2-9258-b17efe787e0e,1,0,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,1,0,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,1,0,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,1,0,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,1,0,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,1,0,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,1,0,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1,0,d6b72e00-018a-4fdc-b6a4-06dcecf89809,d6b72e00-018a-4fdc-b6a4-06dcecf89809,1,0,9f816562-57f0-473f-8c85-14f7521ffd7f,9f816562-57f0-473f-8c85-14f7521ffd7f,1,0,917b0acc-88fe-4afc-b19b-6da69e060393,917b0acc-88fe-4afc-b19b-6da69e060393,1,0,a091b76e-8ba4-4534-bbb0-9990e69b8603,a091b76e-8ba4-4534-bbb0-9990e69b8603,1,0,867ee5d2-7566-4052-a311-b56e7e46b90d,867ee5d2-7566-4052-a311-b56e7e46b90d,1,0,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,1,0,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,1,0,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,1,0,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,1,0,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,1,0,64e702e9-8934-4356-a1b2-be0e8b390630,64e702e9-8934-4356-a1b2-be0e8b390630,1,0,74880ac4-bdd3-48e6-82a0-a2103da42723,74880ac4-bdd3-48e6-82a0-a2103da42723,1,0,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,1,0,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,1,0,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,1,0,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,1,0,ddc6761c-a32a-41e1-b110-fdc39ad440d3,ddc6761c-a32a-41e1-b110-fdc39ad440d3,1,0,0b322ee2-b018-4d00-8f05-62ee16e519ff,0b322ee2-b018-4d00-8f05-62ee16e519ff,1,0,0866e282-055a-49bb-9aa5-b1af7c74c344,0866e282-055a-49bb-9aa5-b1af7c74c344,1,0,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,1,0,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,1,0,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,1,0,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,1,0,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,1,0,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,1,0,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,1,0,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,1,0,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,1,0,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,1,0,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,1,0,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,1,0,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,1,0,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,1,0,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,1,0,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,1,0,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,1,0,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,1,0,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,1,0,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,1,0,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,1,0,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,1,0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,1,0,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,1,0,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,1,0,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,1,0,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,1,0,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,1,0,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,1,0,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,1,0,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,1,0,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,1,0,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,1,0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,1,0,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,1,0,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,1,0,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,1,0,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,1,0,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,1,0,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,1,0,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,1,0,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,1,0,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,1,0,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,1,0,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,1,0,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,1,0,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,1,0,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,1,0,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,1,0,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,1,0,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,1,0,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,1,0,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,1,0,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,1,0,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,1,0,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,1,0,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,1,0,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,1,0,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,1,0,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,1,0,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,1,0,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,1,0,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,1,0,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file diff --git a/SSL/src/Constants/ВерсияКлассификатораБанков/ВерсияКлассификатораБанков.mdo b/SSL/src/Constants/ВерсияКлассификатораБанков/ВерсияКлассификатораБанков.mdo index c78789435..45ce5b788 100644 --- a/SSL/src/Constants/ВерсияКлассификатораБанков/ВерсияКлассификатораБанков.mdo +++ b/SSL/src/Constants/ВерсияКлассификатораБанков/ВерсияКлассификатораБанков.mdo @@ -11,8 +11,7 @@ Версия классификатора банков - Date - + ValueStorage diff --git a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl index c70b93ca6..cbf609a05 100644 --- a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl @@ -16,6 +16,12 @@ ЗначениеИзменено = Значение <> Константы.ИспользоватьВнешнихПользователей.Получить(); + Если ЗначениеИзменено + И Значение + И Не ПользователиСлужебный.ВнешниеПользователиВнедрены() Тогда + ВызватьИсключение НСтр("ru = 'Использование внешних пользователей не предусмотрено в программе.'"); + КонецЕсли; + КонецПроцедуры Процедура ПриЗаписи(Отказ) diff --git a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl index 26d85f130..83a1975a0 100644 --- a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl @@ -45,7 +45,7 @@ Если Значение Тогда - ИнтеграцияСтандартныхПодсистем.ПриВключенииРазделенияПоОбластямДанных(); + ИнтеграцияПодсистемБСП.ПриВключенииРазделенияПоОбластямДанных(); КонецЕсли; diff --git a/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl b/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl index 833fafef2..d039043a7 100644 --- a/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl @@ -11,7 +11,7 @@ КонецЕсли; Если Значение Тогда - ИнтеграцияСтандартныхПодсистем.ПриВключенииИспользованияПрофилейБезопасности(); + ИнтеграцияПодсистемБСП.ПриВключенииИспользованияПрофилейБезопасности(); РаботаВБезопасномРежимеПереопределяемый.ПриВключенииИспользованияПрофилейБезопасности(); КонецЕсли; diff --git a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl index c3a4d3e4a..17d3b8b7d 100644 --- a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl @@ -18,7 +18,6 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); // Переключение подписей всех учетных записей в обычный текст. diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index e33de343d..a1a296569 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -395,18 +395,17 @@ ПолучитьВсеФайлы = (КоличествоФайловВПорции = 0); Запрос = Новый Запрос; - Запрос.Текст = РаботаСФайламиСлужебныйВызовСервера.ТекстЗапросаДляИзвлеченияТекста(ПолучитьВсеФайлы); + Запрос.Текст = РаботаСФайламиСлужебныйВызовСервера.ТекстЗапросаДляИзвлеченияТекста(ПолучитьВсеФайлы, Истина); + Выгрузка = Запрос.Выполнить().Выгрузить(); Для Каждого Строка Из Выгрузка Цикл - Кодировка = РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(Строка.Ссылка); - СтруктураСтроки = Новый Структура; СтруктураСтроки.Вставить("Ссылка", Строка.Ссылка); СтруктураСтроки.Вставить("Расширение", Строка.Расширение); СтруктураСтроки.Вставить("Наименование", Строка.Наименование); - СтруктураСтроки.Вставить("Кодировка", Кодировка); + СтруктураСтроки.Вставить("Кодировка", Строка.Кодировка); Результат.Добавить(СтруктураСтроки); diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html index 31ae5d64a..970b2aa6e 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html @@ -1,6 +1,6 @@

      Предназначена для управления автоматическим извлечением текстов.

      -

      Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем выполнить команду Управление полнотекстовым поиском - Запустить извлечение текстов в разделе Администрирование - Поддержка и обслуживание - Регламентные операции. Также можно выполнить команду Автоматическое извлечение текстов панели действий раздела Органайзер.

      +

      Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем в разделе Администрирование - Общие настройки - Полнотекстовый поиск данных выполнить команду Настроить - Запустить извлечение текстов.

      Настройка параметров

      • Установите Интервал времени выполнения - по умолчанию интервал времени выполнения равен 60 секундам;
      • Определите Количество файлов в одной порции - по умолчанию равно 100; diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl index d743c08a0..e46ab74b2 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl @@ -72,7 +72,7 @@ Если Не ЗначениеЗаполнено(Объект.НачалоДействияБлокировки) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не указана дата начала блокировки.'"),, "Объект.НачалоДействияБлокировки",,Отказ); + НСтр("ru = 'Не указана дата начала блокировки.'"),, "Объект.НачалоДействияБлокировки",,Отказ); Возврат; КонецЕсли; @@ -111,8 +111,8 @@ ОчиститьСообщения(); - Объект.ВременноЗапретитьРаботуПользователей = Не НачальныйСтатусЗапретаРаботыПользователейЗначение; - Если Объект.ВременноЗапретитьРаботуПользователей Тогда + Объект.ЗапретитьРаботуПользователей = Не НачальныйСтатусЗапретаРаботыПользователейЗначение; + Если Объект.ЗапретитьРаботуПользователей Тогда КоличествоСеансов = 1; Попытка @@ -202,7 +202,7 @@ ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),, Истина); Элементы.ГруппаОшибка.Видимость = Истина; - Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); + Элементы.ТекстОшибки.Заголовок = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат; КонецПопытки; @@ -343,7 +343,7 @@ ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если ЭтоАдминистраторСистемы Тогда Элементы.ГруппаОшибка.Видимость = Истина; - Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); + Элементы.ТекстОшибки.Заголовок = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецЕсли; Возврат Ложь; КонецПопытки; @@ -365,7 +365,7 @@ ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если ЭтоАдминистраторСистемы Тогда Элементы.ГруппаОшибка.Видимость = Истина; - Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); + Элементы.ТекстОшибки.Заголовок = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецЕсли; Возврат Ложь; КонецПопытки; @@ -384,7 +384,7 @@ Элементы.КомандаПрименить.Видимость = Истина; Элементы.КомандаПрименить.КнопкаПоУмолчанию = Истина; Элементы.КомандаОстановить.Видимость = Ложь; - Элементы.КомандаПрименить.Заголовок = ?(Объект.ВременноЗапретитьРаботуПользователей, + Элементы.КомандаПрименить.Заголовок = ?(Объект.ЗапретитьРаботуПользователей, НСтр("ru='Снять блокировку'"), НСтр("ru='Установить блокировку'")); Элементы.ЗапретитьРаботуРегламентныхЗаданий.Заголовок = ?(Объект.ЗапретитьРаботуРегламентныхЗаданий, НСтр("ru='Оставить блокировку работы регламентных заданий'"), НСтр("ru='Также запретить работу регламентных заданий'")); @@ -434,7 +434,7 @@ ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если ЭтоАдминистраторСистемы Тогда Элементы.ГруппаОшибка.Видимость = Истина; - Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); + Элементы.ТекстОшибки.Заголовок = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецЕсли; КонецПопытки; @@ -442,23 +442,13 @@ КонецПроцедуры -&НаСервере -Функция КраткоеОписаниеОшибки(ОписаниеОшибки) - ТекстОшибки = ОписаниеОшибки; - Позиция = СтрНайти(ТекстОшибки, "}:"); - Если Позиция > 0 Тогда - ТекстОшибки = СокрЛП(Сред(ТекстОшибки, Позиция + 2, СтрДлина(ТекстОшибки))); - КонецЕсли; - Возврат ТекстОшибки; -КонецФункции - &НаСервере Процедура УстановитьНачальныйСтатусЗапретаРаботыПользователей() ПолучитьПараметрыБлокировки(); - НачальныйСтатусЗапретаРаботыПользователейЗначение = Объект.ВременноЗапретитьРаботуПользователей; - Если Объект.ВременноЗапретитьРаботуПользователей Тогда + НачальныйСтатусЗапретаРаботыПользователейЗначение = Объект.ЗапретитьРаботуПользователей; + Если Объект.ЗапретитьРаботуПользователей Тогда Если ТекущаяДатаСеанса() < Объект.НачалоДействияБлокировки Тогда НачальныйСтатусЗапретаРаботыПользователей = НСтр("ru = 'Работа пользователей в программе будет запрещена в указанное время'"); СтатусЗапретаРаботыПользователей = "Запланировано"; @@ -522,11 +512,11 @@ ПоказатьОповещениеПользователя(НСтр("ru = 'Блокировка работы пользователей'"), "e1cib/app/Обработка.БлокировкаРаботыПользователей", - ?(Объект.ВременноЗапретитьРаботуПользователей, НСтр("ru = 'Блокировка установлена.'"), НСтр("ru = 'Блокировка снята.'")), + ?(Объект.ЗапретитьРаботуПользователей, НСтр("ru = 'Блокировка установлена.'"), НСтр("ru = 'Блокировка снята.'")), БиблиотекаКартинок.Информация32); - СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Объект.ВременноЗапретитьРаботуПользователей); + СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Объект.ЗапретитьРаботуПользователей); - Если Объект.ВременноЗапретитьРаботуПользователей Тогда + Если Объект.ЗапретитьРаботуПользователей Тогда Элементы.ГруппаРежим.ТекущаяСтраница = Элементы.СтраницаСостоянияБлокировки; ОбновитьСтраницуСостояния(ЭтотОбъект); Иначе @@ -579,7 +569,7 @@ ПараметрыАдминистрирования, Неопределено, Объект.ЗапретитьРаботуРегламентныхЗаданий); КонецПроцедуры - + &НаСервере Функция БлокировкаРегламентныхЗаданийИнформационнойБазыНаСервере(ПараметрыАдминистрирования) diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl index 358dba6a2..840332de5 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl @@ -172,7 +172,7 @@ &НаСервере Процедура УстановитьБлокировкуФайловойБазы() - Объект.ВременноЗапретитьРаботуПользователей = Истина; + Объект.ЗапретитьРаботуПользователей = Истина; Если УдалениеПомеченныхОбъектов Тогда Объект.НачалоДействияБлокировки = ТекущаяДатаСеанса() + 2*60; Объект.ОкончаниеДействияБлокировки = Объект.НачалоДействияБлокировки + 60; @@ -189,7 +189,7 @@ ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеОписаниеОшибки(ОписаниеОшибки()), , ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -201,16 +201,4 @@ КонецПроцедуры -&НаСервере -Функция КраткоеОписаниеОшибки(ОписаниеОшибки) - - ТекстОшибки = ОписаниеОшибки; - Позиция = СтрНайти(ТекстОшибки, "}:"); - Если Позиция > 0 Тогда - ТекстОшибки = СокрЛП(Сред(ТекстОшибки, Позиция + 2, СтрДлина(ТекстОшибки))); - КонецЕсли; - - Возврат ТекстОшибки; -КонецФункции - #КонецОбласти diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html index de27b9f0f..332b919dc 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html @@ -2,7 +2,7 @@

        Для администратора в программе предусмотрена возможность завершать работу всех активных пользователей (включая пользователя, инициировавшего блокировку) и блокировать вход в программу на определенный период времени.

        Такая возможность востребована для проведения профилактических или срочных работ в программе. Обычно такие работы проводят в ночные часы, чтобы не затруднять работу в программе других пользователей. Однако бывают различные внеплановые ситуации. Например, необходимо провести обновление версии программы, восстановление программы после сбоя электроснабжения, резервное копирование информационной базы, или главному бухгалтеру необходимо срочно рассчитать сложный отчет. Большинство этих работ не могут быть проведены, если пользователи продолжают работать в программе.

        При работе в клиент-серверном режиме имеется возможность блокировки работы регламентных заданий.

        -

        Блокировка работы пользователей производится по соответствующей команде раздела Администрирование - Поддержка и обслуживание.

        +

        Блокировка работы пользователей производится по соответствующей команде раздела Администрирование - Обслуживание.

        Переход к списку Активные пользователи

        • Нажмите Активные пользователи для того чтобы посмотреть, какие пользователи в настоящий момент работают в программе.

        Информация о состоянии блокировки

        • Над параметрами блокировки выводится сообщение о состоянии блокировки: "Работа пользователей в программе разрешена (запрещена)". В последнем случае сообщение выделяется красным цветом.

        Блокировка работы пользователей

        diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl index 5ccbb212b..a99d36a28 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl @@ -7,7 +7,7 @@ // Процедура ВыполнитьУстановку() Экспорт - ВыполнитьУстановкуБлокировки(ВременноЗапретитьРаботуПользователей); + ВыполнитьУстановкуБлокировки(ЗапретитьРаботуПользователей); КонецПроцедуры @@ -31,10 +31,10 @@ ТекущийРежим = СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(); КонецЕсли; - ВременноЗапретитьРаботуПользователей = ТекущийРежим.Установлена; + ЗапретитьРаботуПользователей = ТекущийРежим.Установлена; СообщениеДляПользователей = СоединенияИБКлиентСервер.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение); - Если ВременноЗапретитьРаботуПользователей Тогда + Если ЗапретитьРаботуПользователей Тогда НачалоДействияБлокировки = ТекущийРежим.Начало; ОкончаниеДействияБлокировки = ТекущийРежим.Конец; Иначе diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo index 08f6ce75e..a6957a656 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo @@ -18,10 +18,10 @@ - ВременноЗапретитьРаботуПользователей + ЗапретитьРаботуПользователей ru - Временно запретить работу пользователей + Запретить работу пользователей Boolean diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index affe8fbfb..f20e0612c 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -190,7 +190,6 @@ КонецПроцедуры - &НаКлиенте Процедура ПодтвердитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -383,14 +382,19 @@ СписокОшибок = Новый СписокЗначений; ПолныйНомерТелефона = КодСтраны + КодГорода + НомерТелефона; НомерТелефонаТолькоЦифры = ТолькоЦифры(ПолныйНомерТелефона); + Если СтрДлина(НомерТелефонаТолькоЦифры) > 15 Тогда СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'Номер телефона слишком длинный'")); КонецЕсли; + Если НомерТелефонаСодержитНедопустимыеСимволы(ПолныйНомерТелефона) Тогда СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'Номер телефона содержит недопустимые символы'")); КонецЕсли; - Если КодСтраны = "7" И СтрДлина(НомерТелефона) > 7 Тогда - СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'В России номер телефона не может быть больше 7 цифр'")); + + Если КодСтраны = "7" ИЛИ КодСтраны = "+7" Тогда + Если СтрДлина(ТолькоЦифры(НомерТелефона)) > 7 Тогда + СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'В России номер телефона не может быть больше 7 цифр'")); + КонецЕсли; КонецЕсли; Если СтрНачинаетсяС(КодГорода, "9") И СтрДлина(КодГорода) <> 3 Тогда @@ -447,51 +451,18 @@ &НаКлиенте Функция НомерТелефонаСодержитНедопустимыеСимволы(Знач СтрокаПроверки) - СписокДопустимыхСимволов = Новый Соответствие; - СписокДопустимыхСимволов.Вставить("+", "+"); - СписокДопустимыхСимволов.Вставить("-", "-"); - СписокДопустимыхСимволов.Вставить(".", "."); - СписокДопустимыхСимволов.Вставить(",", ","); - СписокДопустимыхСимволов.Вставить("(", "("); - СписокДопустимыхСимволов.Вставить(")", ")"); - СписокДопустимыхСимволов.Вставить(" ", " "); - СписокДопустимыхСимволов.Вставить("w", "w"); - СписокДопустимыхСимволов.Вставить("p", "p"); - СписокДопустимыхСимволов.Вставить("1", "1"); - СписокДопустимыхСимволов.Вставить("2", "2"); - СписокДопустимыхСимволов.Вставить("3", "3"); - СписокДопустимыхСимволов.Вставить("4", "4"); - СписокДопустимыхСимволов.Вставить("5", "5"); - СписокДопустимыхСимволов.Вставить("6", "6"); - СписокДопустимыхСимволов.Вставить("7", "7"); - СписокДопустимыхСимволов.Вставить("8", "8"); - СписокДопустимыхСимволов.Вставить("9", "9"); - СписокДопустимыхСимволов.Вставить("0", "0"); + СписокДопустимыхСимволов = "+-.,() wp1234567890"; + Возврат СтрРазделить(СтрокаПроверки, СписокДопустимыхСимволов, Ложь).Количество() > 0; - Для НомерСимвола = 1 По СтрДлина(СтрокаПроверки) Цикл - Символ = Сред(СтрокаПроверки, НомерСимвола, 1); - Если СписокДопустимыхСимволов.Получить(Символ) = Неопределено Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ТолькоЦифры(Строка) +&НаКлиенте +Функция ТолькоЦифры(Знач Строка) - ОбработаннаяСтрока = ""; + ЛишниеСимволы = СтрСоединить(СтрРазделить(Строка, "0123456789"), ""); + Результат = СтрСоединить(СтрРазделить(Строка, ЛишниеСимволы), ""); - Для НомерСимвола = 1 По СтрДлина(Строка) Цикл - Символ = Сред(Строка, НомерСимвола, 1); - Если Символ >= "0" И Символ <= "9" Тогда - ОбработаннаяСтрока = ОбработаннаяСтрока + Символ; - КонецЕсли; - КонецЦикла; - - Возврат ОбработаннаяСтрока; + Возврат Результат; КонецФункции diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form index 65241b2fc..122239b9c 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form @@ -108,7 +108,6 @@ true InputField - Auto true Left true @@ -121,8 +120,48 @@ true true true + true + true + Normal + + + + ИсторияКомментарий + 52 + true + true + + + История.Комментарий + + + ИсторияКомментарийРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ИсторияКомментарийКонтекстноеМеню + 53 + true + + InputField + true + Auto + true + Left + true + + true + true + true true true + true Normal diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl index 9edd72ed1..efd5bb93d 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl @@ -105,6 +105,8 @@ Отказ = Истина; КонецЕсли; ПредыдущаяДата = Элемент.ТекущиеДанные.ДействуетС; + Иначе + ОткрытьФормуРедактированияАдреса(Элементы.История.ТекущаяСтрока); КонецЕсли; КонецПроцедуры @@ -206,7 +208,7 @@ ДействующийАдрес = Индекс; КонецЕсли; История[Индекс].ЭтоИсторическаяКонтактнаяИнформация = Истина; - История[Индекс].ХранитьИсториюИзменений = Истина; + История[Индекс].ХранитьИсториюИзменений = Истина; КонецЦикла; История[ДействующийАдрес].ЭтоИсторическаяКонтактнаяИнформация = Ложь; @@ -250,7 +252,8 @@ ДанныеСтроки = История.НайтиПоИдентификатору(ВыбраннаяСтрока); ПараметрыОткрытия.Вставить("ЗначенияПолей", ДанныеСтроки.ЗначенияПолей); ПараметрыОткрытия.Вставить("Представление", ДанныеСтроки.Представление); - ПараметрыОткрытия.Вставить("ДействуетС", ДанныеСтроки.ДействуетС); + ПараметрыОткрытия.Вставить("ДействуетС", ДанныеСтроки.ДействуетС); + ПараметрыОткрытия.Вставить("Комментарий", ДанныеСтроки.Комментарий); ДополнительныеПараметры = Новый Структура("ДействуетС, Новый", ДанныеСтроки.ДействуетС, НЕ ЗначениеЗаполнено(ДанныеСтроки.ЗначенияПолей)); КонецЕсли; diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl index 4d18c7abb..36d66dd79 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl @@ -236,9 +236,9 @@ ЧтениеXML.Прочитать(); // Body КомпонентыОбмена.Вставить("ФайлОбмена", ЧтениеXML); - + УстановитьПривилегированныйРежим(Истина); ОбменДаннымиXDTOСервер.ПроизвестиЧтениеДанных(КомпонентыОбмена); - + УстановитьПривилегированныйРежим(Ложь); ЧтениеXML.Закрыть(); Если ЗначениеЗаполнено(АдресНаСервере) Тогда УдалитьФайлы(АдресНаСервере); diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl index 030ed3ac2..a0027f6a9 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl @@ -1836,14 +1836,14 @@ &НаСервереБезКонтекста Функция МетодыМенеджераОбъектаДляРедактированияРеквизитов(ИмяОбъекта) - МодульИнтеграцияСтандартныхПодсистем = ОбщийМодуль("ИнтеграцияСтандартныхПодсистем"); + МодульИнтеграцияПодсистемБСП = ОбщийМодуль("ИнтеграцияПодсистемБСП"); МодульГрупповоеИзменениеОбъектовПереопределяемый = ОбщийМодуль("ГрупповоеИзменениеОбъектовПереопределяемый"); - Если МодульИнтеграцияСтандартныхПодсистем = Неопределено Или МодульГрупповоеИзменениеОбъектовПереопределяемый = Неопределено Тогда + Если МодульИнтеграцияПодсистемБСП = Неопределено Или МодульГрупповоеИзменениеОбъектовПереопределяемый = Неопределено Тогда Возврат Новый Массив; КонецЕсли; ОбъектыСЗаблокированнымиРеквизитами = Новый Соответствие; - МодульИнтеграцияСтандартныхПодсистем.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); + МодульИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); МодульГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); СведенияОМенеджереОбъекта = ОбъектыСЗаблокированнымиРеквизитами[ИмяОбъекта]; @@ -2766,7 +2766,8 @@ Если ЕстьНастроенныеОтборы() Тогда ТекстСообщенияОбОшибке = ""; КоличествоВыбранныхОбъектов = КоличествоВыбранныхОбъектов(Истина, , ТекстСообщенияОбОшибке); - ТекстНадписи = ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоВыбранныхОбъектов, НСтр("ru = 'элемент,элемента,элементов'")); + ТекстНадписи = СтрокаСЧисломДляЛюбогоЯзыка(НСтр("ru = ';%1 элемент;;%1 элемента;%1 элементов;%1 элемента'"), + КоличествоВыбранныхОбъектов); Иначе ТекстНадписи = НСтр("ru = 'Все элементы'"); КонецЕсли; @@ -4197,6 +4198,7 @@ // // Возвращаемое значение: // ФорматированнаяСтрока +&НаСервереБезКонтекста Функция ФорматированнаяСтрока(Знач Строка) СтрокиСВыделением = Новый СписокЗначений; @@ -4270,39 +4272,40 @@ КонецФункции -// Возвращает текстовое представление числа с единицей измерения в правильном склонении и числе. +// Формирует представление числа для определенного языка и параметров числа. // // Параметры: -// Число - Число - любое целое число. -// ПараметрыПредметаИсчисления - Строка - варианты написания единицы измерения в родительном падеже для одной, -// для двух и для пяти единиц, разделитель - запятая. +// Шаблон - Строка - Строка, содержит перечисленные через точку с запятой 6 форм строки +// для каждой категории числительного: +// - %1 обозначает позицию числа; +// Число - Число - Число, которое будет подставлено в строку вместо параметра "%1". +// Вид - ВидЧисловогоЗначения - Определяет вид числового значения, для которого формируется представление. +// - Количественное (по умолчанию) или Порядковое. +// ФорматнаяСтрока - Строка - Строка параметров форматирования. См. аналогичный параметр в СтрокаСЧислом. // // Возвращаемое значение: -// Строка - текстовое представление количества единиц, число записывается цифрами. +// Строка - Представление строки числа в требуемой форме. // -// Примеры: -// ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; -// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". -Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Число, Знач ПараметрыПредметаИсчисления) +// Пример: +// +// Строка = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка( +// НСтр("ru=';остался %1 день;;осталось %1 дня;осталось %1 дней;осталось %1 дня'; +// |en=';left %1 day;;;;left %1 days'"), +// 0.05,, "ЧДЦ=1"); +// +&НаСервереБезКонтекста +Функция СтрокаСЧисломДляЛюбогоЯзыка(Шаблон, Число, Вид = Неопределено, ФорматнаяСтрока = Неопределено) - Результат = Формат(Число, "ЧН=0"); - ПредставленияПредмета = Новый Массив; - - ПараметрыПредметаИсчисления = СтрРазделить(ПараметрыПредметаИсчисления, ","); - Для Каждого Параметр Из ПараметрыПредметаИсчисления Цикл - ПредставленияПредмета.Добавить(СокрЛП(Параметр)); - КонецЦикла; - - Число = Число % 100; - Если Число > 20 Тогда - Число = Число % 10; + Если ПустаяСтрока(Шаблон) Тогда + Возврат Формат(Число, ФорматнаяСтрока); КонецЕсли; - - Индекс = ?(Число = 1, 0, ?(Число > 1 И Число < 5, 1, 2)); - Результат = Результат + " " + ПредставленияПредмета[Индекс]; - - Возврат Результат; - + + Если Вид = Неопределено Тогда + Вид = ВидЧисловогоЗначения.Количественное; + КонецЕсли; + + Возврат СтрокаСЧислом(Шаблон, Число, Вид, ФорматнаяСтрока); + КонецФункции // Возвращает признак, является ли конфигурация базовой. @@ -4310,6 +4313,7 @@ // Возвращаемое значение: // Булево - Истина, если конфигурация - базовая. // +&НаСервереБезКонтекста Функция ЭтоБазоваяВерсияКонфигурации() Возврат СтрНайти(ВРег(Метаданные.Имя), "БАЗОВАЯ") > 0; @@ -4319,6 +4323,7 @@ // Возвращает признак включения условного разделения. // В случае вызова в неразделенной конфигурации возвращает Ложь. // +&НаСервереБезКонтекста Функция РазделениеВключено() ДоступнаРаботаВМоделиСервиса = Метаданные.ФункциональныеОпции.Найти("РаботаВМоделиСервиса"); @@ -4336,6 +4341,7 @@ // Возвращаемое значение: // Булево. // +&НаСервереБезКонтекста Функция ЭтоРазделеннаяКонфигурация() ЕстьРазделители = Ложь; diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html index 5434ea891..ff46d0c53 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html @@ -3,7 +3,7 @@

        Групповое изменение реквизитов предусмотрено в двух вариантах:

        • в большинстве списков программы предусмотрена команда Изменить выделенные.
        • -
          только для администратора: в разделе программы Администрирование - Поддержка и обслуживание по команде Групповое изменение реквизитов или в случае подключения в качестве внешней обработки - в соответствующем разделе программы по команде Дополнительные обработки - Групповое изменение реквизитов.

        Изменение выделенных элементов списка 

        +
        только для администратора: в разделе программы Администрирование - Обслуживание - Корректировка данных по команде Групповое изменение реквизитов или в случае подключения в качестве внешней обработки - в соответствующем разделе программы по команде Дополнительные обработки - Групповое изменение реквизитов.

      Изменение выделенных элементов списка 

      Изменение значений реквизитов (а также дополнительных реквизитов и сведений) у выбранных элементов списка.

      Ввод новых значений реквизитов выбранных элементов списка

      • Доступные для изменения поля выбранных элементов списка отображаются в строках колонки Реквизит. Можно изменить сразу несколько реквизитов. diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl index 3769d36a7..52b334384 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl @@ -301,8 +301,11 @@ Исключение - РазблокироватьДанныеДляРедактирования(Ссылка); ОтменитьТранзакцию(); + Если Параметры.ИзменятьВТранзакции Тогда + РазблокироватьДанныеДляРедактирования(Ссылка); + КонецЕсли; + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, КраткоеПредставлениеОшибки); Если ОстанавливатьИзменениеПриОшибке Или Параметры.ИзменятьВТранзакции Тогда @@ -344,7 +347,6 @@ ЗаблокироватьДанныеДляРедактирования(Ссылка); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(ВидОбъектаПоСсылке(Ссылка) + "." + Ссылка.Метаданные().Имя); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); Блокировка.Заблокировать(); @@ -687,14 +689,14 @@ Функция МенеджерыОбъектовДляРедактированияРеквизитов() - МодульИнтеграцияСтандартныхПодсистем = ОбщийМодуль("ИнтеграцияСтандартныхПодсистем"); + МодульИнтеграцияПодсистемБСП = ОбщийМодуль("ИнтеграцияПодсистемБСП"); МодульГрупповоеИзменениеОбъектовПереопределяемый = ОбщийМодуль("ГрупповоеИзменениеОбъектовПереопределяемый"); - Если МодульИнтеграцияСтандартныхПодсистем = Неопределено Или МодульГрупповоеИзменениеОбъектовПереопределяемый = Неопределено Тогда + Если МодульИнтеграцияПодсистемБСП = Неопределено Или МодульГрупповоеИзменениеОбъектовПереопределяемый = Неопределено Тогда Возврат Новый Массив; КонецЕсли; ОбъектыСЗаблокированнымиРеквизитами = Новый Соответствие; - МодульИнтеграцияСтандартныхПодсистем.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); + МодульИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); МодульГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); Возврат ОбъектыСЗаблокированнымиРеквизитами; @@ -866,7 +868,7 @@ МодульУправлениеСвойствами = ОбщийМодуль("УправлениеСвойствами"); СписокСвойств = Новый Массив; СписокСвойств.Добавить(ОписаниеРеквизита.Свойство); - ЗначенияСвойств = МодульУправлениеСвойствами.ПолучитьЗначенияСвойств(Объект.Ссылка, Истина, Истина, СписокСвойств); + ЗначенияСвойств = МодульУправлениеСвойствами.ЗначенияСвойств(Объект.Ссылка, Истина, Истина, СписокСвойств); Для Каждого СтрокаТаблицы Из ЗначенияСвойств.НайтиСтроки(Новый Структура("Свойство", ОписаниеРеквизита.Свойство)) Цикл Значение = СтрокаТаблицы.Значение; КонецЦикла; diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl index 983a1e542..c107cdbbc 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl @@ -162,6 +162,7 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере Процедура СоздатьТаблицуФормы(Знач ИмяПоляТаблицыФормы, Знач ИмяРеквизитаДанныеФормыКоллекция, Знач ТаблицаЗначений) Если ТипЗнч(ТаблицаЗначений) <> Тип("ТаблицаЗначений") Тогда diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl index ecdfdae2e..cbe5ed8c6 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl @@ -96,7 +96,7 @@ КонецЕсли; КонецЦикла; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииСправочниковДляЗагрузкиДанных(ИнформацияОСправочниках); + ИнтеграцияПодсистемБСП.ПриОпределенииСправочниковДляЗагрузкиДанных(ИнформацияОСправочниках); ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных(ИнформацияОСправочниках); ИнформацияОСправочниках.Колонки.Добавить("ИнформацияОТипеЗагрузки"); @@ -171,22 +171,30 @@ Процедура УстановитьРежимВставкиИзБуфераОбмена(ШаблонСДанными, ИнформацияПоКолонкам, ОписаниеТипов) Экспорт СоответствиеКолонок = Новый Соответствие; - ЗаголовокКолонки = ""; - Разделитель = ""; + ЗаголовокКолонки = ""; + Разделитель = ""; + ТипыОбъектовПоддерживающиеВводПоСтроке = ТипыОбъектовПоддерживающиеВводПоСтроке(); - Для каждого Тип Из ОписаниеТипов.Типы() Цикл + Для каждого Тип Из ОписаниеТипов.Типы() Цикл ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + Если ОбъектМетаданных <> Неопределено Тогда СтруктураОбъекта = РазложитьПолноеИмяОбъекта(ОбъектМетаданных.ПолноеИмя()); - Для каждого Колонка Из ОбъектМетаданных.ВводПоСтроке Цикл - Если СоответствиеКолонок.Получить(Колонка.Имя) = Неопределено Тогда + Если ТипыОбъектовПоддерживающиеВводПоСтроке[СтруктураОбъекта.ТипОбъекта] Тогда + + Для каждого Колонка Из ОбъектМетаданных.ВводПоСтроке Цикл - ЗаголовокКолонки = ЗаголовокКолонки + Разделитель +Колонка.Имя; - Разделитель = ", "; - СоответствиеКолонок.Вставить(Колонка.Имя, Колонка.Имя); - КонецЕсли; - КонецЦикла; + Если СоответствиеКолонок.Получить(Колонка.Имя) = Неопределено Тогда + ЗаголовокКолонки = ЗаголовокКолонки + Разделитель + Колонка.Имя; + Разделитель = ", "; + СоответствиеКолонок.Вставить(Колонка.Имя, Колонка.Имя); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + Если СтруктураОбъекта.ТипОбъекта = "Документ" Тогда ЗаголовокКолонки = ЗаголовокКолонки + Разделитель + "Представление"; КонецЕсли; @@ -202,9 +210,24 @@ ШаблонСДанными.Очистить(); ШаблонСДанными.Вывести(Шапка); - КонецПроцедуры +Функция ТипыОбъектовПоддерживающиеВводПоСтроке() + + СписокОбъектов = Новый Соответствие; + СписокОбъектов.Вставить("БизнесПроцесс", Истина); + СписокОбъектов.Вставить("Документ", Истина); + СписокОбъектов.Вставить("Задача", Истина); + СписокОбъектов.Вставить("ПланВидовРасчета", Истина); + СписокОбъектов.Вставить("ПланВидовХарактеристик", Истина); + СписокОбъектов.Вставить("ПланОбмена", Истина); + СписокОбъектов.Вставить("ПланСчетов", Истина); + СписокОбъектов.Вставить("Справочник", Истина); + + Возврат СписокОбъектов; + +КонецФункции + Процедура СопоставитьЗначениеКолонкиАвто(ТаблицаСопоставления, ИмяКолонки) Экспорт Типы = ТаблицаСопоставления.Колонки.ОбъектСопоставления.ТипЗначения.Типы(); @@ -298,7 +321,7 @@ Возврат Неопределено; КонецЕсли; - Запрос = Новый Запрос; // Проверка доступности документа с учетом RLS. + Запрос = Новый Запрос; // Проверка доступности документа с учетом ограничения на уровне записей. Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДокументДляПроверки.Ссылка @@ -1193,7 +1216,6 @@ ИмяОбъекта.Вставить("НазваниеОбъекта"); ИмяОбъекта.Вставить("ИмяТабличнойЧасти"); - Если Результат.Количество() = 2 Тогда Если Результат[0] = "Документ" ИЛИ Результат[0] = "Справочник" ИЛИ Результат[0] = "БизнесПроцесс" ИЛИ Результат[0] = "Перечисление" ИЛИ Результат[0] = "ПланВидовХарактеристик" @@ -1535,6 +1557,7 @@ КонецЕсли; ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); ИнформацияОбОшибке = ИнформацияОбОшибке(); СтрокаТаблицы.РезультатСопоставленияСтроки = "Пропущен"; СтрокаТаблицы.ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); @@ -1545,7 +1568,6 @@ ИмяСправочника, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, МенеджерСправочника, ЭлементСправочника.Ссылка, ТекстСообщения); - ОтменитьТранзакцию(); КонецПопытки; КонецЦикла; diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl index b1cae93b1..64e58a080 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl @@ -93,9 +93,7 @@ // АдресХранилища - Строка - адрес внутреннего хранилища. Процедура ПолучитьДанные(ПараметрыЗагрузкиКлассификатора, АдресХранилища = "") Экспорт - УстановитьПривилегированныйРежим(Истина); - ТекущаяВерсияКлассификатора = Константы.ВерсияКлассификатораБанков.Получить(); - УстановитьПривилегированныйРежим(Ложь); + ТекущаяВерсияКлассификатора = ВерсияКлассификатора(); ВременныйКаталог = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ВременныйКаталог); @@ -215,9 +213,7 @@ КонецЕсли; - Если ПараметрыПолученияФайлов["ВерсияКлассификатора"] > ТекущаяВерсияКлассификатора Тогда - УстановитьВерсиюКлассификатораБанков(ПараметрыПолученияФайлов["ВерсияКлассификатора"]); - КонецЕсли; + УстановитьВерсиюКлассификатора(ПараметрыПолученияФайлов["ВерсияКлассификатора"]); ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Истина); ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); @@ -266,8 +262,6 @@ ТекстБИК = Новый ЧтениеТекста(ПараметрыЗагрузкиФайлов["ПутьКФайлуБИК"], "windows-1251"); СтрокаТекстаБИК = ТекстБИК.ПрочитатьСтроку(); - ДатаЗагрузки = ТекущаяУниверсальнаяДата(); - ПараметрыЗагрузкиДанных = Новый Соответствие; ПараметрыЗагрузкиДанных.Вставить("Загружено", ПараметрыЗагрузкиФайлов["Загружено"]); ПараметрыЗагрузкиДанных.Вставить("Обновлено", ПараметрыЗагрузкиФайлов["Обновлено"]); @@ -517,7 +511,6 @@ // Выполняет загрузку классификатора банков РФ из файла, полученного с сайта 1С. Функция ЗагрузитьДанныеИзФайла(ИмяФайла) Экспорт - ПапкаСИзвлеченнымиФайлами = ИзвлечьФайлыИзАрхива(ИмяФайла); Если ФайлыКлассификатораПолучены(ПапкаСИзвлеченнымиФайлами) Тогда Параметры = Новый Соответствие; @@ -535,7 +528,7 @@ Параметры.Вставить("ЗагрузкаВыполнена", Неопределено); ЗагрузитьДанные(Параметры); - УстановитьВерсиюКлассификатораБанков(); + УстановитьВерсиюКлассификатора(); КонецЕсли; КонецФункции @@ -787,8 +780,8 @@ ПараметрыЗагрузкиФайловИТС.Вставить("Обновлено", ПараметрыЗагрузкиДанныхИТС["Обновлено"]); КонецЦикла; - - УстановитьВерсиюКлассификатораБанков(ДатаВерсии); + + УстановитьВерсиюКлассификатора(ДатаВерсии); УдалитьФайлы(ВременныйКаталог); Если ПустаяСтрока(ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]) Тогда @@ -967,24 +960,10 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции -// Устанавливает значение даты загрузки данных классификатора. -// -// Параметры: -// ДатаВерсии - ДатаВремя - Дата загрузки данных классификатора. -Процедура УстановитьВерсиюКлассификатораБанков(ДатаВерсии = "") - УстановитьПривилегированныйРежим(Истина); - Если ТипЗнч(ДатаВерсии) <> Тип("Дата") Тогда - Константы.ВерсияКлассификатораБанков.Установить(ТекущаяУниверсальнаяДата()); - Иначе - Константы.ВерсияКлассификатораБанков.Установить(ДатаВерсии); - КонецЕсли; -КонецПроцедуры - // Определяет нужно ли обновление данных классификатора. // Функция КлассификаторАктуален() Экспорт - УстановитьПривилегированныйРежим(Истина); - ПоследнееОбновление = Константы.ВерсияКлассификатораБанков.Получить(); + ПоследнееОбновление = ДатаПоследнейЗагрузки(); ДопустимаяПросрочка = 30*60*60*24; Если ТекущаяДатаСеанса() > ПоследнееОбновление + ДопустимаяПросрочка Тогда @@ -996,8 +975,7 @@ Функция АктуальностьКлассификатораБанков() Экспорт - УстановитьПривилегированныйРежим(Истина); - ПоследнееОбновление = Константы.ВерсияКлассификатораБанков.Получить(); + ПоследнееОбновление = ДатаПоследнейЗагрузки(); ДопустимаяПросрочка = 60*60*24; Результат = Новый Структура; @@ -1066,6 +1044,41 @@ Метаданные.РегламентныеЗадания.ЗагрузкаКлассификатораБанков, ИзменяемыеПараметры); КонецПроцедуры +Функция ВерсияКлассификатора() + Возврат СведенияОКлассификаторе().ДатаМодификации; +КонецФункции + +Функция ДатаПоследнейЗагрузки() + Возврат СведенияОКлассификаторе().ДатаЗагрузки; +КонецФункции + +Функция СведенияОКлассификаторе() + УстановитьПривилегированныйРежим(Истина); + Результат = Константы.ВерсияКлассификатораБанков.Получить().Получить(); + УстановитьПривилегированныйРежим(Ложь); + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Результат = НовоеОписаниеКлассификатора(); + КонецЕсли; + Возврат Результат; +КонецФункции + +Процедура УстановитьВерсиюКлассификатора(Знач ВерсияКлассификатора = Неопределено) + Если Не ЗначениеЗаполнено(ВерсияКлассификатора) Тогда + ВерсияКлассификатора = ТекущаяУниверсальнаяДата(); + КонецЕсли; + СведенияОКлассификаторе = НовоеОписаниеКлассификатора(ВерсияКлассификатора, ТекущаяДатаСеанса()); + УстановитьПривилегированныйРежим(Истина); + Константы.ВерсияКлассификатораБанков.Установить(Новый ХранилищеЗначения(СведенияОКлассификаторе)); + УстановитьПривилегированныйРежим(Ложь); +КонецПроцедуры + +Функция НовоеОписаниеКлассификатора(ДатаМодификации = '00010101', ДатаЗагрузки = '00010101') + Результат = Новый Структура; + Результат.Вставить("ДатаМодификации", ДатаМодификации); + Результат.Вставить("ДатаЗагрузки", ДатаЗагрузки); + Возврат Результат; +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl index 7e7d7f69f..c20206cd3 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl @@ -282,7 +282,7 @@ УстановитьПривилегированныйРежим(Истина); ПараметрыПолучения = ПараметрыАутентификацииНаСайте(); УстановитьПривилегированныйРежим(Ложь); -КонецЕсли; + КонецЕсли; ВалютыЗагружаемыеИзИнтернета = ВалютыЗагружаемыеИзИнтернета(); diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl index 2e602441c..a52d8677e 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl @@ -848,9 +848,9 @@ &НаКлиенте Функция СообщениеОЗавершении() - Возврат СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( - МестаИспользования.Количество(), - НСтр("ru = 'элемент объединен в:'") + "," + НСтр("ru = 'элемента объединено в:'") + "," + НСтр("ru = 'элементов объединено в:'")); + Возврат СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка( + НСтр("ru = ';%1 элемент объединен в:;;%1 элемента объединено в:;%1 элементов объединено в:;%1 элемента объединено в:'"), + МестаИспользования.Количество()); КонецФункции &НаКлиенте diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form new file mode 100644 index 000000000..83bbfcc54 --- /dev/null +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form @@ -0,0 +1,544 @@ + + + + СписокКалендарей + 1 + + <key>ru</key> + <value>Список календарей</value> + + true + true + + true + + + Календари + + false + None + Add + Change + Choose + Copy + CopyToClipboard + Delete + EndEdit + MoveDown + MoveUp + OutputList + SortListAsc + SortListDesc + + Код + 4 + true + true + + true + + + Календари.Код + + + КодРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + Наименование + 8 + true + true + + true + + + Календари.Наименование + + + НаименованиеExtendedTooltip + 31 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 9 + true + + InputField + Enter + true + Left + true + + 20 + true + true + false + true + true + true + Normal + + + Top + + СписокКалендарейКоманднаяПанель + 3 + + Выбрать + 14 + true + true + + true + + false + + ВыбратьExtendedTooltip + 24 + Label + true + true + + Left + + + Form.Command.Выбрать + true + true + true + UserCmds + Auto + + + Найти + 12 + true + true + + true + + false + + НайтиExtendedTooltip + 25 + Label + true + true + + Left + + + Form.Item.СписокКалендарей.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ОтменитьПоиск + 13 + true + true + + true + + false + + ОтменитьПоискExtendedTooltip + 26 + Label + true + true + + Left + + + Form.Item.СписокКалендарей.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 17 + true + true + + true + + + ФормаСправкаExtendedTooltip + 27 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Left + + + Selection + СписокКалендарейВыбор + + + СписокКалендарейСтрокаПоиска + 34 + + СписокКалендарейСтрокаПоискаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + СписокКалендарейСтрокаПоискаКонтекстноеМеню + 35 + true + + СписокКалендарей + + true + + + + СписокКалендарейСостояниеПросмотра + 37 + + СписокКалендарейСостояниеПросмотраРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + СписокКалендарейСостояниеПросмотраКонтекстноеМеню + 38 + true + + ViewStatusAddition + СписокКалендарей + + true + + + + СписокКалендарейУправлениеПоиском + 40 + + СписокКалендарейУправлениеПоискомРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + СписокКалендарейУправлениеПоискомКонтекстноеМеню + 41 + true + + SearchControlAddition + СписокКалендарей + + true + + + + СписокКалендарейРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СписокКалендарейКонтекстноеМеню + 2 + + СписокКалендарейКонтекстноеМенюВыбрать + 18 + true + true + + true + + + СписокКалендарейКонтекстноеМенюВыбратьРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Выбрать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКалендарейКонтекстноеМенюНайти + 19 + true + true + + true + + + СписокКалендарейКонтекстноеМенюНайтиРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Item.СписокКалендарей.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СписокКалендарейКонтекстноеМенюОтменитьПоиск + 20 + true + true + + true + + + СписокКалендарейКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Item.СписокКалендарей.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + + true + true + true + true + true + true + true + true + MultiRow + Row +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + +
        + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Календари + + <key>ru</key> + <value>Календари</value> + + 1 + + ValueTable + + + true + + + true + + + Код + + <key>ru</key> + <value>Код</value> + + 1 + + String + + 3 + + + + true + + + true + + + + Наименование + 3 + + String + + 100 + + + + true + + + true + + + + БазовыйКалендарь + + <key>ru</key> + <value>Базовый календарь</value> + + 2 + + String + + 3 + + + + true + + + true + + + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Создание новой валюты на основании выбора + + + true + + + StdPicture.ChooseValue + + + + ВыбратьВыполнить + + + DontUse + Auto + + + + + +
        diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Help/ru.html b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Help/ru.html new file mode 100644 index 000000000..9eddf17c1 --- /dev/null +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Help/ru.html @@ -0,0 +1,17 @@ + +

        Предназначен для добавления новых производственных календарей (рекомендуется).

        +

        По умолчанию в программе установлен и используется в работе Производственный календарь РФ Российская федерация.

        +

        Производственный календарь РФ (который является общегосударственным) является базовым, входит в поставляемые данные программы и обновляется по мере утверждения календаря и переносов праздников в РФ.

        +

        Также в программе предусмотрены региональные производственные календари.

        +

        Региональный производственный календарь формируется на основании базового календаря - Производственного календаря РФ. При изменении федерального календаря автоматически обновляются региональные календари в классификаторе.

        +

        Региональные производственные календари в списке упорядочены по коду региона.

        +

        Программа позволяет по ИНН определить региональный производственный календарь.

        +

        В классификаторе производственных календарей выводится:

        +
        • Наименование - полное наименование. +
        • Код - код календаря соответствует общепринятому коду региона.

        Добавление производственного календаря из классификатора в список производственных календарей

        +
        • +
          Выделив производственный календарь, нажмите кнопку Выбрать.
          +
        • +
          Воспользуйтесь двойным щелчком мыши по производственному календарю для добавления в список производственных календарей.

        См. также: 

        + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl new file mode 100644 index 000000000..9dc208c67 --- /dev/null +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl @@ -0,0 +1,154 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + // Заполнение списка календарей. + ЗакрыватьПриВыборе = Ложь; + ЗаполнитьТаблицуКалендарей(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокВалют + +&НаКлиенте +Процедура СписокКалендарейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОбработатьВыборВСпискеКалендарей(СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыбратьВыполнить() + + ОбработатьВыборВСпискеКалендарей(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ЗаполнитьТаблицуКалендарей() + + ТаблицаКалендарей = КалендарныеГрафики.ТаблицаПроизводственныхКалендарей(); + + Для Каждого СтрокаТаблицы Из ТаблицаКалендарей Цикл + НоваяСтрока = Календари.Добавить(); + НоваяСтрока.Код = СтрокаТаблицы.Code; + НоваяСтрока.Наименование = СтрокаТаблицы.Description; + НоваяСтрока.БазовыйКалендарь = СтрокаТаблицы.Base; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьВыборВСпискеКалендарей(СтандартнаяОбработка = Неопределено) + + // Добавление элемента справочника и вывод результата пользователю. + СтандартнаяОбработка = Ложь; + + ТекущаяСсылка = СохранитьВыбранныеСтроки(Элементы.СписокКалендарей.ВыделенныеСтроки); + + ОповеститьОВыборе(ТекущаяСсылка); + + ПоказатьОповещениеПользователя(НСтр("ru = 'Календари добавлены.'"), , , БиблиотекаКартинок.Информация32); + Закрыть(); + +КонецПроцедуры + +&НаСервере +Функция СохранитьВыбранныеСтроки(Знач ВыбранныеСтроки) + + ТекущаяСсылка = Неопределено; + + КодыДобавленныхКалендарей = Новый Массив; + Для каждого НомерСтроки Из ВыбранныеСтроки Цикл + ТекущиеДанные = Календари[НомерСтроки]; + + СтрокаВБазе = Справочники.ПроизводственныеКалендари.НайтиПоКоду(ТекущиеДанные.Код); + Если ЗначениеЗаполнено(СтрокаВБазе) Тогда + Если НомерСтроки = Элементы.СписокКалендарей.ТекущаяСтрока Или ТекущаяСсылка = Неопределено Тогда + ТекущаяСсылка = СтрокаВБазе; + КонецЕсли; + КодыДобавленныхКалендарей.Добавить(ТекущиеДанные.Код); + Продолжить; + КонецЕсли; + + // Проверяем, есть ли базовый календарь. + БазовыйКалендарь = Неопределено; + Если ЗначениеЗаполнено(ТекущиеДанные.БазовыйКалендарь) Тогда + БазовыйКалендарь = БазовыйКалендарь(ТекущиеДанные.БазовыйКалендарь); + КонецЕсли; + + КалендарьСсылка = СоздатьКалендарь(ТекущиеДанные.Код, ТекущиеДанные.Наименование, БазовыйКалендарь); + КодыДобавленныхКалендарей.Добавить(ТекущиеДанные.Код); + + Если НомерСтроки = Элементы.СписокКалендарей.ТекущаяСтрока Или ТекущаяСсылка = Неопределено Тогда + ТекущаяСсылка = КалендарьСсылка; + КонецЕсли; + КонецЦикла; + + ЗагрузитьДанныеПроизводственныхКалендарей(КодыДобавленныхКалендарей); + + Возврат ТекущаяСсылка; + +КонецФункции + +&НаСервере +Функция БазовыйКалендарь(КодБазовогоКалендаря) + + БазовыйКалендарьСсылка = Справочники.ПроизводственныеКалендари.НайтиПоКоду(КодБазовогоКалендаря); + Если ЗначениеЗаполнено(БазовыйКалендарьСсылка) Тогда + Возврат БазовыйКалендарьСсылка; + КонецЕсли; + + ОтборСтрок = Новый Структура("Код"); + ОтборСтрок.Код = КодБазовогоКалендаря; + НайденныеСтроки = Календари.НайтиСтроки(ОтборСтрок); + + Если НайденныеСтроки.Количество() = 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Календарь с кодом %1, указанный в качестве базового, отсутствует в списке поставляемых.'"), + КодБазовогоКалендаря); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + Возврат СоздатьКалендарь(НайденныеСтроки[0].Код, НайденныеСтроки[0].Наименование); + +КонецФункции + +&НаСервере +Функция СоздатьКалендарь(Код, Наименование, БазовыйКалендарь = Неопределено) + + НовыйЭлемент = Справочники.ПроизводственныеКалендари.СоздатьЭлемент(); + НовыйЭлемент.Код = Код; + НовыйЭлемент.Наименование = Наименование; + НовыйЭлемент.БазовыйКалендарь = БазовыйКалендарь; + НовыйЭлемент.Записать(); + + Возврат НовыйЭлемент.Ссылка; + +КонецФункции + +&НаСервере +Процедура ЗагрузитьДанныеПроизводственныхКалендарей(КодыКалендарей) + + ТаблицаДанных = Справочники.ПроизводственныеКалендари.РезультатЗаполненияПроизводственныхКалендарейПоУмолчанию(КодыКалендарей); + Справочники.ПроизводственныеКалендари.ОбновитьДанныеПроизводственныхКалендарей(ТаблицаДанных); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl index 1c01a38ed..1c3fa2179 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl @@ -19,6 +19,22 @@ КонецФункции +Функция РегиональныйПроизводственныйКалендарь(КПП) Экспорт + + Если Не ЗначениеЗаполнено(КПП) Тогда + Возврат Неопределено; + КонецЕсли; + + РегиональныйКалендарь = Справочники.ПроизводственныеКалендари.НайтиПоКоду(Лев(СокрЛП(КПП), 2)); + + Если РегиональныйКалендарь.Пустая() Тогда + Возврат ОсновнойПроизводственныйКалендарь(); + КонецЕсли; + + Возврат РегиональныйКалендарь; + +КонецФункции + // Заполняет даты праздничных дней по производственному календарю для конкретного календарного года. // // Параметры: @@ -30,52 +46,390 @@ // Процедура ЗаполнитьПраздничныеДни(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) Экспорт - Если КодПроизводственногоКалендаря = "РФ" Тогда + ЗаполнитьПраздничныеДниРоссийскаяФедерация(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиАдыгея(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиБашкортостан(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиБурятия(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиДагестан(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниКабардиноБалкарскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиКалмыкия(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниКарачаевоЧеркесскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиКоми(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиСахаЯкутия(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиТатарстан(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиТыва(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниЧеченскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниЧувашскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниСтавропольскогоКрая(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниПензенскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниСаратовскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниЗабайкальскогоКрая(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниУстьОрдынскогоБурятскогоОкругаИркутскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниРеспубликиКрым(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниСевастополя(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниРоссийскаяФедерация(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "РФ" Тогда + Возврат; + КонецЕсли; - // 1, 2, 3, 4, 5, 6 и 8 января - Новогодние каникулы. - ДобавитьПраздничныйДень(ПраздничныеДни, "01.01", НомерГода, Ложь); - ДобавитьПраздничныйДень(ПраздничныеДни, "02.01", НомерГода, Ложь); - ДобавитьПраздничныйДень(ПраздничныеДни, "03.01", НомерГода, Ложь); - ДобавитьПраздничныйДень(ПраздничныеДни, "04.01", НомерГода, Ложь); - ДобавитьПраздничныйДень(ПраздничныеДни, "05.01", НомерГода, Ложь); - ДобавитьПраздничныйДень(ПраздничныеДни, "06.01", НомерГода, Ложь); - ДобавитьПраздничныйДень(ПраздничныеДни, "08.01", НомерГода, Ложь); - - // 7 января - Рождество Христово. - ДобавитьПраздничныйДень(ПраздничныеДни, "07.01", НомерГода, Ложь); - - // 23 февраля - День защитника Отечества. - ДобавитьПраздничныйДень(ПраздничныеДни, "23.02", НомерГода); - - // 8 марта - Международный женский день. - ДобавитьПраздничныйДень(ПраздничныеДни, "08.03", НомерГода); - - // 1 мая - Праздник Весны и Труда. - ДобавитьПраздничныйДень(ПраздничныеДни, "01.05", НомерГода); - - // 9 мая - День Победы - ДобавитьПраздничныйДень(ПраздничныеДни, "09.05", НомерГода); - - // 12 июня - День России - ДобавитьПраздничныйДень(ПраздничныеДни, "12.06", НомерГода); - - // 4 ноября - День народного единства. - ДобавитьПраздничныйДень(ПраздничныеДни, "04.11", НомерГода); + ДобавитьПраздничныеДниРоссийскойФедерации(НомерГода, ПраздничныеДни); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниРеспубликиАдыгея(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "01" Тогда + Возврат; + КонецЕсли; + // 5 октября - День образования Республики Адыгея. + ДобавитьПраздничныйДень(ПраздничныеДни, 5, 10, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниРеспубликиБашкортостан(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "02" Тогда + Возврат; + КонецЕсли; + + // 11 октября - День Республики - + // День принятия Декларации о государственном суверенитете Башкирской Советской Социалистической Республики. + ДобавитьПраздничныйДень(ПраздничныеДни, 11, 10, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниРеспубликиБурятия(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "03" Тогда + Возврат; + КонецЕсли; + + ДобавитьПраздникЦаганСар(ПраздничныеДни, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниРеспубликиДагестан(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "05" Тогда + Возврат; + КонецЕсли; + + // 26 июля - День Конституции. + ДобавитьПраздничныйДень(ПраздничныеДни, 26, 7, НомерГода); + + // 15 сентября - День единства народов Дагестана. + ДобавитьПраздничныйДень(ПраздничныеДни, 15, 9, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниКабардиноБалкарскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "07" Тогда + Возврат; + КонецЕсли; + + // 28 марта - День возрождения балкарского народа. + ДобавитьПраздничныйДень(ПраздничныеДни, 28, 3, НомерГода, Ложь, Ложь); + + // 21 мая - День памяти адыгов (черкесов) - жертв Русско-Кавказской войны. + ДобавитьПраздничныйДень(ПраздничныеДни, 21, 5, НомерГода, Ложь, Ложь); + + // 1 сентября - День государственности Кабардино-Балкарской Республики (День Республики). + ДобавитьПраздничныйДень(ПраздничныеДни, 1, 9, НомерГода, Ложь, Ложь); + + // 20 сентября - День адыгов (черкесов). + ДобавитьПраздничныйДень(ПраздничныеДни, 20, 9, НомерГода, Ложь, Ложь); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниРеспубликиКалмыкия(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "08" Тогда + Возврат; + КонецЕсли; + + // 5 апреля - День принятия Степного Уложения (Конституции). + ДобавитьПраздничныйДень(ПраздничныеДни, 5, 4, НомерГода); + + // 28 декабря - День памяти жертв депортации калмыцкого народа. + ДобавитьПраздничныйДень(ПраздничныеДни, 28, 12, НомерГода, Ложь, Ложь, Истина); + + ДобавитьПраздникЦаганСар(ПраздничныеДни, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниКарачаевоЧеркесскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "09" Тогда + Возврат; + КонецЕсли; + + // 3 мая - День возрождения карачаевского народа. + ДобавитьПраздничныйДень(ПраздничныеДни, 3, 5, НомерГода); + + Если НомерГода >= 2017 Тогда + ДобавитьПраздникРадоница(ПраздничныеДни, НомерГода, Ложь, Ложь, Истина); КонецЕсли; КонецПроцедуры -Процедура ДобавитьПраздничныйДень(ПраздничныеДни, ПраздничныйДень, НомерГода, ПереноситьВыходной = Истина) +Процедура ЗаполнитьПраздничныеДниРеспубликиКоми(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) - ДеньМесяц = СтрРазделить(ПраздничныйДень, "."); + Если КодПроизводственногоКалендаря <> "11" Тогда + Возврат; + КонецЕсли; - НоваяСтрока = ПраздничныеДни.Добавить(); - НоваяСтрока.Дата = Дата(НомерГода, ДеньМесяц[1], ДеньМесяц[0]); - НоваяСтрока.ПереноситьВыходной = ПереноситьВыходной; + // 22 августа - День Республики Коми. + ДобавитьПраздничныйДень(ПраздничныеДни, 22, 8, НомерГода, Ложь); КонецПроцедуры +Процедура ЗаполнитьПраздничныеДниРеспубликиСахаЯкутия(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "14" Тогда + Возврат; + КонецЕсли; + + // 27 апреля - День Республики Саха (Якутия). + ДобавитьПраздничныйДень(ПраздничныеДни, 27, 4, НомерГода); + + // 21 июня - День национального праздника "Ысыах". + ДобавитьПраздничныйДень(ПраздничныеДни, 21, 6, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниРеспубликиТатарстан(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "16" Тогда + Возврат; + КонецЕсли; + + // 30 августа - День Республики Татарстан. + ДобавитьПраздничныйДень(ПраздничныеДни, 30, 8, НомерГода, Ложь); + + // 6 ноября - День Конституции Республики Татарстан. + ДобавитьПраздничныйДень(ПраздничныеДни, 6, 11, НомерГода, Ложь); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниРеспубликиТыва(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "17" Тогда + Возврат; + КонецЕсли; + + // 6 мая - День Конституции. + ДобавитьПраздничныйДень(ПраздничныеДни, 6, 5, НомерГода); + + // 15 августа - День Республики. + ДобавитьПраздничныйДень(ПраздничныеДни, 15, 8, НомерГода); + + ДобавитьПраздникЦаганСар(ПраздничныеДни, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниЧеченскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "20" Тогда + Возврат; + КонецЕсли; + + // 23 марта - День Конституции. + ДобавитьПраздничныйДень(ПраздничныеДни, 23, 3, НомерГода); + + // 16 апреля - День мира. + ДобавитьПраздничныйДень(ПраздничныеДни, 16, 4, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниЧувашскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "21" Тогда + Возврат; + КонецЕсли; + + // 24 июня - День республики. + ДобавитьПраздничныйДень(ПраздничныеДни, 24, 6, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниСтавропольскогоКрая(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "26" Тогда + Возврат; + КонецЕсли; + + ДобавитьПраздникРадоница(ПраздничныеДни, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниЗабайкальскогоКрая(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "75" Тогда + Возврат; + КонецЕсли; + + ДобавитьПраздникЦаганСар(ПраздничныеДни, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниУстьОрдынскогоБурятскогоОкругаИркутскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "85" Тогда + Возврат; + КонецЕсли; + + ДобавитьПраздникЦаганСар(ПраздничныеДни, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниПензенскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "58" Тогда + Возврат; + КонецЕсли; + + ДобавитьПраздникРадоница(ПраздничныеДни, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниСаратовскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "64" Тогда + Возврат; + КонецЕсли; + + ДобавитьПраздникРадоница(ПраздничныеДни, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниРеспубликиКрым(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "91" Тогда + Возврат; + КонецЕсли; + + // 18 марта - День воссоединения Крыма с Россией. + ДобавитьПраздничныйДень(ПраздничныеДни, 18, 3, НомерГода); + +КонецПроцедуры + +Процедура ЗаполнитьПраздничныеДниСевастополя(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "92" Тогда + Возврат; + КонецЕсли; + + // 18 марта - День воссоединения Крыма с Россией. + ДобавитьПраздничныйДень(ПраздничныеДни, 18, 3, НомерГода); + +КонецПроцедуры + +Процедура ДобавитьПраздничныеДниРоссийскойФедерации(НомерГода, ПраздничныеДни) + + // 1, 2, 3, 4, 5, 6 и 8 января - Новогодние каникулы. + ДобавитьПраздничныйДень(ПраздничныеДни, 1, 1, НомерГода, Ложь); + ДобавитьПраздничныйДень(ПраздничныеДни, 2, 1, НомерГода, Ложь); + ДобавитьПраздничныйДень(ПраздничныеДни, 3, 1, НомерГода, Ложь); + ДобавитьПраздничныйДень(ПраздничныеДни, 4, 1, НомерГода, Ложь); + ДобавитьПраздничныйДень(ПраздничныеДни, 5, 1, НомерГода, Ложь); + ДобавитьПраздничныйДень(ПраздничныеДни, 6, 1, НомерГода, Ложь); + ДобавитьПраздничныйДень(ПраздничныеДни, 8, 1, НомерГода, Ложь); + + // 7 января - Рождество Христово. + ДобавитьПраздничныйДень(ПраздничныеДни, 7, 1, НомерГода, Ложь); + + // 23 февраля - День защитника Отечества. + ДобавитьПраздничныйДень(ПраздничныеДни, 23, 2, НомерГода); + + // 8 марта - Международный женский день. + ДобавитьПраздничныйДень(ПраздничныеДни, 8, 3, НомерГода); + + // 1 мая - Праздник Весны и Труда. + ДобавитьПраздничныйДень(ПраздничныеДни, 1, 5, НомерГода); + + // 9 мая - День Победы + ДобавитьПраздничныйДень(ПраздничныеДни, 9, 5, НомерГода); + + // 12 июня - День России + ДобавитьПраздничныйДень(ПраздничныеДни, 12, 6, НомерГода); + + // 4 ноября - День народного единства. + ДобавитьПраздничныйДень(ПраздничныеДни, 4, 11, НомерГода); + +КонецПроцедуры + +Процедура ДобавитьПраздничныйДень(ПраздничныеДни, День, Месяц, Год, ПереноситьВыходной = Истина, ДобавлятьПредпраздничный = Истина, ТолькоНерабочий = Ложь) + + НоваяСтрока = ПраздничныеДни.Добавить(); + НоваяСтрока.Дата = Дата(Год, Месяц, День); + НоваяСтрока.ПереноситьВыходной = ПереноситьВыходной; + НоваяСтрока.ДобавлятьПредпраздничный = ДобавлятьПредпраздничный; + НоваяСтрока.ТолькоНерабочий = ТолькоНерабочий; + +КонецПроцедуры + +Процедура ДобавитьПраздникЦаганСар(ПраздничныеДни, Год, ПереноситьВыходной = Истина, ДобавлятьПредпраздничный = Истина, ТолькоНерабочий = Ложь) + + ДатаЦаганСар = ДатаПраздникаЦаганСар(Год); + Если ДатаЦаганСар = Неопределено Тогда + Возврат; + КонецЕсли; + + ДобавитьПраздничныйДень(ПраздничныеДни, День(ДатаЦаганСар), Месяц(ДатаЦаганСар), Год, ПереноситьВыходной, ДобавлятьПредпраздничный, ТолькоНерабочий); + +КонецПроцедуры + +Функция ДатаПраздникаЦаганСар(НомерГода) + + ТекстовыйДокумент = ПолучитьМакет("ДатыЦаганСар"); + ДатыЦаганСар = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ТекстовыйДокумент.ПолучитьТекст()).Данные; + + ОтборСтрок = Новый Структура("Year"); + ОтборСтрок.Year = Формат(НомерГода, "ЧГ="); + + НайденныеСтроки = ДатыЦаганСар.НайтиСтроки(ОтборСтрок); + Если НайденныеСтроки.Количество() > 0 Тогда + Возврат Дата(НайденныеСтроки[0]["Date"]); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Процедура ДобавитьПраздникРадоница(ПраздничныеДни, Год, ПереноситьВыходной = Истина, ДобавлятьПредпраздничный = Истина, ТолькоНерабочий = Ложь) + + ДатаРадоницы = ДатаПраздникаРадоница(Год); + Если ДатаРадоницы = Неопределено Тогда + Возврат; + КонецЕсли; + + ДобавитьПраздничныйДень(ПраздничныеДни, День(ДатаРадоницы), Месяц(ДатаРадоницы), Год, ПереноситьВыходной, ДобавлятьПредпраздничный, ТолькоНерабочий); + +КонецПроцедуры + +Функция ДатаПраздникаРадоница(НомерГода) + + ТекстовыйДокумент = ПолучитьМакет("ДатыРадоница"); + ДатыЦаганСар = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ТекстовыйДокумент.ПолучитьТекст()).Данные; + + ОтборСтрок = Новый Структура("Year"); + ОтборСтрок.Year = Формат(НомерГода, "ЧГ="); + + НайденныеСтроки = ДатыЦаганСар.НайтиСтроки(ОтборСтрок); + Если НайденныеСтроки.Количество() > 0 Тогда + Возврат Дата(НайденныеСтроки[0]["Date"]); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt index 999ce99b9..371a06ab5 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -1,733 +1,258 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -736,729 +261,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1467,364 +308,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1832,1094 +330,70 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2932,359 +406,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3294,362 +428,22 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3658,364 +452,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4023,364 +472,27 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4390,362 +502,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4755,362 +526,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -5121,361 +551,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -5485,364 +573,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -5851,363 +594,18 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -6216,361 +614,22 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДатыРадоница/Template.txt b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДатыРадоница/Template.txt new file mode 100644 index 000000000..8bdbeeeeb --- /dev/null +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДатыРадоница/Template.txt @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДатыЦаганСар/Template.txt b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДатыЦаганСар/Template.txt new file mode 100644 index 000000000..a2794ad53 --- /dev/null +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДатыЦаганСар/Template.txt @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ПроизводственныеКалендари/Template.txt b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ПроизводственныеКалендари/Template.txt index 372bd1eb1..a752fcc83 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ПроизводственныеКалендари/Template.txt +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ПроизводственныеКалендари/Template.txt @@ -1,3 +1,25 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ЗаполнениеКалендарныхГрафиков.mdo b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ЗаполнениеКалендарныхГрафиков.mdo index 5f14f3983..909259f06 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ЗаполнениеКалендарныхГрафиков.mdo +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ЗаполнениеКалендарныхГрафиков.mdo @@ -10,6 +10,20 @@ Заполнение календарных графиков true + + ПодборКалендарейИзКлассификатора + + ru + Подбор календарей из классификатора + + + + ru + + + PersonalComputer + MobileDevice + ПроизводственныеКалендари @@ -26,4 +40,20 @@ TextDocument + + ДатыЦаганСар + + ru + Даты "Цаган Сар" + + TextDocument + + + ДатыРадоница + + ru + Даты "Радоница" + + TextDocument + diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl index c37cb6264..ff7a83b83 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl @@ -126,7 +126,7 @@ &НаКлиенте Процедура ДекорацияУдостоверяющийЦентрНаименованиеНажатие(Элемент) - ПерейтиПоНавигационнойСсылке("http://ca.1c.ru/"); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://ca.1c.ru/"); КонецПроцедуры @@ -916,7 +916,13 @@ ОбновитьДоступностьРеквизитовПартнера(); - ИнтернетПоддержкаПользователейПодключена = ИнтернетПоддержкаПользователейПодключена(); + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); + ИнтернетПоддержкаПользователейПодключена = + МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + Иначе + ИнтернетПоддержкаПользователейПодключена = Ложь; + КонецЕсли; КонецПроцедуры @@ -2533,23 +2539,6 @@ КонецФункции -&НаСервере -Функция ИнтернетПоддержкаПользователейПодключена() - - Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначения.РазделениеВключено() Тогда - Возврат Истина; - КонецЕсли; - - МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); - Возврат МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); - -КонецФункции - - &НаСервере Функция ЗаявлениеXML(Билет) diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl index d1dbbba51..8913e9654 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl @@ -278,12 +278,16 @@ КонецЕсли; ТаблицаУдаления = Объект.ДополнительнаяРегистрация; + ПодлежитУдалению = Новый Массив; Для Каждого ИдентификаторСтроки Из ДополнительныеПараметры.ВыделенныеСтроки Цикл УдаляемаяСтрока = ТаблицаУдаления.НайтиПоИдентификатору(ИдентификаторСтроки); Если УдаляемаяСтрока<>Неопределено Тогда - ТаблицаУдаления.Удалить(УдаляемаяСтрока); + ПодлежитУдалению.Добавить(УдаляемаяСтрока); КонецЕсли; КонецЦикла; + Для Каждого УдаляемаяСтрока Из ПодлежитУдалению Цикл + ТаблицаУдаления.Удалить(УдаляемаяСтрока); + КонецЦикла; ОбновитьНадписьОбщегоКоличества(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl index 4d482a7e5..ec7dcf57c 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl @@ -63,7 +63,7 @@ КонецЕсли; ПросмотрСтраницы("ПоВнутреннейСсылке", ИмяОткрываемойСтраницы); Иначе - ОбщегоНазначенияКлиент.ПерейтиПоСсылке(ИмяОткрываемойСтраницы); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ИмяОткрываемойСтраницы); КонецЕсли; СтандартнаяОбработка = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html index ca79cc8ae..f5dda5bac 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html @@ -2,6 +2,11 @@

        Предназначена для просмотра справочной, нормативной и другой информации, поставляемой в составе программы.

        Для базовых версий показ дополнительной информации при начале работы программы выполняется всегда.

        Открывается по команде Информация при запуске из группы Информация на странице Главное. При открытии сразу показывается одна из страниц дополнительной информации.

        -

        В командной панели  размещены навигационные кнопки  Назад и  Вперед, с помощью которых осуществляется переход по уже просмотренным страницам, а также пункты меню, соответствующие названиям разделов дополнительной информации. При выборе в командной панели раздела открывается список страниц дополнительной информации, относящихся к данному разделу. Страница показывается при выборе пункта меню с названием страницы.

        -

        Текст страницы может содержать ссылки на другие страницы дополнительной информации (внутренние ссылки), а также ссылки на разделы сайтов, размещенных в сети Интернет (внешние ссылки). Для перехода по внешним ссылкам необходимо, чтобы компьютер имел доступ в сеть Интернет.

        -

        Для ПРОФ-версий доступна настройка показа дополнительной информации при начале работы программы. Если дополнительная информация показывается в режиме рабочего стола, то в командной панели размещается флажок Показывать при начале работы. Если снять флажок, то дополнительная информация не будет показываться при начале работы. Флажок Показывать при начале работы автоматически снимается два раза в месяц и после обновления версии программы.

        \ No newline at end of file +

        Навигация

        +
        • С помощью кнопки Главная страница можно вернуться к информации на главной странице. +
        • В командной панели  размещены навигационные кнопки  Назад и  Вперед, с помощью которых осуществляется переход по уже просмотренным страницам, а также пункты меню, соответствующие названиям разделов дополнительной информации. При выборе в командной панели раздела открывается список страниц дополнительной информации, относящихся к данному разделу. Страница показывается при выборе пункта меню с названием страницы. +
        • Текст страницы может содержать ссылки на другие страницы дополнительной информации (внутренние ссылки), а также ссылки на разделы сайтов, размещенных в сети Интернет (внешние ссылки). Для перехода по внешним ссылкам необходимо, чтобы компьютер имел доступ в сеть Интернет.

        Получение информации об ИТС

        +
        • С помощью кнопки Поддержка можно получить информацию об ИТС (информационно-технологическом сопровождении) и условиях его получения.

        Показывать при начале работы - недоступно в базовых версиях

        +
        • Для ПРОФ-версий доступна настройка показа дополнительной информации при начале работы программы. Если дополнительная информация показывается в режиме рабочего стола, то в командной панели размещается флажок Показывать при начале работы. +
        • Если снять флажок, то дополнительная информация не будет показываться при начале работы. +
        • Флажок Показывать при начале работы автоматически снимается два раза в месяц и после обновления версии программы.
        \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl index 00193e3fc..3af1caa49 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl @@ -157,8 +157,9 @@ КомпонентыОбмена.ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.ВерсияФорматаОбменаПриВыгрузке(УзелДляОбмена); + ИмяПланаОбмена = УзелДляОбмена.Метаданные().Имя; ФорматОбмена = ОбменДаннымиXDTOСервер.ФорматОбмена( - УзелДляОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); + ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); КомпонентыОбмена.XMLСхема = ФорматОбмена; КомпонентыОбмена.МенеджерОбмена = ОбменДаннымиXDTOСервер.МенеджерОбменаВерсииФормата( @@ -254,9 +255,11 @@ Возврат; КонецЕсли; - РезультатПодсчетаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатПодсчетаДанныхКЗагрузке(ИмяФайлаОбмена, Истина); - КомпонентыОбмена.Вставить("РазмерФайлаСообщенияОбмена", РезультатПодсчетаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена); - КомпонентыОбмена.Вставить("КоличествоОбъектовКЗагрузке", РезультатПодсчетаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке); + РезультатАнализаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатАнализаДанныхКЗагрузке(ИмяФайлаОбмена, Истина); + РезультатАнализаДанныхКЗагрузке.Вставить("КорреспондентПоддерживаетИдентификаторОбменаДанными", + КомпонентыОбмена.КорреспондентПоддерживаетИдентификаторОбменаДанными); + КомпонентыОбмена.Вставить("РазмерФайлаСообщенияОбмена", РезультатАнализаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена); + КомпонентыОбмена.Вставить("КоличествоОбъектовКЗагрузке", РезультатАнализаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке); ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); @@ -274,6 +277,9 @@ КомпонентыОбмена.ФайлОбмена.Закрыть(); + // Проверка данных From / NewFrom + ОбменДаннымиСервер.ПроверитьКодыУзлов(РезультатАнализаДанныхКЗагрузке, КомпонентыОбмена.УзелКорреспондента); + Если Не КомпонентыОбмена.ФлагОшибки Тогда // Запишем информацию о номере входящего сообщения. diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index 16377f736..0e76f8242 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1592,7 +1592,7 @@ // Создает в файле обмена запись об удалении объекта. // // Параметры: -// Ссылка - СправочникСсылка, ДокументСсылка и т.п.: удаляемый объект. +// Ссылка - СправочникСсылка, ДокументСсылка - удаляемый объект. // ТипПриемника - Строка - Содержит строковое представление типа приемника. // ТипИсточника - Строка - Содержит строковое представление типа источника. // @@ -1614,7 +1614,7 @@ // Регистрирует объект, созданный при выгрузке. // // Параметры: -// Ссылка - СправочникСсылка, ДокументСсылка и т.п.: регистрируемый объект. +// Ссылка - СправочникСсылка, ДокументСсылка - регистрируемый объект. // Процедура ЗарегистрироватьОбъектСозданныйПриВыгрузке(Ссылка) Экспорт @@ -1686,10 +1686,11 @@ // Записывает объект в информационную базу. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект и т.п.: записываемый объект. +// Объект - СправочникОбъект, ДокументОбъект - записываемый объект. // Тип - Строка - Тип объекта строкой. -// ЗаписатьОбъект - булево, признак того что объект был записан. -// ОтправкаНазад - булево. +// ЗаписатьОбъект - Булево - признак того что объект был записан. +// ОтправкаНазад - Булево - признак того что состояние элемента данных в этой информационной +// базе должно быть передано в информационную базу корреспондента. // Процедура ЗаписатьОбъектВИБ(Объект, Тип, ЗаписатьОбъект = Ложь, Знач ОтправкаНазад = Ложь) Экспорт @@ -1813,7 +1814,7 @@ // Устанавливает пометку удаления. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект и т.п.: объект для установки пометки. +// Объект - СправочникОбъект, ДокументОбъект - объект для установки пометки. // ПометкаУдаления - Булево - Флаг пометки удаления. // ИмяТипаОбъекта - Строка - Тип объекта строкой. // @@ -2284,9 +2285,9 @@ КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; КонецЕсли; - РезультатПодсчетаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатПодсчетаДанныхКЗагрузке(ИмяФайлаОбмена, Ложь); - РазмерФайлаСообщенияОбмена = РезультатПодсчетаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена; - КоличествоОбъектовКЗагрузке = РезультатПодсчетаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке; + РезультатАнализаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатАнализаДанныхКЗагрузке(ИмяФайлаОбмена, Ложь); + РазмерФайлаСообщенияОбмена = РезультатАнализаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена; + КоличествоОбъектовКЗагрузке = РезультатАнализаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке; ИмяПрофиляБезопасности = ИнициализироватьОбработки(); @@ -15277,7 +15278,7 @@ ИначеЕсли ИмяУзла = "Запросы" Тогда ЗагрузитьЗапросы(ПравилаОбмена, ЗаписьXML); - + ИначеЕсли ИмяУзла = "Обработки" Тогда ЗагрузитьОбработки(ПравилаОбмена, ЗаписьXML); @@ -16250,11 +16251,13 @@ // {Обработчик: ПриПолученииДанныхОтправителя} Начало Игнорировать = Ложь; + ИмяПланаОбмена = ОбщийУзел.Метаданные().Имя; + Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПриПолученииДанныхОтправителя",ИмяПланаОбмена) Тогда + ПланыОбмена[ИмяПланаОбмена].ПриПолученииДанныхОтправителя(ОбщийУзел, Игнорировать); - ПланыОбмена[ОбщийУзел.Метаданные().Имя].ПриПолученииДанныхОтправителя(ОбщийУзел, Игнорировать); - - Если Игнорировать = Истина Тогда - Возврат; + Если Игнорировать = Истина Тогда + Возврат; + КонецЕсли; КонецЕсли; // {Обработчик: ПриПолученииДанныхОтправителя} Окончание @@ -16601,11 +16604,11 @@ // {Обработчик: ПриОтправкеДанныхОтправителя} Начало Игнорировать = Ложь; - - ПланыОбмена[ОбщийУзел.Метаданные().Имя].ПриОтправкеДанныхОтправителя(ОбщийУзел, Игнорировать); - - Если Игнорировать = Истина Тогда - Возврат; + Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПриОтправкеДанныхОтправителя",ИмяПланаОбмена) Тогда + ПланыОбмена[ОбщийУзел.Метаданные().Имя].ПриОтправкеДанныхОтправителя(ОбщийУзел, Игнорировать); + Если Игнорировать = Истина Тогда + Возврат; + КонецЕсли; КонецЕсли; // {Обработчик: ПриОтправкеДанныхОтправителя} Окончание @@ -17324,7 +17327,7 @@ Исключение ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанных.Имя, "ПослеОбработкиВыгрузкиДанных"); - КонецПопытки; + КонецПопытки; КонецЕсли; // {ОБРАБОТЧИК ПослеОбработки ПВД} @@ -17439,8 +17442,8 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти #Область Инициализация ИнициализацияРеквизитовИМодульныхПеременных(); diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index d3fd84dd7..14e5c0f5f 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -25,9 +25,9 @@ ИЛИ НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "СообщениеПолученоИзКэша")); - РезультатПодсчетаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатПодсчетаДанныхКЗагрузке(ИмяФайлаСообщенияОбмена(), Ложь, Истина); - РазмерФайлаСообщенияОбмена = РезультатПодсчетаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена; - КоличествоОбъектовКЗагрузке = РезультатПодсчетаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке; + РезультатАнализаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатАнализаДанныхКЗагрузке(ИмяФайлаСообщенияОбмена(), Ложь, Истина); + РазмерФайлаСообщенияОбмена = РезультатАнализаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена; + КоличествоОбъектовКЗагрузке = РезультатАнализаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке; // Установка параметров сеанса. ПараметрыСеансаСинхронизацииДанных = Новый Соответствие; @@ -50,6 +50,7 @@ ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(ПараметрыСеансаСинхронизацииДанных); УстановитьПривилегированныйРежим(Ложь); + ЧтениеXML = Новый ЧтениеXML; Попытка @@ -274,7 +275,6 @@ ЗафиксироватьЗавершениеОбмена(Отказ, ОписаниеОшибки(), ОшибкаЗаписиФайлаСообщенияОбмена()); Возврат; КонецПопытки; - КонецПроцедуры // Запись приоритетных данных в сообщение обмена. diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form index b59beabde..3200e528f 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form @@ -439,7 +439,6 @@ в том случае, если оно выполняется сторонними средствами. Label - true true Left diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html index 2ffd4cde8..ba816de52 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html @@ -4,7 +4,7 @@

        В любой момент времени можно восстановить данные из созданной ранее резервной копии. Однако необходимо учитывать, что в восстановленной информационной базе будут только те данные, которые были введены на момент создания резервной копии. Данные, которые были введены позже, будут безвозвратно утеряны. Поэтому очень важно составить расписание резервного копирования так, чтобы снизить потери данных до минимума.

        Использование резервного копирования в режиме 1С:Предприятия предусмотрено только для файлового варианта работы. В клиент-серверном варианте работы программы для создания резервных копий рекомендуется использовать средства СУБД. Более подробную информацию об этом можно найти в книге "1С:Предприятие 8.2. Клиент-серверный вариант. Руководство администратора".

        Открывается по соответствующей ссылке в предупреждении, которое выводится при запуске программы, если резервное копирование не настроено. В данном предупреждении предлагается настроить резервное копирование информационной базы. Если проигнорировать его, то предупреждения о необходимости настроить резервное копирование будут появляться каждый час.

        -

        Также можно воспользоваться командой Настройка резервного копирования в разделе Администрирование - Поддержка и обслуживание - Резервное копирование и восстановление. Под этой командой размещается информация о состоянии резервного копирования в программе. 

        +

        Также можно воспользоваться командой Настройка резервного копирования в разделе Администрирование - Обслуживание - Резервное копирование и восстановление. Под этой командой размещается информация о состоянии резервного копирования в программе. 

        Настройка резервного копирования (файловый режим работы программы)

        • Программа позволяет создавать резервные копии в режиме 1С:Предприятие. Резервное копирование может выполняться как в автоматическом режиме, так и в ручном. Для выполнения резервного копирования в автоматическом режиме необходимо предварительно его настроить.

          diff --git a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl index 1a6919d58..d57bb85db 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl @@ -76,15 +76,15 @@ ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); ИменаСтандартныхФорм.Добавить("ФормаГруппы"); ИменаСтандартныхФорм.Добавить("ФормаСписка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "ФормаВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы", "ФормаВыбораГруппы"); ЗаполнитьФормыОбъектовМетаданных(Метаданные.Справочники, "Справочник", НСтр("ru = 'Справочник'"), ИменаСтандартныхФорм, БиблиотекаКартинок.Справочник, СписокФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "ФормаВыбора"); ЗаполнитьФормыОбъектовМетаданных(Метаданные.Документы, "Документ", НСтр("ru = 'Документ'"), ИменаСтандартныхФорм, БиблиотекаКартинок.Документ, СписокФорм); @@ -95,7 +95,7 @@ ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаСписка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "ФормаВыбора"); ЗаполнитьФормыОбъектовМетаданных(Метаданные.Перечисления, "Перечисление", НСтр("ru = 'Перечисление'"), ИменаСтандартныхФорм, БиблиотекаКартинок.Перечисление, СписокФорм); @@ -115,22 +115,22 @@ ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); ИменаСтандартныхФорм.Добавить("ФормаГруппы"); ИменаСтандартныхФорм.Добавить("ФормаСписка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "ФормаВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы", "ФормаВыбораГруппы"); ЗаполнитьФормыОбъектовМетаданных(Метаданные.ПланыВидовХарактеристик, "ПланВидовХарактеристик", НСтр("ru = 'План видов характеристик'"), ИменаСтандартныхФорм, БиблиотекаКартинок.ПланВидовХарактеристик, СписокФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "ФормаВыбора"); ЗаполнитьФормыОбъектовМетаданных(Метаданные.ПланыСчетов, "ПланСчетов", НСтр("ru = 'План счетов'"), ИменаСтандартныхФорм, БиблиотекаКартинок.ПланСчетов, СписокФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "ФормаВыбора"); ЗаполнитьФормыОбъектовМетаданных(Метаданные.ПланыВидовРасчета, "ПланВидовРасчета", НСтр("ru = 'План видов расчета'"), ИменаСтандартныхФорм, БиблиотекаКартинок.ПланВидовРасчета, СписокФорм); @@ -158,14 +158,14 @@ ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "ФормаВыбора"); ЗаполнитьФормыОбъектовМетаданных(Метаданные.БизнесПроцессы, "БизнесПроцесс", НСтр("ru = 'Бизнес-процесс'"), ИменаСтандартныхФорм, БиблиотекаКартинок.БизнесПроцесс, СписокФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "ФормаВыбора"); ЗаполнитьФормыОбъектовМетаданных(Метаданные.Задачи, "Задача", НСтр("ru = 'Задача'"), ИменаСтандартныхФорм, БиблиотекаКартинок.Задача, СписокФорм); @@ -192,11 +192,12 @@ СтрокаРезультата = Неопределено; ОписаниеФормы = Неопределено; - Настройки = ЧтениеНастроекИзХранилища(ХранилищеСистемныхНастроек, ИмяПользователя); - КлючиНастроек = Настройки.ВыгрузитьКолонку("КлючОбъекта"); + Настройки = ЧтениеНастроекИзХранилища(ХранилищеСистемныхНастроек, ИмяПользователя); ТекущееИмяФормы = ""; - Для Каждого КлючОбъекта Из КлючиНастроек Цикл + Для Каждого Настройка Из Настройки Цикл + КлючОбъекта = Настройка.КлючОбъекта; + КлючНастроек = Настройка.КлючНастроек; ЧастиКлючаОбъекта = СтрРазделить(КлючОбъекта, "/"); Если ЧастиКлючаОбъекта.Количество() < 2 Тогда Продолжить; @@ -209,7 +210,7 @@ ИмяФормы = ЧастиКлючаОбъекта[0]; КонецЕсли; Если ЗначениеЗаполнено(ИмяФормы) И ИмяФормы = ТекущееИмяФормы Тогда - СтрокаРезультата.СписокКлючей.Добавить(КлючОбъекта, "", ОписаниеФормы.Пометка); + СтрокаРезультата.СписокКлючей.Добавить(КлючОбъекта, КлючНастроек, ОписаниеФормы.Пометка); Продолжить; КонецЕсли; @@ -223,7 +224,7 @@ СтрокаРезультата.Представление = ОписаниеФормы.Представление; СтрокаРезультата.Пометка = ОписаниеФормы.Пометка; СтрокаРезультата.Картинка = ОписаниеФормы.Картинка; - СтрокаРезультата.СписокКлючей.Добавить(КлючОбъекта, "", ОписаниеФормы.Пометка); + СтрокаРезультата.СписокКлючей.Добавить(КлючОбъекта, КлючНастроек, ОписаниеФормы.Пометка); ТекущееИмяФормы = ИмяФормы; КонецЦикла; @@ -258,11 +259,13 @@ Для Каждого ИмяСтандартнойФормы Из ИменаСтандартныхФорм Цикл - Если Объект["Основная" + ИмяСтандартнойФормы] = Неопределено Тогда + Форма = Объект["Основная" + ИмяСтандартнойФормы.Значение]; + Если Форма = Неопределено Тогда + ИмяФормы = ?(ЗначениеЗаполнено(ИмяСтандартнойФормы.Представление), ИмяСтандартнойФормы.Представление, ИмяСтандартнойФормы.Значение); ПредставлениеФормыИПометка = ПредставлениеАвтогенерируемойФормы(Объект, ИмяСтандартнойФормы.Значение, ТипОбъектаМетаданных); ПредставлениеФормы = ПредставлениеФормыИПометка.ИмяФормы; Пометка = ПредставлениеФормыИПометка.ФормаОткрываемая; - СписокФорм.Добавить(ПрефиксИмени + "." + ИмяСтандартнойФормы.Значение, ПрефиксПредставления + ПредставлениеФормы, Пометка, Картинка); + СписокФорм.Добавить(ПрефиксИмени + "." + ИмяФормы, ПрефиксПредставления + ПредставлениеФормы, Пометка, Картинка); КонецЕсли; КонецЦикла; @@ -361,7 +364,7 @@ СтандартнаяОбработка = Истина; - ИнтеграцияСтандартныхПодсистем.ПриУдаленииПользовательскихВариантовОтчета(ВариантОтчета, + ИнтеграцияПодсистемБСП.ПриУдаленииПользовательскихВариантовОтчета(ВариантОтчета, ПользовательИБ, СтандартнаяОбработка); Если СтандартнаяОбработка Тогда @@ -871,7 +874,7 @@ СтандартнаяОбработка = Истина; - ИнтеграцияСтандартныхПодсистем.ПриУдаленииПользовательскихВариантовОтчета(НайденныйВариантОтчета[0], + ИнтеграцияПодсистемБСП.ПриУдаленииПользовательскихВариантовОтчета(НайденныйВариантОтчета[0], ПользовательИнформационнойБазы, СтандартнаяОбработка); Если СтандартнаяОбработка Тогда @@ -1386,7 +1389,7 @@ Если Форма = "ФормаСписка" Или Форма = "ФормаДляВыбора" - Или Форма = "ФормаГруппы" + Или Форма = "ФормаГруппы" Или Форма = "ФормаДляВыбораГруппы" Тогда ИмяФормы = ПредставлениеФормыСписка(Объект); ДобавитьТипФормыВПредставлениеАвтогенерируемойФормы(Объект, Форма, ИмяФормы); @@ -1577,7 +1580,7 @@ Продолжить; КонецЕсли; - ИнтеграцияСтандартныхПодсистем.ПриПолученииПользовательскихВариантовОтчетов(ОтчетМетаданные, + ИнтеграцияПодсистемБСП.ПриПолученииПользовательскихВариантовОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, ТаблицаВариантовОтчетов, СтандартнаяОбработка); Если СтандартнаяОбработка Тогда diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl index 406c75173..f5f06d8f7 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl @@ -27,7 +27,7 @@ Процедура ПорядокОбновленияПрограммыПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) Если ДанныеСобытия.Href <> Неопределено Тогда СтандартнаяОбработка = Ложь; - ПерейтиПоНавигационнойСсылке(ДанныеСобытия.Href); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ДанныеСобытия.Href); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ИмпортЗамеровПроизводительности/CommandModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ИмпортЗамеровПроизводительности/CommandModule.bsl new file mode 100644 index 000000000..2e2439855 --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ИмпортЗамеровПроизводительности/CommandModule.bsl @@ -0,0 +1,8 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ОткрытьФорму("Обработка.ОценкаПроизводительности.Форма.ИмпортЗамеровПроизводительности", , ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form index 1b0146d27..aef08206c 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form @@ -1028,6 +1028,24 @@ true + + Объект + + <key>ru</key> + <value>Объект</value> + + 9 + + DataProcessorObject.ОценкаПроизводительности + + + true + + + true + +
          true
          +
          НастроитьРасписаниеЭкспорта @@ -1098,4 +1116,5 @@ <navigationPanel/> <commandBar/> </commandInterface> + <extInfo xsi:type="form:ObjectFormExtInfo"/> </form:Form> diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html index b26526a8a..ddba6f312 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html @@ -1,8 +1,7 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p>Предназначена для настройки регламентного задания по экспорту замеров производительности.</p> <p>Это может потребоваться, например, для выполнения анализа производительности в другой программе.</p> -<p>Вызывается по команде <strong>Настройки оценки производительности</strong> раздела <strong>Администрирование - Поддержка и обслуживание</strong>. </p> -<p>Также можно открыть по команде <strong>Еще -</strong> <strong>Настройка</strong> из окна <strong>Оценка производительности</strong>.</p> +<p>Вызывается по команде <strong>Настройки оценки производительности</strong> раздела <strong>Администрирование - Обслуживание - Оценка производительности</strong>. </p> <h3>Настройка автоматического экспорта замеров производительности</h3> <ul><li>Включите флажок <strong>Выполнять экспорт</strong>, при этом автоматически включаются флажки <strong>Выполнять экспорт в локальный каталог</strong>, <strong>Выполнять экспорт на FTP</strong>. </li><li>При необходимости включите флажок <strong>Экспорт всех ключевых операций</strong>. В том случае производится экспорт замеров производительности всех ключевых операций, в том числе и тех, у которых не заполнены поля <strong>Приоритет</strong> и <strong>Целевое время</strong>. diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl index 4442f02b3..6e0f24d83 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl @@ -168,11 +168,8 @@ ВыборФайла.МножественныйВыбор = Ложь; ВыборФайла.Заголовок = НСтр("ru = 'Выбор каталога экспорта'"); - Если ВыборФайла.Выбрать() Тогда - ВыбранныйКаталог = ВыборФайла.Каталог; - ЛокальныйКаталогЭкспорта = ВыбранныйКаталог; - ЭтотОбъект.Модифицированность = Истина; - КонецЕсли; + ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораКаталогаЗавершение", ЭтотОбъект, Неопределено); + ВыборФайла.Показать(ОписаниеОповещения); КонецЕсли; @@ -375,4 +372,15 @@ Модифицированность = Истина; КонецПроцедуры +&НаКлиенте +Процедура ДиалогВыбораКаталогаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы <> Неопределено Тогда + ВыбранныйКаталог = ВыбранныеФайлы[0]; + ЛокальныйКаталогЭкспорта = ВыбранныйКаталог; + ЭтотОбъект.Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Form.form new file mode 100644 index 000000000..20ec49295 --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Form.form @@ -0,0 +1,178 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <title> + <key>ru</key> + <value>Импорт замеров оценки производительности</value> + + + ФайлИмпорта + 1 + true + true + + true + + + ФайлИмпорта + + + ФайлИмпортаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ФайлИмпортаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + + StartChoice + ФайлИмпортаНачалоВыбора + + 30 + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаИмпорт + 4 + true + true + + true + + + ФормаИмпортРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Command.Импорт + Auto + true + true + true + UserCmds + Auto + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + Use + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ОценкаПроизводительности + + + true + + + true + +
          true
          +
          + + ФайлИмпорта + + <key>ru</key> + <value>Файл импорта</value> + + 2 + + String + + + + true + + + true + + + ФайлИмпорта + + + + ЕстьБСП + + <key>ru</key> + <value>Есть БСП</value> + + 3 + + Boolean + + + true + + + true + + + + Импорт + + <key>ru</key> + <value>Импорт</value> + + 1 + + ru + Импорт + + + true + + + + Импорт + + + DontUse + Auto + + + + + + + diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html new file mode 100644 index 000000000..88b7f8b4a --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html @@ -0,0 +1,3 @@ + +

          Предназначена для импорта замеров производительности вручную для анализа в этой информационной базе.

          +

          Укажите путь к файлу на компьютере в поле Файл импорта.

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl new file mode 100644 index 000000000..180c93205 --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl @@ -0,0 +1,78 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если НЕ ОценкаПроизводительностиСлужебный.ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда + ЭтотОбъект.Элементы.ФайлИмпорта.КнопкаВыбора = Ложь; + ЕстьБСП = Ложь; + Иначе + ЕстьБСП = Истина; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ВыбратьФайлаИмпортаПредложено(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт + + Если РасширениеРаботыСФайламиПодключено Тогда + + ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ВыборФайла.МножественныйВыбор = Ложь; + ВыборФайла.Заголовок = НСтр("ru = 'Выберите файл импорта замеров'"); + ВыборФайла.Фильтр = "Файлы импорта замеров (*.zip)|*.zip"; + + ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораФайлаЗавершение", ЭтотОбъект, Неопределено); + ВыборФайла.Показать(ОписаниеОповещения); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ФайлИмпортаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + Если ЕстьБСП Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьФайлаИмпортаПредложено", ЭтотОбъект, Неопределено); + МодульОбщегоНазначения = Вычислить("ОбщегоНазначенияКлиент"); + Если ТипЗнч(МодульОбщегоНазначения) = Тип("ОбщийМодуль") Тогда + МодульОбщегоНазначения.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Импорт(Команда) + ДвоичныеДанные = Новый ДвоичныеДанные(ФайлИмпорта); + АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); + ВыполнитьИмпортНаСервере(ФайлИмпорта, АдресХранилища); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Процедура ВыполнитьИмпортНаСервере(ИмяФайла, АдресХранилища) + ОценкаПроизводительности.ЗагрузитьФайлОценкиПроизводительности(ИмяФайла, АдресХранилища); +КонецПроцедуры + +&НаКлиенте +Процедура ДиалогВыбораФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы <> Неопределено Тогда + ФайлИмпорта = ВыбранныеФайлы[0]; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Form.form index 7f5d7811d..0be08072a 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Form.form @@ -125,6 +125,46 @@ Auto
          + + Профиль + 17 + true + true + + true + + + Профиль + + + ПрофильРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ПрофильКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + КаталогЭкспорта 9 @@ -379,6 +419,26 @@ true + + Профиль + + <key>ru</key> + <value>Профиль</value> + + 7 + + CatalogRef.ПрофилиКлючевыхОпераций + + + true + + + true + + + Профиль + + ВыполнитьЭкспорт diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Help/ru.html index 32a7a6846..d9fbd5a40 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Help/ru.html @@ -1,7 +1,8 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p>Предназначена для настройки экспорта замеров производительности вручную для анализа в других программах.</p> <p>В программе производится <a href="DataProcessor.ОценкаПроизводительности/Help">оценка производительности</a>. Замеры производительности хранятся в программе и могут быть экспортированы с целью анализа в других программах.</p> -<p>С помощью кнопок заполните поля <strong>Дата начала</strong> и <strong>Дата окончания</strong> экспорта замеров производительности.</p> +<p>С помощью кнопок <img src="StdPicture.InputFieldCalendar"></img> заполните поля <strong>Дата начала</strong> и <strong>Дата окончания</strong> экспорта замеров производительности.</p> +<p>Выберите <a href="Catalog.ПрофилиКлючевыхОпераций/Help">профиль ключевых операций</a> в поле <strong>Профиль</strong>.</p> <p>Выберите путь для сохранения данных в поле <strong>Каталог экспорта</strong>.</p> <p>Напишите <strong>Имя архива</strong> для сохранения замеров.</p> <h3>См. также:</h3> diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl index b3fd97b27..aef35bf82 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl @@ -24,9 +24,8 @@ ВыборФайла.МножественныйВыбор = Ложь; ВыборФайла.Заголовок = НСтр("ru = 'Выбор каталога экспорта'"); - Если ВыборФайла.Выбрать() Тогда - ЭтотОбъект.КаталогЭкспорта = ВыборФайла.Каталог; - КонецЕсли; + ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораКаталогаЗавершение", ЭтотОбъект, Неопределено); + ВыборФайла.Показать(ОписаниеОповещения); КонецЕсли; @@ -50,20 +49,78 @@ &НаКлиенте Процедура ВыполнитьЭкспорт(Команда) - Если ДатаНачалаПериодаЭкспорта >= ДатаОкончанияПериодаЭкспорта Тогда + ЕстьОшибки = Ложь; + + Если НЕ ЗначениеЗаполнено(ДатаНачалаПериодаЭкспорта) Тогда + + СообщениеПользователю = Новый СообщениеПользователю; + СообщениеПользователю.Поле = "ДатаНачалаПериодаЭкспорта"; + СообщениеПользователю.Текст = НСтр("ru = 'Значение параметра ""Дата начала"" не заполнено. + |Экспорт невозможен.'"); + СообщениеПользователю.Сообщить(); + + ЕстьОшибки = Истина; + + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ДатаОкончанияПериодаЭкспорта) Тогда + + СообщениеПользователю = Новый СообщениеПользователю; + СообщениеПользователю.Поле = "ДатаОкончанияПериодаЭкспорта"; + СообщениеПользователю.Текст = НСтр("ru = 'Значение параметра ""Дата окончания"" не заполнено. + |Экспорт невозможен.'"); + СообщениеПользователю.Сообщить(); + + ЕстьОшибки = Истина; + + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(КаталогЭкспорта) Тогда + + СообщениеПользователю = Новый СообщениеПользователю; + СообщениеПользователю.Поле = "КаталогЭкспорта"; + СообщениеПользователю.Текст = НСтр("ru = 'Значение параметра ""Каталог экспорта"" не заполнено. + |Экспорт невозможен.'"); + СообщениеПользователю.Сообщить(); + + ЕстьОшибки = Истина; + + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ИмяАрхива) Тогда + + СообщениеПользователю = Новый СообщениеПользователю; + СообщениеПользователю.Поле = "ИмяАрхива"; + СообщениеПользователю.Текст = НСтр("ru = 'Значение параметра ""Имя архива"" не заполнено. + |Экспорт невозможен.'"); + СообщениеПользователю.Сообщить(); + + ЕстьОшибки = Истина; + + КонецЕсли; + + Если ЗначениеЗаполнено(ДатаНачалаПериодаЭкспорта) И ЗначениеЗаполнено(ДатаОкончанияПериодаЭкспорта) И ДатаНачалаПериодаЭкспорта >= ДатаОкончанияПериодаЭкспорта Тогда + СообщениеПользователю = Новый СообщениеПользователю; СообщениеПользователю.Поле = "ДатаНачалаПериодаЭкспорта"; СообщениеПользователю.Текст = НСтр("ru = 'Значение параметра ""Дата начала"" больше или равно значения параметры ""Дата окончания"". |Экспорт невозможен.'"); СообщениеПользователю.Сообщить(); + + ЕстьОшибки = Истина; + + КонецЕсли; + + Если ЕстьОшибки Тогда Возврат; КонецЕсли; - + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ЭтотОбъект.УникальныйИдентификатор); ПараметрыЭкспорта = Новый Структура; ПараметрыЭкспорта.Вставить("ДатаНачала", ЭтотОбъект.ДатаНачалаПериодаЭкспорта); ПараметрыЭкспорта.Вставить("ДатаОкончания", ЭтотОбъект.ДатаОкончанияПериодаЭкспорта); ПараметрыЭкспорта.Вставить("АдресХранилища", АдресХранилища); + ПараметрыЭкспорта.Вставить("Профиль", Профиль); ВыполнитьЭкспортНаСервере(ПараметрыЭкспорта); ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища); @@ -88,4 +145,14 @@ ОценкаПроизводительности.ЭкспортОценкиПроизводительности(Неопределено, Параметры); КонецПроцедуры +&НаКлиенте +Процедура ДиалогВыбораКаталогаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы <> Неопределено Тогда + ЭтотОбъект.КаталогЭкспорта = ВыбранныеФайлы[0]; + КонецЕсли; + +КонецПроцедуры + + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html index 539e44943..deebf7e2c 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html @@ -1,33 +1,12 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> -<p>Предназначена для оценки производительности работы программы.</p> <p>В программе предусмотрены встроенные средства для сбора и анализа данных о производительности работы по APDEX, которая является международным стандартом оценки производительности информационных систем. </p> <p>Для того чтобы оценивать производительность, необходимо в начале работы программы заполнить список <a href="Catalog.КлючевыеОперации/Help">Ключевые операции</a>.</p> <p>Оценка производительности программы по методике APDEX состоит из следующих основных этапов:</p> -<ul><li>Определение приоритета для каждой <a href="Catalog.КлючевыеОперации.Form.ФормаЭлемента/Help">ключевой операции</a>, предусмотренной в программе; -</li><li>Определение целевого значения времени выполнения каждой ключевой операции; -</li><li>Сбор информации о времени выполнения каждой ключевой операции; -</li><li>На основании собранных данных - формирование оценки производительности и интерпретация полученных значений.</li></ul><p>К просмотру и оценке результатов замеров производительности программы можно перейти по команде <strong>Показатели производительности</strong> раздела <strong>Администрирование - Поддержка и обслуживание</strong>.</p> -<h3>Таблица</h3> -<p>Показатели производительности выводятся в таблицу, которая состоит из колонок: </p> -<ul><li> -<div><strong>Ключевая операция</strong> - наименование ключевой операции. В таблице перечислены все ключевые операции, предусмотренные в программе. Они выводятся из списка <strong>Ключевые операции</strong>. Кроме того, имеется предопределенная ключевая операция <strong>Общая производительность системы</strong>, которая по умолчанию выводится только в таблицу.</div> -<ul><li>С помощью кнопок <img src="StdPicture.CreateListItem"></img> <strong>Добавить</strong> и <img src="StdPicture.Delete"></img> <strong>Удалить</strong> можно сформировать список ключевых операций в программе, по которым будет осуществляться оценка производительности. -</li><li>После того как ключевая операция добавлена в таблицу, она становится недоступной в списке для выбора (т.е. одна операция может быть добавлена в таблицу один раз). </li></ul></li><li> -<div><strong>Приоритет</strong> - выводится из списка <strong>Ключевые операции</strong>. </div> -<ul><li> -<div>Используя кнопки <img src="StdPicture.MoveUp" width="16" height="16"></img> <strong>Переместить вверх</strong> и <img src="StdPicture.MoveDown" width="16" height="16"></img> <strong>Переместить вниз</strong>, можно перемещать ключевые операции в списке. </div> -</li><li> -<div>При перемещении ключевой операции в списке у нее автоматически меняется <strong>Приоритет</strong>. </div> -</li><li> -<div>Самая верхняя операция в списке имеет самый высокий приоритет, самая нижняя запись - самый низкий. Таким образом, изменяя расположение ключевой операции в списке, можно настроить приоритет для каждой операции. </div> -</li><li> -<div>Запись <strong>Общая производительность системы</strong> всегда располагается в начале списка, не имеет приоритета и служит для оценки производительности программы в целом.</div></li></ul></li><li> -<div><strong>Целевое время</strong> - выводится из списка <strong>Ключевые операции</strong>. Поле является обязательным для заполнения. При необходимости может быть заполнено прямо в таблице. Оценка производительности будет строиться относительно этого значения. Т.е. при изменении целевых значений времени будут меняться и оценки производительности. Целевое время указывается в секундах. </div></li></ul><h3>Настройка периода</h3> -<ul><li>Перед проведением оценки производительности нужно задать период, за который будет проводиться оценка производительности. -<ul><li>Для этого введите <strong>Дату начала</strong> и <strong>Дату окончания</strong> периода в формате <strong>Дата-время</strong>. С помощью кнопки <img src="StdPicture.InputFieldCalendar"></img> выберите дату из календаря, при необходимости поменяйте время (по умолчанию равно 0:00:00).</li></ul></li><li>Установкой поля <strong>Шаг</strong> регулируется количество результатов, которые будут отображаться в периоде. Например, если в качестве периода установить день, а в качестве шага - час, то в окне будет выведено 24 результата (для каждой ключевой операции). При этом результат за час будет рассчитан по специальной формуле по методике APDEX. Если в течение часа операция не выполнялась в программе,  то в соответствующей ячейке таблицы будет ноль. <a href="InformationRegister.УдалитьЗамерыВремени2/Help">Замеры</a> будут произведены во время выполнения указанных ключевых операций, например, при проведении документа. -</li><li>Результаты замеров будут показаны в окне <strong>Оценка производительности</strong> на вкладках <strong>Таблица</strong> и <strong>Диаграмма</strong>.</li></ul><h3>Обновление таблицы</h3> -<ul><li>Список не является динамическим. Для того чтобы обновить данные в таблице и диаграмме, после того как в полях <strong>Период</strong> и/или <strong>Шаг</strong> установлены новые значения, можно воспользоваться командой <strong>Обновить показатели производительности</strong>.</li></ul><h3>Вычисление целевого времени</h3> -<ul><li>Выделите нужную ключевую операцию (кроме операции <strong>Общая производительность системы</strong>), выполните команду контекстного меню по правой кнопке мыши <strong>Вычислить целевое время из APDEX</strong>. Вычисление возможно, если по ключевой операции были проведены замеры времени.  </li></ul><h3>Оценка производительности</h3> +<ul><li>заполнение <a href="Catalog.ПрофилиКлючевыхОпераций/Help">профилей ключевых операций</a> (в профиле заполняются приоритет и целевое значение времени для каждой <a href="Catalog.КлючевыеОперации.Form.ФормаЭлемента/Help">ключевой операции</a>, предусмотренной в программе); +</li><li>сбор информации о времени выполнения каждой ключевой операции; +</li><li>на основании собранных данных - формирование отчета <a href="Report.ОценкаПроизводительности/Help">Оценки производительности по ключевым операциям</a>.</li></ul><p>К просмотру отчета <strong>Оценка производительности по ключевым операциям</strong> можно перейти по соответствующей ссылке раздела <strong>Администрирование - Обслуживание - Отчеты и обработки - Отчеты администратора</strong>.</p> +<p>Для того чтобы производить оценку производительности, включите флажок <strong>Оценка производительности</strong>. После этого в программе будут производиться <a href="InformationRegister.ЗамерыВремени/Help">замеры</a> производительности во время выполнения указанных ключевых операций, например, при проведении документа. </p> +<ul><li>Результаты замеров будут обработаны в отчете <strong>Оценка производительности</strong>.</li></ul><h3>Оценка производительности</h3> <ul><li>Оценка производительности выводится в диапазоне от нуля до единицы. В зависимости от значения оценки поле с оценкой выделяется определенным цветом. Полученные оценки можно интерпретировать следующим образом: </li></ul><p></p> <table border="1"><tbody><tr><td colspan="3"> <p align="center"><strong>Шкала APDEX</strong> </p></td></tr><tr><td colspan="2"> @@ -46,14 +25,14 @@ <td>0.94</td> <td style="BACKGROUND-COLOR: #ccff99">хорошо</td></tr><tr><td>0.94</td> <td>1.00</td> -<td style="BACKGROUND-COLOR: #ccffff">отлично</td></tr></tbody></table><h3>Отбор показателей</h3> -<p>Для отбора показателей производительности нажмите <img src="StdPicture.FilterCriterion"></img> <strong>Установить отбор</strong>, с помощью переключателя выберите:</p> -<ul><li>В поле <strong>Отобрать</strong> - <strong>Лучше</strong> или <strong>Хуже</strong>; -</li><li>для сравнения выберите оценку по APDEX: <strong>Хорошо</strong>, <strong>Удовлетворительно</strong>, <strong>Плохо</strong>; -</li><li>в поле <strong>Условие</strong> автоматически проставляется цифровое выражение по APDEX, которое соответствует оценкам. -</li><li>Для начала отбора нажмите <strong>ОК</strong>.</li></ul><h3>История выполнения ключевой операции</h3> -<ul><li>Для того чтобы просмотреть <strong>Историю выполнения ключевой операции</strong>, используйте двойной щелчок мыши по значению в таблице. Выводится период выполнения замеров, указанных в таблице, параметры ключевой операции, заполненные из списка ключевых операций, а также количество замеров. В таблице замеров указывается информация по каждому замеру:  <strong>Длительность</strong>, <strong>Время окончания</strong>, <strong>Пользователь</strong>.</li></ul><h3>Диаграмма</h3> -<ul><li>Для большей наглядности на вкладке <strong>Диаграмма</strong> оценки, полученные в таблице, представлены в виде графиков, где один график соответствует одной ключевой операции. </li></ul><h3>Экспорт замеров производительности</h3> +<td style="BACKGROUND-COLOR: #ccffff">отлично</td></tr></tbody></table><h3>Экспорт замеров производительности</h3> <ul><li>Полученные замеры производительности программа позволяет автоматически в фоне выгружать во внешние файлы, например, для выполнения анализа производительности в другой программе. -</li><li>Для того чтобы<a href="DataProcessor.ОценкаПроизводительности.Form.АвтоматическийЭкспортЗамеровПроизводительности/Help"> настроить выгрузку</a> этих данных, нажмите <strong>Еще - Настройка</strong>. Сформированные внешние файлы, а также файлы, содержащие настройки, при которых были получены эти замеры, автоматически упаковываются в ZIP-архив. -</li><li>Для того чтобы выполнить экспорт замеров производительности вручную, нажмите <strong>Еще - Экспорт данных</strong>. Файл с замерами производительности можно открыть или сохранить. Для сохранения файла выберите путь к папке на компьютере.</li></ul></body></html> \ No newline at end of file +</li><li>Для того чтобы<a href="DataProcessor.ОценкаПроизводительности.Form.АвтоматическийЭкспортЗамеровПроизводительности/Help"> настроить выгрузку</a> этих данных, перейдите по ссылке <strong>Настройки оценки производительности</strong> раздела <strong>Администрирование - Обслуживание - Оценка производительности</strong>. +</li><li>Сформированные внешние файлы, а также файлы, содержащие настройки, при которых были получены эти замеры, автоматически упаковываются в ZIP-архив. +</li><li>Для того чтобы выполнить <a href="DataProcessor.ОценкаПроизводительности.Form.ЭкспортЗамеровПроизводительности/Help">экспорт замеров производительности вручную</a>, нажмите <strong>Экспорт замеров производительности</strong>. в разделе <strong>Администрирование - Обслуживание - Оценка производительности</strong>. Файл с замерами производительности можно открыть или сохранить. Для сохранения файла выберите путь к папке на компьютере.</li></ul><h3>Импорт замеров производительности</h3> +<ul><li> +<div>Можно проанализировать замеры производительности другой программы с помощью <a href="DataProcessor.ОценкаПроизводительности.Form.ИмпортЗамеровПроизводительности/Help">импорта из соответствующего файла</a>.</div> +</li><li> +<div>Для импорта воспользуйтесь ссылкой <strong>Импорт замеров производительности</strong> в разделе <strong>Администрирование - Обслуживание - Оценка производительности</strong>.</div> +</li><li> +<div>В поле <strong>Файл импорта</strong> с помощью кнопки <img src="StdPicture.InputFieldSelect"></img> укажите путь к файлу на компьютере, нажмите кнопку <strong>Импорт</strong>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl index c15ca6399..5991d2714 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl @@ -98,7 +98,7 @@ Выражение = " - | ,ВЫБОР + | ВЫБОР | КОГДА | // Нет записей в периоде о замере по этой ключевой операции | НЕ 1 В ( @@ -145,7 +145,7 @@ ВыражениеДляИтогов = " - | ,СУММА(ВЫБОР + | СУММА(ВЫБОР | КОГДА ЗамерыВремени.ДатаНачалаЗамера >= &НачалоПериода%Номер% | И ЗамерыВремени.ДатаНачалаЗамера <= &КонецПериода%Номер% | ТОГДА 1 @@ -198,7 +198,7 @@ НачалоПериода = НачалоПериода + ПараметрыВычисления.ШагЧисло; - Колонки = Колонки + ?(ПараметрыВычисления.ВыводитьИтоги, ВыражениеДляИтогов, "") + Выражение; + Колонки = Колонки + ?(ПараметрыВычисления.ВыводитьИтоги, "," + ВыражениеДляИтогов, "") + "," + Выражение; Колонки = СтрЗаменить(Колонки, "%Номер%", ИндексШага); Если ПараметрыВычисления.ВыводитьИтоги Тогда diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo index 31a8c2229..169f755b7 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -10,7 +10,7 @@ <value>Оценка производительности</value> </synonym> <useStandardCommands>true</useStandardCommands> - <defaultForm>DataProcessor.ОценкаПроизводительности.Form.Форма</defaultForm> + <defaultForm>DataProcessor.ОценкаПроизводительности.Form.АвтоматическийЭкспортЗамеровПроизводительности</defaultForm> <includeHelpInContents>true</includeHelpInContents> <help> <pages> @@ -302,6 +302,20 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="d08679db-f83f-476e-b8c4-f3f52c3cf6fd"> + <name>ИмпортЗамеровПроизводительности</name> + <synonym> + <key>ru</key> + <value>Импорт замеров производительности</value> + </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <commands uuid="e0227e4b-be22-4614-8980-5d573fae705d"> <name>НастройкиОценкиПроизводительности</name> <synonym> @@ -320,4 +334,13 @@ <group>ActionsPanelTools</group> <representation>Auto</representation> </commands> + <commands uuid="6f36007b-04dc-4007-abf7-e20fbd126b97"> + <name>ИмпортЗамеровПроизводительности</name> + <synonym> + <key>ru</key> + <value>Импорт замеров производительности</value> + </synonym> + <group>ActionsPanelTools</group> + <representation>Auto</representation> + </commands> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/УправлениеПолнотекстовымПоиском/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/УправлениеПолнотекстовымПоиском/CommandModule.bsl deleted file mode 100644 index 196f3550c..000000000 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/УправлениеПолнотекстовымПоиском/CommandModule.bsl +++ /dev/null @@ -1,14 +0,0 @@ - -#Область ОбработчикиСобытий - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда - ИмяОткрываемойФормы = "Обработка.ПанельАдминистрированияБСП.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"; - ОткрытьФорму(ИмяОткрываемойФормы, , ЭтотОбъект); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html index 1deeeb914..f9a7bf078 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html @@ -13,20 +13,7 @@ TD { </li><li><strong>Монитор Интернет-поддержки</strong> - информация о поддержке программного продукта, версии программы и др. </li><li><strong>Подключаться к серверам в зоне *.1c.eu</strong> - если настройка включена тогда подключение будет устанавливаться к серверу в зоне *.1c.eu при наличии сервера в этой зоне. По умолчанию подключение устанавливается к *.1c.ru.</li></ul><p></p> <h3>Новости</h3> -<ul><li><strong>Управление новостями</strong> - управление настройками новостей, а также ручное обновление классификаторов и списка новостей.</li></ul><h3>Обновление версии программы</h3> -<p></p> -<p></p> -<p></p> -<table><a href="../idb48e4395-6753-4751-b73c-12d7d3ef81e3/038b5c85-fb1c-4082-9c4c-e69f8928bf3a" name="СтандартныеПодсистемы.ОбновлениеКонфигурации"> -<tbody><tr><td> -<li><a href="../idb48e4395-6753-4751-b73c-12d7d3ef81e3/038b5c85-fb1c-4082-9c4c-e69f8928bf3a">Обновление программы</a></li></td> -<td>Получение информации об обновлениях программы и автоматическая установка обновлений.</td></tr><tr><td> -<li><a href="CommonForm.ОписаниеИзмененийПрограммы/Help">Описание изменений программы</a></li></td> -<td>Просмотр списка изменений в установленной версии программы и рекомендаций по обновлению программы.</td></tr><tr><td> -<li><a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ/Help">Результаты обновления и дополнительная обработка данных</a></li></td> -<td>Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных</td></tr><tr><td> -<li><strong>Детализировать ход обновления в журнале регистрации</strong></li></td> -<td>При включенной настройке в <a href="DataProcessor.ЖурналРегистрации/Help">журнал регистрации</a> записываются выполняемые обработчики обновления с указанием времени выполнения.</td></tr></tbody></a></table><h3>1СПАРК Риски</h3> +<ul><li><strong>Управление новостями</strong> - управление настройками новостей, а также ручное обновление классификаторов и списка новостей.</li></ul><h3>1СПАРК Риски</h3> <ul><li>Проверять надежность контрагентов - получать информацию о надежности контрагентов из<br>сервиса 1СПАРК Риски: <ul><li><a href="../id5849f0b3-c1c3-4167-a62b-eb3af17aa651/038b5c85-fb1c-4082-9c4c-e69f8928bf3a">Индексы рисков 1СПАРК Риски</a>; </li><li><a href="../id6516c4d5-2497-4e93-89d5-2ded45dd3ca8/038b5c85-fb1c-4082-9c4c-e69f8928bf3a">Справки 1СПАРК Риски</a>; @@ -39,42 +26,51 @@ TD { <li><strong>Загружать классификатор в программу</strong></li></td> <td> <p>Использовать данные, загружаемые с сайта 1С или из папки на диске. Возможна работа без подключения к Интернету</p></td></tr><tr><td colspan="2">Для использования возможностей адресного классификатора предусмотрены команды:</td></tr><tr><td> -<li><a>Подключить интернет-поддержку</a></li></td> +<li><a><strong>Подключить интернет-поддержку</strong></a></li></td> <td>Для использования веб-сервиса 1С и загрузки обновлений адресного классификатора необходимо выполнить подключение к интернет-поддержке пользователей.</td></tr><tr><td> -<li><a href="InformationRegister.АдресныеОбъекты.Form.ЗагрузкаАдресногоКлассификатора/Help"><font color="#0066cc">Загрузить классификатор</font></a></li></td> +<li><a href="InformationRegister.АдресныеОбъекты.Form.ЗагрузкаАдресногоКлассификатора/Help">Загрузить классификатор</a></li></td> <td>Загрузка адресного классификатора с сайта 1С или из папки на диске.</td></tr><tr><td> -<li><a href="InformationRegister.АдресныеОбъекты.Form.ОчисткаАдресногоКлассификатора/Help"><font color="#0066cc">Очистить адресные сведения</font></a></li></td> +<li><a href="InformationRegister.АдресныеОбъекты.Form.ОчисткаАдресногоКлассификатора/Help">Очистить адресные сведения</a></li></td> <td>Удаление загруженных адресных сведений по выбранным, неиспользуемым регионам для уменьшения размера базы.</td></tr></tbody></table><h3>Классификатор банков, загрузка курсов валют</h3> <p></p> <table><tbody><a name="СтандартныеПодсистемы.Банки"> <tr><td> -<li><a href="Catalog.КлассификаторБанков/Help"><font color="#0066cc">Загрузить классификатор банков</font></a></li></td> +<li><a href="Catalog.КлассификаторБанков/Help">Загрузить классификатор банков</a></li></td> <td>Загрузка и обновление классификатора банков РФ из сети Интернет или диска 1С:ИТС.</td></tr></a><a name="СтандартныеПодсистемы.Валюты"> <tr><td> -<li><a href="DataProcessor.ЗагрузкаКурсовВалют/Help"><font color="#0066cc">Загрузить курсы валют</font></a></li></td> -<td>Загрузка курсов валют из сети Интернет.</td></tr></a></tbody></table><h3>Работа с контрагентами</h3> -<p>Для подготовки корректных данных и сокращения количества ошибок в программе предусмотрена автоматическая проверка контрагентов.</p> -<p></p> +<li><a href="DataProcessor.ЗагрузкаКурсовВалют/Help">Загрузить курсы валют</a></li></td> +<td>Загрузка курсов валют из сети Интернет.</td></tr></a></tbody></table><h3>Обновление версии программы</h3> +<p>В подразделе производится установка обновлений программы, также можно просмотреть информацию о предыдущих обновлениях.</p> +<table><tbody><a name="СтандартныеПодсистемы.ОбновлениеКонфигурации"> +<tr><td> +<li><a href="DataProcessor.УстановкаОбновлений/Help">Обновление программы</a> </li></td> +<td>С помощью этой команды можно получить информацию об обновлениях программы и настроить автоматическую установку обновлений.</td> +<p></p></tr></a><a name="СтандартныеПодсистемы.ОбновлениеВерсииИБ"> +<tr><td> +<li><a href="CommonForm.ОписаниеИзмененийПрограммы/Help">Описание изменений программы</a></li></td> +<td>Просмотр списка изменений в установленной версии программы и рекомендаций по обновлению программы.</td></tr><tr><td> +<li><strong>Автоматическая проверка обновлений</strong></li></td> +<td> +<p>С помощью переключателя можно выбрать настройки: </p> +<ul><li><strong>Отключена</strong>; +</li><li><strong>При запуске программы</strong>; +</li><li><strong>По заданному расписанию</strong> - при выборе этого значения становится доступной команда: +</li><li><strong>Настроить расписание</strong> - с помощью ссылки можно перейти к настройке расписания автоматической проверки обновлений.</li></ul></td></tr><tr><td> +<li><a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ/Help">Результаты обновления и дополнительная обработка данных</a></li></td> +<td>Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных.</td></tr><tr><td> +<li><strong>Детализировать ход обновления в журнале регистрации</strong></li></td> +<td>При включенном флажке в <a href="DataProcessor.ЖурналРегистрации/Help">журнал регистрации</a> записываются выполняемые обработчики обновления с указанием времени выполнения.</td></tr></a></tbody></table><h3>Онлайн-поддержка</h3> <p></p> <table width="100%"><tbody><tr><td> -<li><strong>Автоматически проверять контрагентов по ЕГРН</strong></li></td> -<td>Включите флажок для автоматической проверки регистрации контрагентов в ЕГРН  (Едином государственном реестре налогоплательщиков). Проверка проводится с помощью регламентного задания.</td></tr><tr><td> -<li><strong>Подробнее о сервисе</strong></li></td> -<td>Нажмите ссылку, для того чтобы получить информацию о работе с сервисом.</td></tr><tr><td> -<li><strong>Проверить доступ к веб-сервису</strong></li></td> -<td>Нажмите кнопку для проверки доступа к веб-сервису ФНС.</td></tr></tbody></table><a name="СтандартныеПодсистемы.Интеграция1СБухфон"> -<h3>Онлайн-поддержка</h3></a> -<p></p> -<table width="100%"><tbody><tr><td> -<li><strong>Связаться со специалистом онлайн-поддержки</strong></li></td> -<td>включите флажок, для того чтобы разрешить запуск приложения 1С-Коннект для соединения со специалистом поддержки, а также получить доступ к команде настройки.</td></tr><tr><td> -<li><a href="CommonForm.НастройкаОнлайнПоддержки/Help"><font color="#0066cc">Настройка онлайн-поддержки</font></a></li></td> +<li><strong>Онлайн-поддержка</strong></li></td> +<td>включите флажок, для того чтобы разрешить запуск приложения 1С-Коннект для соединения со специалистом поддержки, а также получить доступ к команде настройки.</td></tr><tr><td><a name="СтандартныеПодсистемы.Интеграция1СБухфон"> +<li><a href="CommonForm.НастройкаОнлайнПоддержки/Help">Настройка онлайн-поддержки</a></li></a></td> <td>настройка приложения 1С-Коннект на этом компьютере: можно расположить соответствующую ссылку для запуска на <strong>Начальной странице</strong> программы, а также скачать приложение и настроить его.</td></tr></tbody></table><h3>Склонения представлений объектов</h3> <p></p> <table width="100%"><tbody><tr><td> <li><strong>Склонять с помощью сервиса morpher.ru</strong></li></td> <td>включите флажок, для того чтобы разрешить использование сервиса склонения для получения представлений объектов в падежах (требуется подключение к Интернету).</td></tr><tr><td> -<li><a href="CommonForm.НастройкаДоступаКСервисуMorpher/Help"><font color="#0066cc">Настройка доступа к сервису склонения</font></a> </li></td> +<li><a href="CommonForm.НастройкаДоступаКСервисуMorpher/Help">Настройка доступа к сервису склонения</a> </li></td> <td>выполните команду для перехода к вводу регистрационных данных на сервисе склонения.</td></tr></tbody></table><h3>Центр мониторинга</h3> <p>В подразделе представлены настройки сбора, анализа и хранения технологической информации, обезличенной статистики использования конфигурации. Отчеты об использовании программы, автоматически переданные разработчикам, помогут им определить, над чем следует поработать в первую очередь. Собранные сведения являются обезличенными и содержат только статистические показатели. Подготовка и отправка отчетов не замедлит работу программы.</p> <p>С помощью переключателя выберите: </p> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl index 545b86fd6..00dc0409e 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl @@ -23,10 +23,9 @@ ВидимостьГруппыКоманды = Истина; Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); - УстановитьПривилегированныйРежим(Истина); - Элементы.ГруппаАдресныйКлассификаторПраваяКолонка.Видимость = - МодульИнтернетПоддержкаПользователей.ДанныеАутентификацииПользователяИнтернетПоддержки() = Неопределено; - УстановитьПривилегированныйРежим(Ложь); + Элементы.ГруппаАдресныйКлассификаторПраваяКолонка.Видимость = + НЕ МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + Иначе ВидимостьГруппыНастройки = Ложь; КонецЕсли; @@ -61,7 +60,12 @@ Элементы.ГруппаОбработкаЗагрузкаКурсовВалют.Видимость = Ложь; КонецЕсли; - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда + Элементы.ГруппаСклонения.Видимость = + Не РазделениеВключено + И Не ЭтоАвтономноеРабочееМесто + И ЭтоАдминистраторСистемы; + Иначе Элементы.ГруппаСклонения.Видимость = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl index 32a924d57..d2a32aa32 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl @@ -24,7 +24,8 @@ Если ОбщегоНазначения.РазделениеВключено() Или СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() - Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда + Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() + Или Не ПользователиСлужебный.ВнешниеПользователиВнедрены() Тогда Элементы.ГруппаВнешниеПользователи.Видимость = Ложь; Элементы.ОписаниеРаздела.Заголовок = diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form index bb8dfd88e..30afa962b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form @@ -1405,10 +1405,10 @@ <name>СтраницаОблачныйАрхивНеПодключено</name> <id>2160</id> <items xsi:type="form:FormGroup"> - <name>ГруппаСервисОАНеПодключен</name> + <name>ГруппаСервисОблачныйАрхивНеПодключен</name> <id>2162</id> <items xsi:type="form:Decoration"> - <name>ИконкаСервисОАНеПодключен</name> + <name>ИконкаСервисОблачныйАрхивНеПодключен</name> <id>2164</id> <visible>true</visible> <enabled>true</enabled> @@ -1416,7 +1416,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ИконкаСервисОАНеПодключенРасширеннаяПодсказка</name> + <name>ИконкаСервисОблачныйАрхивНеПодключенРасширеннаяПодсказка</name> <id>2166</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1426,7 +1426,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ИконкаСервисОАНеПодключенКонтекстноеМеню</name> + <name>ИконкаСервисОблачныйАрхивНеПодключенКонтекстноеМеню</name> <id>2165</id> <autoFill>true</autoFill> </contextMenu> @@ -1442,7 +1442,7 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ДекорацияСервисОАНеПодключен</name> + <name>ДекорацияСервисОблачныйАрхивНеПодключен</name> <id>2167</id> <title> <key>ru</key> @@ -1454,7 +1454,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ДекорацияСервисОАНеПодключенРасширеннаяПодсказка</name> + <name>ДекорацияСервисОблачныйАрхивНеПодключенРасширеннаяПодсказка</name> <id>2169</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1464,7 +1464,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ДекорацияСервисОАНеПодключенКонтекстноеМеню</name> + <name>ДекорацияСервисОблачныйАрхивНеПодключенКонтекстноеМеню</name> <id>2168</id> <autoFill>true</autoFill> </contextMenu> @@ -1481,10 +1481,10 @@ </userVisible> <title> <key>ru</key> - <value>Сервис ОА не подключен</value> + <value>Сервис облачный архив не подключен</value> - ГруппаСервисОАНеПодключенРасширеннаяПодсказка + ГруппаСервисОблачныйАрхивНеПодключенРасширеннаяПодсказка 2163 Label true @@ -1560,7 +1560,7 @@ СтраницаОблачныйАрхивПодключеноНаДругомКомпьютере 2172 - ИконкаСервисОАПодключенНаДругомКомпьютере + ИконкаСервисОблачныйАрхивПодключенНаДругомКомпьютере 2174 true true @@ -1568,7 +1568,7 @@ true - ИконкаСервисОАПодключенНаДругомКомпьютереРасширеннаяПодсказка + ИконкаСервисОблачныйАрхивПодключенНаДругомКомпьютереРасширеннаяПодсказка 2176 Label true @@ -1578,7 +1578,7 @@ - ИконкаСервисОАПодключенНаДругомКомпьютереКонтекстноеМеню + ИконкаСервисОблачныйАрхивПодключенНаДругомКомпьютереКонтекстноеМеню 2175 true @@ -1593,7 +1593,7 @@ - ДекорацияСервисОАПодключенНаДругомКомпьютере + ДекорацияСервисОблачныйАрхивПодключенНаДругомКомпьютере 2177 <key>ru</key> @@ -1608,7 +1608,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ДекорацияСервисОАПодключенНаДругомКомпьютереРасширеннаяПодсказка</name> + <name>ДекорацияСервисОблачныйАрхивПодключенНаДругомКомпьютереРасширеннаяПодсказка</name> <id>2179</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1618,7 +1618,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ДекорацияСервисОАПодключенНаДругомКомпьютереКонтекстноеМеню</name> + <name>ДекорацияСервисОблачныйАрхивПодключенНаДругомКомпьютереКонтекстноеМеню</name> <id>2178</id> <autoFill>true</autoFill> </contextMenu> @@ -2288,6 +2288,41 @@ <toolTipRepresentation>ShowBottom</toolTipRepresentation> <representationInContextMenu>Auto</representationInContextMenu> </items> + <items xsi:type="form:Button"> + <name>ПравилаПроверкиУчета</name> + <id>2221</id> + <title> + <key>ru</key> + <value>Правила проверки учета</value> + + true + true + + true + + + ПравилаПроверкиУчетаРасширеннаяПодсказка + 2222 + + <key>ru</key> + <value>Правила проверки корректности данных (ссылочная целостность, циклические ссылки и.т.д.).</value> + + Label + true + + Left + + + Hyperlink + Catalog.ПравилаПроверкиУчета.StandardCommand.OpenList + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + true true @@ -2709,7 +2744,7 @@ <key>ru</key> - <value>Детализировать обновление ИБВ журнале регистрации</value> + <value>Детализировать обновление ИБ в журнале регистрации</value> 43 false @@ -2847,6 +2882,38 @@ true + + СправочникПрофилиКлючевыхОперацийОткрытьСписок + 2217 + true + true + + true + + + СправочникПрофилиКлючевыхОперацийОткрытьСписокРасширеннаяПодсказка + 2218 + + <key>ru</key> + <value>Настройки профилей ключевых операций.</value> + + Label + true + true + + Left + + + Hyperlink + Catalog.ПрофилиКлючевыхОпераций.StandardCommand.OpenList + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + true true @@ -2881,45 +2948,13 @@ ГруппаОбработкаОценкаПроизводительности 1594 - - ОбработкаОценкаПроизводительности - 1595 - - <key>ru</key> - <value>Показатели производительности</value> - - true - true - - true - - - ОбработкаОценкаПроизводительностиExtendedTooltip - 1677 - - <key>ru</key> - <value>Просмотр и оценка результатов замеров производительности.</value> - - Label - true - true - - Left - - - Hyperlink - DataProcessor.ОценкаПроизводительности.StandardCommand.Open - Normal - Auto - true - true - UserCmds - ShowBottom - Auto - ОбработкаНастройкиОценкиПроизводительности 1946 + + <key>ru</key> + <value>Настройки</value> + true true @@ -2952,6 +2987,10 @@ ОбработкаОценкаПроизводительностиЭкспортДанных 2215 + + <key>ru</key> + <value>Экспорт замеров</value> + true true @@ -2981,6 +3020,42 @@ ShowBottom Auto + + ОбработкаОценкаПроизводительностиИмпортЗамеровПроизводительности + 2219 + + <key>ru</key> + <value>Импорт замеров</value> + + true + true + + true + + + ОбработкаОценкаПроизводительностиИмпортЗамеровПроизводительностиРасширеннаяПодсказка + 2220 + + <key>ru</key> + <value>Импорт замеров производительности.</value> + + Label + true + true + + Left + + + Hyperlink + DataProcessor.ОценкаПроизводительности.Command.ИмпортЗамеровПроизводительности + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + true true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html index fea91a069..75bf99043 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html @@ -38,11 +38,10 @@ TD {
        • Разблокировать работу с внешними ресурсами
        • С помощью кнопки можно снять блокировку регламентных заданий по работе с внешними ресурсами. Она автоматически устанавливается, если изменилось местоположение ИБ в связи с копированием или восстановлением из резервной копии.
        • Управление итогами и агрегатами
        • -Управление итогами регистров накопления и бухгалтерии и агрегатами оборотных регистров. Правильная настройка итогов и агрегатов может повысить производительность программы. -

          Резервное копирование и восстановление

          -

          С целью уменьшения риска потери данных необходимо регулярно выполнять резервное копирование программы. Частота создания резервных копий зависит от интенсивности ввода новых данных.

          - +
          -
        • Создание резервной  копии
        • Управление итогами регистров накопления и бухгалтерии и агрегатами оборотных регистров. Правильная настройка итогов и агрегатов может повысить производительность программы.

          Резервное копирование и восстановление

          +

          С целью уменьшения риска потери данных необходимо регулярно выполнять резервное копирование программы. Частота создания резервных копий зависит от интенсивности ввода новых данных.

          + +
          Создание резервной  копии Выполнение резервного копирования программы: прямо сейчас, через некоторое время или при завершении работы.
        • Настройка резервного копирования
        • Настройка автоматического резервного копирования по расписанию, или отключение контроля резервного копирования, если оно выполняется сторонними средствами.
          @@ -50,13 +49,15 @@ TD { Восстановление программы из резервной копии.

          Корректировка данных

          В программе предусмотрены различные возможности поддерживать списки в порядке: изменять данные, отобранные по определенным признакам; устранять повторяющиеся элементы автоматически, при этом программа также исправляет ссылки на удаленные элементы.

          - - - - -
          -
        • Групповое изменение реквизитов
        • Изменение реквизитов и табличных частей в выбранных элементах.
          -
        • Поиск и удаление дублей
        • Поиск похожих элементов по заданным условиям сравнения.

          Результаты обновления программы

          + + + + + +
          +
        • Групповое изменение реквизитов
        • Изменение реквизитов и табличных частей в выбранных элементах.
          +
        • Поиск и удаление дублей
        • Поиск похожих элементов по заданным условиям сравнения.
          +
        • Правила проверки учета
        • Правила проверки корректности данных информационной базы.

          Результаты обновления программы

          В подразделе производится установка обновлений программы, также можно просмотреть информацию о предыдущих обновлениях.

          -
          @@ -69,16 +70,18 @@ TD {
        • Результаты обновления и дополнительная обработка данных
        • Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных.
        • Детализировать ход обновления в журнале регистрации
        • При включенном флажке в журнал регистрации записываются выполняемые обработчики обновления с указанием времени выполнения.
          -

          Оценка производительности

          -

          В программе предусмотрены встроенные средства для сбора и анализа данных о производительности ее работы по APDEX. В подразделе можно настроить параметры:

          +При включенном флажке в журнал регистрации записываются выполняемые обработчики обновления с указанием времени выполнения.

          Оценка производительности

          +

          В программе предусмотрены встроенные средства для сбора и анализа данных о производительности ее работы по APDEX. В подразделе можно настроить параметры:

          - + - -
        • Оценка производительности
        • Флажок замеров интегральной производительности программы по методике APDEX.
          +Флажок замеров интегральной производительности программы по методике APDEX.
          +
        • Профили ключевых операций
        • Переход к настройке профилей ключевых операций.
        • Настройки оценки производительности
        • Настройки параметров оценки производительности.
          -
        • Показатели производительности
        • Просмотр и оценка результатов замеров производительности.
        • Экспорт замеров производительности
        • Экспорт замеров производительности за произвольный период.

          См. также:

          +Экспорт замеров производительности за произвольный период.

          + +
        • Импорт замеров производительности
        • +Импорт замеров производительности за произвольный период.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl index de8376b73..3a881e475 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl @@ -86,6 +86,12 @@ МодульОблачныйАрхив.ПанельАдминистрированияБСП_ПриСозданииНаСервере(ЭтотОбъект); КонецЕсли; + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + Если Элементы.Найти("ПравилПроверкиУчета") <> Неопределено Тогда + Элементы.ПравилаПроверкиУчета.Видимость = Ложь; + КонецЕсли; + КонецЕсли; + // Обновление состояния элементов. УстановитьДоступность(); diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form index c79dbe8a0..b8245ed61 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form @@ -1646,7 +1646,7 @@ Hyperlink - DataProcessor.ПанельАдминистрированияБСП.Command.УправлениеПолнотекстовымПоиском + Form.Command.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов Normal Auto true @@ -2088,6 +2088,28 @@ DontUse Auto + + УправлениеПолнотекстовымПоискомИИзвлечениемТекстов + + <key>ru</key> + <value>Настроить</value> + + 1 + + ru + Управление полнотекстовым поиском и извлечением текстов + + + true + + + + УправлениеПолнотекстовымПоискомИИзвлечениемТекстов + + + DontUse + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl index d371c0e5b..1716d9c16 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl @@ -149,6 +149,13 @@ КонецПроцедуры +&НаКлиенте +Процедура УправлениеПолнотекстовымПоискомИИзвлечениемТекстов(Команда) + + ОткрытьФорму("Обработка.ПанельАдминистрированияБСП.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html index 51e202c9a..50e9a6a4d 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html @@ -13,6 +13,7 @@ TD {
        • Рассылки отчетов - переход к списку рассылок отчетов для автоматического формирования отчетов и доставки сформированных отчетов получателям.
        • Универсальный отчет - предназначен для получения отчета по выбранным данным программы - по спискам, документам, регистрам и т.д.
        • Расширения - Подключение расширений: разделов, отчетов и обработок в дополнение к предусмотренным в программе.
        • -
        • Внешние компоненты - переход к списку внешних компонент. Программа предоставляет администратору возможность контролировать список внешних компонент, используемых на рабочих местах. В списке администратор может подключить внешние компоненты из файла на компьютере или обновить их.
        • +
        • Внешние компоненты - переход к списку внешних компонент. Программа предоставляет администратору возможность контролировать список внешних компонент, используемых на рабочих местах. В списке администратор может подключить внешние компоненты из файла на компьютере или обновить их.
        • +
        • Дополнительные отчеты и обработки - включает дополнительные отчеты и обработки, после этого становится доступной команда:
        • Дополнительные отчеты и обработки - переход к подключению внешних печатных форм, отчетов и обработок в дополнение к предусмотренным в программе.

        См. также:

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html index 1f88382e3..3ae17d96f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html @@ -6,7 +6,7 @@ TD { }

        Предназначена для включения и отключения полнотекстового поиска, обновления индекса полнотекстового поиска, а также настройки извлечения текстов из файлов для использования при поиске.

        -

        Открывается по команде Управление полнотекстовым поиском раздела Администрирование - Общие настройки - Полнотекстовый поиск.

        +

        Открывается по команде Управление полнотекстовым поиском раздела Администрирование - Общие настройки - Полнотекстовый поиск данных.

        Программа позволяет производить полнотекстовый поиск в любых справочниках, документах и других объектах, отыскивая заданную строку во всех полях объектов. При наличии присоединенных файлов, содержащих текстовую информацию, поиск осуществляется также и по ним. Полнотекстовый поиск используется при поиске данных в программе по содержимому справочников, документов и других объектов программы.

        Также полнотекстовый поиск предоставляет такие возможности как: поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ); поддержка замещения (написание части символов в русских словах одноклавишными латинскими символами); нечеткий поиск (буквы в найденных словах могут отличаться).

        Для начала работы с полнотекстовым поиском необходимо включить флажок Полнотекстовый поиск данных. В этом случае становятся доступными команды, которые позволяют настроить полнотекстовый поиск данных в программе, управлять индексом полнотекстового поиска, обновлять и очищать его.  По умолчанию флажок включен.

        @@ -17,8 +17,8 @@ TD {
      • Если в программе есть данные, которые не прошли индексирование, то становится доступна кнопка Обновить индекс и выводится Статус индекса "Требуется обновление".

      Очистка индекса полнотекстового поиска

      • Если работа поиска по каким-то причинам нарушена, то с помощью кнопки Очистить индекс можно удалить все файлы полнотекстового индекса. После удаления индекса необходимо заново его построить, используя кнопку Обновить индекс.

      Проверка индекса полнотекстового поиска

      • -
        В любой момент можно проверить состояние индекса полнотекстового поиска с помощью кнопки Проверить индекс.

      В клиент-серверном режиме доступны команды по настройке автоматического извлечения текстов.

      -

      Автоматическое извлечение текстов

      +
      В любой момент можно проверить состояние индекса полнотекстового поиска с помощью кнопки Проверить индекс.

    В клиент-серверном режиме доступны команды по настройке автоматического извлечения текстов.

    +

    Автоматическое извлечение текстов

    Извлечение текстов из файлов необходимо для полнотекстового поиска в программе. 

    Для настройки необходимо с помощью переключателя выбрать:

    -

    См. также:

    +
  • Значение дополнительного параметра: BackgroundJob.CommonModule.ПолнотекстовыйПоискСервер.ОбновлениеИндексаППДПоРасписанию.
  • В кластере нет серверов под управлением ОС Windows (все сервера в кластере только под управлением ОС Linux) - в этом случае с помощью команды Запустить извлечение текстов можно начать извлечение текстов в тонком клиенте на рабочей станции под управлением ОС Windows.
    • Если в клиент-серверном варианте один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем выполнить команду Извлечение текстов, для того чтобы в автоматическом режиме извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.
  • См. также:

  • Настройки программы;
  • Работа с формами.
  • \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html index 70d5a2b1f..f9b42d857 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html @@ -3,11 +3,12 @@

    Для эффективной работы программы ее необходимо правильно настроить.

    При необходимости, часто используемые настройки можно вынести в командный интерфейс раздела Администрирование в настройках панели навигации или панели действий, в зависимости от типа настройки.

    См. также:

    -
  • Поддержка и обслуживание - в данном подразделе администратору предоставляются возможности по поддержанию программы в работоспособном состоянии; +
  • Обслуживание - в данном подразделе администратору предоставляются возможности по поддержанию программы в работоспособном состоянии;
  • Общие настройки - в данном подразделе производятся основные настройки программы;
  • Настройки пользователей и прав - в данном подразделе предусмотрены команды, связанные с управлением доступом и настройкой прав пользователей; +
  • Интернет-поддержка и сервисы - в данном подразделе предусмотрены команды, связанные с интернет-поддержкой программы, загрузкой классификаторов и обновлением версии;
  • Органайзер - в данном подразделе предусмотрены команды настройки электронной почты, заметок, напоминаний и бизнес-процессов; -
  • Настройки синхронизации данных - в данном подразделе производится настройка синхронизации данных с другими программами, а также организация совместной работы в распределенной информационной базе; +
  • Синхронизации данных - в данном подразделе производится настройка синхронизации данных с другими программами, а также организация совместной работы в распределенной информационной базе;
  • Настройки работы с файлами - в данном подразделе предоставляется возможность настройки параметров загрузки, хранения и обработки файлов;
  • Печатные формы, отчеты и обработки - в данном подразделе производится настройка печатных форм, вариантов отчетов, дополнительных отчетов и обработок. 

  • \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo index 8391e0e88..3a990db9a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo @@ -256,13 +256,4 @@ Интернет-сервисы и поддержка. Обновление версии программы. Загрузка классификаторов. - - УправлениеПолнотекстовымПоиском - - ru - Управление полнотекстовым поиском - - NavigationPanelSeeAlso - Auto - diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl index e6768e692..1fc2d271a 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl @@ -68,8 +68,8 @@ КонецЕсли; ТекстВопроса = НСтр("ru = 'Выполнить перенос файлов в информационной базе в тома хранения файлов? - | - |Эта операция может занять продолжительное время.'"); + | + |Эта операция может занять продолжительное время.'"); Обработчик = Новый ОписаниеОповещения("ВыполнитьПереносФайловВТомаЗавершение", ЭтотОбъект); ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); КонецПроцедуры @@ -366,8 +366,7 @@ КонецПопытки; ТипХраненияФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "ТипХраненияФайла"); - Если ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - // Тут файл на диске - так не должно быть. + Если ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда // Файл уже в томе. РазблокироватьДанныеДляРедактирования(ФайлСсылка); РазблокироватьДанныеДляРедактирования(ВерсияСсылка); Возврат Ложь; @@ -380,11 +379,10 @@ БлокировкаВерсии = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаВерсии.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ВерсияСсылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ВерсияСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаВерсии.Заблокировать(); ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); - ХранилищеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); Если ТипЗнч(ВерсияОбъект) = Тип("СправочникОбъект.ВерсииФайлов") Тогда СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ХранилищеФайла.Получить(), ВерсияОбъект.ДатаМодификацииУниверсальная, ВерсияОбъект.ПолноеНаименование, ВерсияОбъект.Расширение, ВерсияОбъект.НомерВерсии, ФайлСсылка.Зашифрован, @@ -408,7 +406,6 @@ БлокировкаОбъекта = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаОбъекта.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаОбъекта.Заблокировать(); ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); @@ -427,8 +424,8 @@ ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); СтруктураОшибки = Новый Структура; СтруктураОшибки.Вставить("ИмяФайла", ИмяДляЖурнала); diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html index f687087fd..14a188f30 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html @@ -2,7 +2,7 @@

    Предназначена для поиска и устранения дублирования элементов во всех списках программы (для администраторов программы).

    При работе пользователей в программе часто ошибочно вводятся дубли (например, неправильно производился поиск элемента, в результате его не нашли и ввели заново), которые мешают правильному учету. В документах указывают то один экземпляр элемента, то другой, в результате при проведении документов возникают неправильные проводки, и баланс не сходится. Поэтому от дублирования в программе необходимо избавляться.

    Программа позволяет найти вхождения всех дублирующихся элементов и производит в документах замену всех ссылок на дубли ссылками на выбранный "правильный" элемент, затем помечает на удаление дублирующиеся элементы в списке.

    -

    Команду Поиск и удаление дублей можно найти в разделе Администрирование - Поддержка и обслуживание.

    +

    Команду Поиск и удаление дублей можно найти в разделе Администрирование - Обслуживание - Корректировка данных.

    Поиск дублей

    • В поле Искать в  Выберите один из списков программы.
    • В поле Отбирать задайте условия отбора элементов списка, для этого перейдите по ссылке Все элементы (значение по умолчанию) и определите Правила отбора. @@ -25,6 +25,6 @@
    • Если список найденных дублей не устраивает, можно изменить условия поиска и нажать Повторить поиск.

    Удаление дублей

    • Если все перечисленные в информационной строке списка условия устраивают, нажмите Удалить дубли. Дубли будут помечены на удаление, все их вхождения в документах заменяются на выбранный Оригинал.
    • Для выхода  без удаления нажмите Закрыть. Условия поиска и список дублей не сохраняются. -
    • Окончательно удалить дубли можно по команде Удаление помеченных объектов раздела Администрирование - Поддержка и обслуживание.

    Просмотр ссылок на элементы списка дублей

    +
  • Окончательно удалить дубли можно по команде Удаление помеченных объектов раздела Администрирование - Обслуживание.
  • Просмотр ссылок на элементы списка дублей

    • По ссылке Все места использования можно перейти к просмотру отчета Места использования по элементам, входящим в список дублей, которые используются в документах программы.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl index f9ab9d439..a270cdf09 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl @@ -4,12 +4,8 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму( - "ОбщаяФорма.ФормаПоиска", - , - ПараметрыВыполненияКоманды.Источник, - ПараметрыВыполненияКоманды.Уникальность, - ПараметрыВыполненияКоманды.Окно); + ОткрытьФорму("ОбщаяФорма.ФормаПоиска",, + ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form similarity index 86% rename from SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Form.form rename to SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form index 516886447..60c3f0e36 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form @@ -8,7 +8,7 @@ ГруппаОбластьПоиска 29 - ОбластьПоиска + ПереключательВездеВРазделах 1 true true @@ -16,7 +16,7 @@ true
    - ИскатьВРазделах + ПереключательВездеВРазделах None @@ -24,7 +24,7 @@ ОбластьПоискаПриИзменении - ОбластьПоискаРасширеннаяПодсказка + ПереключательВездеВРазделахРасширеннаяПодсказка 3 Label true @@ -34,7 +34,7 @@ - ОбластьПоискаКонтекстноеМеню + ПереключательВездеВРазделахКонтекстноеМеню 2 true @@ -66,10 +66,10 @@ - КоманднаяПанельДереваРазделов + КоманднаяПанель 31 - КомандыДереваРазделов + Команды 33 УстановитьФлажки @@ -185,7 +185,7 @@ Еще - КомандыДереваРазделовРасширеннаяПодсказка + КомандыРасширеннаяПодсказка 34 Label true @@ -207,10 +207,10 @@ <key>ru</key> - <value>Командная панель дерева разделов</value> + <value>Командная панель</value> - КоманднаяПанельДереваРазделовРасширеннаяПодсказка + КоманднаяПанельРасширеннаяПодсказка 32 Label true @@ -284,10 +284,10 @@ SortListDesc Tree - ДеревоРазделовПоискаГруппа + Группа 23 - ДеревоРазделовПоискаПометка + Пометка 20 true true @@ -303,7 +303,7 @@ ДеревоРазделовПоискаПометкаПриИзменении - ДеревоРазделовПоискаПометкаРасширеннаяПодсказка + ПометкаРасширеннаяПодсказка 22 Label true @@ -313,7 +313,7 @@ - ДеревоРазделовПоискаПометкаКонтекстноеМеню + ПометкаКонтекстноеМеню 21 true @@ -322,10 +322,55 @@ true Left true - + + true + - ДеревоРазделовПоискаРаздел + Картинка + 45 + true + true + + true + + + ДеревоРазделовПоиска.Картинка + + None + + КартинкаРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + КартинкаКонтекстноеМеню + 46 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + + 1 + + + + + Раздел 17 true true @@ -336,7 +381,7 @@ ДеревоРазделовПоиска.Раздел - ДеревоРазделовПоискаРазделРасширеннаяПодсказка + РазделРасширеннаяПодсказка 19 Label true @@ -346,11 +391,12 @@ - ДеревоРазделовПоискаРазделКонтекстноеМеню + РазделКонтекстноеМеню 18 true InputField + true Auto true Left @@ -372,10 +418,10 @@ <key>ru</key> - <value>Дерево разделов поиска группа</value> + <value>Группа</value> - ДеревоРазделовПоискаГруппаРасширеннаяПодсказка + ГруппаРасширеннаяПодсказка 24 Label true @@ -509,7 +555,7 @@ ФормаКоманднаяПанель -1 - ФормаКомандаОК + КомандаОК 39 true true @@ -517,7 +563,7 @@ true - ФормаКомандаОКРасширеннаяПодсказка + КомандаОКРасширеннаяПодсказка 40 Label true @@ -535,7 +581,7 @@ Auto - ФормаОтмена + Отмена 27 true true @@ -543,7 +589,7 @@ true - ФормаОтменаРасширеннаяПодсказка + ОтменаРасширеннаяПодсказка 28 Label true @@ -604,10 +650,10 @@
    true
    - ИскатьВРазделах + ПереключательВездеВРазделах <key>ru</key> - <value>Искать в разделах</value> + <value>Переключатель везде в разделах</value> 2 @@ -666,7 +712,11 @@ 2 - Boolean + Number + + 1 + true + true @@ -727,59 +777,49 @@ true + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 6 + + Picture + + + true + + + true + + + + ЭтоПодраздел + + <key>ru</key> + <value>Это подраздел</value> + + 7 + + Boolean + + + true + + + true + + - ОбластиПоиска + КонтейнерСостояний <key>ru</key> - <value>Области поиска</value> + <value>Контейнер состояний</value> - 4 - - ValueList - - - true - - - true - - - - - - - ТекущийРаздел - - <key>ru</key> - <value>Текущий раздел</value> - - 5 - - String - - - - true - - - true - - - - ИдентификаторСтроки - - <key>ru</key> - <value>Идентификатор строки</value> - - 6 - - Number - - 5 - true - - + 7 + true @@ -903,6 +943,18 @@ DontUse Auto + + ОбластиПоиска + + ValueList + + + + ИскатьВРазделах + + Boolean + + diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Help/ru.html similarity index 100% rename from SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Help/ru.html rename to SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Help/ru.html diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl new file mode 100644 index 000000000..8260dbd5e --- /dev/null +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl @@ -0,0 +1,838 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + КонтейнерСостояний = Новый Структура; + КонтейнерСостояний.Вставить("ОбластиПоиска", Новый СписокЗначений); // Идентификаторы объектов метаданных. + КонтейнерСостояний.Вставить("ТекущийРаздел", ""); + КонтейнерСостояний.Вставить("ИдентификаторСтроки", 0); + + Параметры.Свойство("ОбластиПоиска", КонтейнерСостояний.ОбластиПоиска); + Параметры.Свойство("ИскатьВРазделах", ПереключательВездеВРазделах); // Конвертация из Булево в Число. + + ЗагрузитьТекущийПутьРаздела(КонтейнерСостояний); + + ПриЗаполненииДереваРазделовПоиска(КонтейнерСостояний); + + ИскатьВРазделах = ИскатьВРазделах(ПереключательВездеВРазделах); + ОбновитьДоступностьПриПереключенииВездеВРазделах(Элементы.ДеревоРазделовПоиска, ИскатьВРазделах); + ОбновитьДоступностьПриПереключенииВездеВРазделах(Элементы.Команды, ИскатьВРазделах); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + РазвернутьТекущийРазделДереваРазделов(Элементы.ДеревоРазделовПоиска, КонтейнерСостояний) + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ОбластьПоискаПриИзменении(Элемент) + + ИскатьВРазделах = ИскатьВРазделах(ПереключательВездеВРазделах); + ОбновитьДоступностьПриПереключенииВездеВРазделах(Элементы.ДеревоРазделовПоиска, ИскатьВРазделах); + ОбновитьДоступностьПриПереключенииВездеВРазделах(Элементы.Команды, ИскатьВРазделах); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоРазделовПоиска + +&НаКлиенте +Процедура ДеревоРазделовПоискаПометкаПриИзменении(Элемент) + + ЭлементДерева = ТекущийЭлемент.ТекущиеДанные; + + ПриПометкеЭлементаДерева(ЭлементДерева); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаОК(Команда) + + ТекущиеДанные = Элементы.ДеревоРазделовПоиска.ТекущиеДанные; + + ТекущийРаздел = ""; + Если ТекущиеДанные <> Неопределено Тогда + ТекущийРаздел = ТекущиеДанные.Раздел; + КонецЕсли; + ИдентификаторСтроки = Элементы.ДеревоРазделовПоиска.ТекущаяСтрока; + + СохранитьТекущийПутьРаздела(ТекущийРаздел, ИдентификаторСтроки); + + НастройкиПоиска = Новый Структура; + НастройкиПоиска.Вставить("ОбластиПоиска", СписокОбластейДереваРазделов()); + НастройкиПоиска.Вставить("ИскатьВРазделах", ИскатьВРазделах(ПереключательВездеВРазделах)); + + Закрыть(НастройкиПоиска); + +КонецПроцедуры + +&НаКлиенте +Процедура СнятьФлажки(Команда) + + ПометитьВсеЭлементыДереваРекурсивно(ДеревоРазделовПоиска, ПометкаФлажокНеУстановлен()); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажки(Команда) + + ПометитьВсеЭлементыДереваРекурсивно(ДеревоРазделовПоиска, ПометкаФлажокУстановлен()); + +КонецПроцедуры + +&НаКлиенте +Процедура СвернутьВсе(Команда) + + КоллекцияЭлементовДерева = ДеревоРазделовПоиска.ПолучитьЭлементы(); + ЭлементДеревоРазделов = Элементы.ДеревоРазделовПоиска; + + Для каждого ЭлементДерева Из ДеревоРазделовПоиска.ПолучитьЭлементы() Цикл + ЭлементДеревоРазделов.Свернуть(ЭлементДерева.ПолучитьИдентификатор()); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьВсе(Команда) + + КоллекцияЭлементовДерева = ДеревоРазделовПоиска.ПолучитьЭлементы(); + ЭлементДеревоРазделов = Элементы.ДеревоРазделовПоиска; + + Для каждого ЭлементДерева Из КоллекцияЭлементовДерева Цикл + ЭлементДеревоРазделов.Развернуть(ЭлементДерева.ПолучитьИдентификатор(), Истина); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область СлужебныеОбработчикиСобытий + +&НаСервере +Процедура ПриЗаполненииДереваРазделовПоиска(КонтейнерСостояний) + + Дерево = РеквизитФормыВЗначение("ДеревоРазделовПоиска"); + ЗаполнитьДеревоРазделовПоиска(Дерево); + ЗначениеВРеквизитФормы(Дерево, "ДеревоРазделовПоиска"); + + ПриУстановкеОбластиПоиска(ДеревоРазделовПоиска, КонтейнерСостояний); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриУстановкеОбластиПоиска(ДеревоРазделовПоиска, КонтейнерСостояний) + + ОбластиПоиска = КонтейнерСостояний.ОбластиПоиска; + + Для каждого ОбластьПоиска Из ОбластиПоиска Цикл + + ЭлементДерева = Неопределено; + ТекущийРаздел = Неопределено; + ВложенныеЭлементы = ДеревоРазделовПоиска.ПолучитьЭлементы(); + + // Поиск элемента дерева по пути к данным. + + ПутьКДанным = ОбластьПоиска.Представление; + Разделы = СтрРазделить(ПутьКДанным, ",", Ложь); + Для каждого ТекущийРаздел Из Разделы Цикл + Для каждого ЭлементДерева Из ВложенныеЭлементы Цикл + + Если ЭлементДерева.Раздел = ТекущийРаздел Тогда + ВложенныеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + Прервать; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + + // Если элемент дерева найден, установка пометки. + + Если ЭлементДерева <> Неопределено + И ЭлементДерева.Раздел = ТекущийРаздел Тогда + + ЭлементДерева.Пометка = ПометкаФлажокУстановлен(); + ПометитьЭлементыРодителейРекурсивно(ЭлементДерева); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева. +// * Пометка - Число - Обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПриПометкеЭлементаДерева(ЭлементДерева) + + ЭлементДерева.Пометка = СледующееЗначениеПометкиЭлемента(ЭлементДерева); + + Если ТребуетсяПометитьВложенныеЭлементы(ЭлементДерева) Тогда + ПометитьВложенныеЭлементыРекурсивно(ЭлементДерева); + КонецЕсли; + + Если ЭлементДерева.Пометка = ПометкаФлажокНеУстановлен() Тогда + ЭлементДерева.Пометка = ЗначениеПометкиОтносительноВложенныхЭлементов(ЭлементДерева); + КонецЕсли; + + ПометитьЭлементыРодителейРекурсивно(ЭлементДерева); + +КонецПроцедуры + +#КонецОбласти + +#Область МодельПредставления + +&НаКлиентеНаСервереБезКонтекста +Функция ПометкаФлажокНеУстановлен() + + Возврат 0; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПометкаФлажокУстановлен() + + Возврат 1; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПометкаКвадрат() + + Возврат 2; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаполнитьДеревоРазделовПоиска(ДеревоРазделовПоиска) + + ДобавитьСтрокиДереваРазделовПоискаПоПодсистемамРекурсивно(ДеревоРазделовПоиска, Метаданные.Подсистемы); + + ПолнотекстовыйПоискСерверПереопределяемый.ПриПолученииРазделовПолнотекстовогоПоиска(ДеревоРазделовПоиска); + + ЗаполнениеСлужебныхСвойствПослеПолученияРазделовРекурсивно(ДеревоРазделовПоиска); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ДобавитьСтрокиДереваРазделовПоискаПоПодсистемамРекурсивно(ТекущаяСтрокаДерева, Подсистемы) + + Для каждого Подсистема Из Подсистемы Цикл + + Если ОбъектМетаданныхДоступен(Подсистема) Тогда + + НоваяСтрокаПодсистема = НовыйЭлементДереваРаздел(ТекущаяСтрокаДерева, Подсистема); + + ДобавитьСтрокиДереваРазделовПоискаПоСоставуРекурсивно(НоваяСтрокаПодсистема, Подсистема.Состав); + + Если Подсистема.Подсистемы.Количество() > 0 Тогда + ДобавитьСтрокиДереваРазделовПоискаПоПодсистемамРекурсивно(НоваяСтрокаПодсистема, Подсистема.Подсистемы); + КонецЕсли; + + Если НоваяСтрокаПодсистема.Строки.Количество() = 0 Тогда + ТекущаяСтрокаДерева.Строки.Удалить(НоваяСтрокаПодсистема); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ДобавитьСтрокиДереваРазделовПоискаПоСоставуРекурсивно(ТекущаяСтрокаДерева, СоставПодсистемы) + + Для каждого ОбъектПодсистемы Из СоставПодсистемы Цикл + + Если ОбщегоНазначения.ЭтоСправочник(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоДокумент(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоРегистрСведений(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоЗадача(ОбъектПодсистемы) Тогда + + Если ОбъектМетаданныхДоступен(ОбъектПодсистемы) Тогда + + НоваяСтрокаОбъект = НовыйЭлементДереваОбъектМетаданных(ТекущаяСтрокаДерева, ОбъектПодсистемы); + + Если ОбщегоНазначения.ЭтоСправочник(ОбъектПодсистемы) Тогда + ПодчиненныеСправочники = ПодчиненныеСправочники(ОбъектПодсистемы); + ДобавитьСтрокиДереваРазделовПоискаПоСоставуРекурсивно(НоваяСтрокаОбъект, ПодчиненныеСправочники); + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектПодсистемы) Тогда + + Если ОбъектМетаданныхДоступен(ОбъектПодсистемы) Тогда + + НоваяСтрокаЖурнал = НовыйЭлементДереваРаздел(ТекущаяСтрокаДерева, ОбъектПодсистемы); + + ДобавитьСтрокиДереваРазделовПоискаПоСоставуРекурсивно(НоваяСтрокаЖурнал, ОбъектПодсистемы.РегистрируемыеДокументы); + + Если НоваяСтрокаЖурнал.Строки.Количество() = 0 Тогда + ТекущаяСтрокаДерева.Строки.Удалить(НоваяСтрокаЖурнал); + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НовыйЭлементДереваРаздел(ТекущаяСтрокаДерева, Раздел) + + ПредставлениеРаздела = Раздел; + Если ОбщегоНазначения.ЭтоЖурналДокументов(Раздел) Тогда + ПредставлениеРаздела = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (Журнал)'"), ПредставлениеРаздела); + КонецЕсли; + + НоваяСтрока = ТекущаяСтрокаДерева.Строки.Добавить(); + НоваяСтрока.Раздел = ПредставлениеРаздела; + + Если ЭтоКорневаяПодсистема(Раздел) Тогда + НоваяСтрока.Картинка = Раздел.Картинка; + КонецЕсли; + + Возврат НоваяСтрока; + +КонецФункции + +&НаСервереБезКонтекста +Функция НовыйЭлементДереваОбъектМетаданных(ТекущаяСтрокаДерева, ОбъектМетаданных) + + ПредставлениеОбъекта = ПредставлениеФормыСписка(ОбъектМетаданных); + + НоваяСтрока = ТекущаяСтрокаДерева.Строки.Добавить(); + НоваяСтрока.Раздел = ПредставлениеОбъекта; + НоваяСтрока.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); + + Возврат НоваяСтрока; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаполнениеСлужебныхСвойствПослеПолученияРазделовРекурсивно(ТекущаяСтрокаДерева) + + Если ТипЗнч(ТекущаяСтрокаДерева) = Тип("СтрокаДереваЗначений") Тогда + + // Заполнение ПутьКДанным и ЭтоПодраздел и ЭтоОбъектМетаданных выполняется после формирования дерева + // для того, чтобы корректно расставить эти признаки для добавленных в событии + // ПолнотекстовыйПоискСерверПереопределяемый.ПриПолученииРазделовПолнотекстовогоПоиска + // разделов и освободить разработчиков конфигурации от необходимости думать над этими полями. + + ЭтоОбъектМетаданных = ЗначениеЗаполнено(ТекущаяСтрокаДерева.ОбъектМД); + + ТекущаяСтрокаДерева.ЭтоОбъектМетаданных = ЭтоОбъектМетаданных; + + Если ТекущаяСтрокаДерева.Уровень() = 0 Тогда + ТекущаяСтрокаДерева.ПутьКДанным = ТекущаяСтрокаДерева.Раздел; + Иначе + ТекущаяСтрокаДерева.ЭтоПодраздел = Не ЭтоОбъектМетаданных; + ТекущаяСтрокаДерева.ПутьКДанным = ТекущаяСтрокаДерева.Родитель.ПутьКДанным + "," + ТекущаяСтрокаДерева.Раздел; + КонецЕсли; + + КонецЕсли; + + Для каждого ПодчиненнаяСтрока Из ТекущаяСтрокаДерева.Строки Цикл + ЗаполнениеСлужебныхСвойствПослеПолученияРазделовРекурсивно(ПодчиненнаяСтрока); + ПодчиненнаяСтрока.Строки.Сортировать("ЭтоПодраздел, Раздел"); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция СписокОбластейДереваРазделов() + + Дерево = РеквизитФормыВЗначение("ДеревоРазделовПоиска"); + + СписокОбластей = Новый СписокЗначений; + ЗаполнитьСписокОбластейРекурсивно(СписокОбластей, Дерево.Строки); + + Возврат СписокОбластей; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаполнитьСписокОбластейРекурсивно(СписокОбластей, СтрокиДереваРазделов) + + Для каждого СтрокаРаздел Из СтрокиДереваРазделов Цикл + + Если СтрокаРаздел.Пометка = ПометкаФлажокУстановлен() Тогда + + Если СтрокаРаздел.ЭтоОбъектМетаданных Тогда + СписокОбластей.Добавить(СтрокаРаздел.ОбъектМД, СтрокаРаздел.ПутьКДанным); + КонецЕсли; + + КонецЕсли; + + ЗаполнитьСписокОбластейРекурсивно(СписокОбластей, СтрокаРаздел.Строки); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ИскатьВРазделах(ПереключательВездеВРазделах) + + Возврат (ПереключательВездеВРазделах = 1); + +КонецФункции + +#КонецОбласти + +#Область Представления + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Раздел.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоРазделовПоиска.ЭтоПодраздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); // Жирный. + Иначе + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветРазделаПанелиФункций); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПредставлениеФормыСписка(ОбъектМетаданных) + + Если Не ПустаяСтрока(ОбъектМетаданных.РасширенноеПредставлениеСписка) Тогда + Представление = ОбъектМетаданных.РасширенноеПредставлениеСписка; + ИначеЕсли Не ПустаяСтрока(ОбъектМетаданных.ПредставлениеСписка) Тогда + Представление = ОбъектМетаданных.ПредставлениеСписка; + Иначе + Представление = ОбъектМетаданных.Представление(); + КонецЕсли; + + Возврат Представление; + +КонецФункции + +#КонецОбласти + +#Область ИнтерактивнаяЛогикаПредставления + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьДоступностьПриПереключенииВездеВРазделах(Элемент, ИскатьВРазделах) + + Элемент.Доступность = ИскатьВРазделах; + +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьТекущийРазделДереваРазделов(Элемент, КонтейнерСостояний) + + ТекущийРаздел = КонтейнерСостояний.ТекущийРаздел; + ИдентификаторСтроки = КонтейнерСостояний.ИдентификаторСтроки; + + // Перейдем к разделу, с которым работали при предыдущих настройках. + Если Не ПустаяСтрока(ТекущийРаздел) И ИдентификаторСтроки <> 0 Тогда + + РазделПоиска = ДеревоРазделовПоиска.НайтиПоИдентификатору(ИдентификаторСтроки); + Если РазделПоиска = Неопределено + Или РазделПоиска.Раздел <> ТекущийРаздел Тогда + Возврат; + КонецЕсли; + + РодительРаздела = РазделПоиска.ПолучитьРодителя(); + Пока РодительРаздела <> Неопределено Цикл + Элементы.ДеревоРазделовПоиска.Развернуть(РодительРаздела.ПолучитьИдентификатор()); + РодительРаздела = РодительРаздела.ПолучитьРодителя(); + КонецЦикла; + + Элементы.ДеревоРазделовПоиска.ТекущаяСтрока = ИдентификаторСтроки; + + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева. +// * Пометка - Число - Обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция СледующееЗначениеПометкиЭлемента(ЭлементДерева) + + // 0 - Флажок не установлен. + // 1 - Флажок установлен. + // 2 - Установлен квадрат. + // + // Переопределение графа конечного автомата (или машины состояний, как ее еще можно назвать). + // + // Платформа делает постоянный цикл при изменении пометки, + // т.е. имеет компоненту сильной связности орграфа: + // 0-1-2-0-1-2-0-1... + // + // 0 + // / \ + // 2 - 1 + // + // т.е. совершает цикл: не помеченный - помеченный - квадрат - не помеченный. + // + // Нам требуется поведение недетерминированного конечного автомата с компонентой сильной связности: + // 0-1-0-1-0... + // + // т.е. помеченный должен переходить в не помеченный, а тот - опять в помеченный. + // + // При этом: + // + // Для разделов циклы: + // 1) 1-0-1-0-1... + // 2) 2-0-1-0-1-0-... + // + // /\ + // 2 - 0 -1 + // + // т.е. с квадрата должен быть переход к неустановленному флажку. + // + // Для метаданных циклы: + // 1) 1-0-1-0-1-0... + // 2) 2-1-0-1-0-1-0... + // + // /\ + // 2 - 1 -0 + // + // т.е. с квадрата должен быть переход к установленному флажку. + + // На момент проверки платформа уже изменила значение пометки. + + Если ЭлементДерева.ЭтоОбъектМетаданных Тогда + // Предыдущее значение пометки = 2 : Установлен квадрат. + Если ЭлементДерева.Пометка = 0 Тогда + Возврат ПометкаФлажокУстановлен(); + КонецЕсли; + КонецЕсли; + + // Предыдущее значение пометки = 1 : Флажок установлен. + Если ЭлементДерева.Пометка = 2 Тогда + Возврат ПометкаФлажокНеУстановлен(); + КонецЕсли; + + // Во всех остальных случаях - значение установленное платформой. + Возврат ЭлементДерева.Пометка; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева. +// * Пометка - Число - Обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПометитьЭлементыРодителейРекурсивно(ЭлементДерева) + + Родитель = ЭлементДерева.ПолучитьРодителя(); + + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ЭлементыРодителя = Родитель.ПолучитьЭлементы(); + Если ЭлементыРодителя.Количество() = 0 Тогда + Родитель.Пометка = ПометкаФлажокУстановлен(); + ИначеЕсли ЭлементДерева.Пометка = ПометкаКвадрат() Тогда + Родитель.Пометка = ПометкаКвадрат(); + Иначе + Родитель.Пометка = ЗначениеПометкиОтносительноВложенныхЭлементов(Родитель); + КонецЕсли; + + ПометитьЭлементыРодителейРекурсивно(Родитель); + +КонецПроцедуры + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева. +// * Пометка - Число - Обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция ЗначениеПометкиОтносительноВложенныхЭлементов(ЭлементДерева) + + СостояниеВложенныхЭлементов = СостояниеВложенныхЭлементов(ЭлементДерева); + + ЕстьПомеченные = СостояниеВложенныхЭлементов.ЕстьПомеченные; + ЕстьНепомеченные = СостояниеВложенныхЭлементов.ЕстьНепомеченные; + + Если ЭлементДерева.ЭтоОбъектМетаданных Тогда + + // Для объекта метаданных важно какое у него состояние сейчас, + // ведь этот объект метаданных надо возвращать. + // Нельзя сбрасывать установленный флажок. + + Если ЭлементДерева.Пометка = ПометкаФлажокУстановлен() Тогда + // Оставляем флажок взведенным независимо от вложенных. + Возврат ПометкаФлажокУстановлен(); + КонецЕсли; + + Если ЭлементДерева.Пометка = ПометкаФлажокНеУстановлен() + Или ЭлементДерева.Пометка = ПометкаКвадрат() Тогда + + Если ЕстьПомеченные Тогда + Возврат ПометкаКвадрат(); + Иначе + Возврат ПометкаФлажокНеУстановлен(); + КонецЕсли; + КонецЕсли; + + Иначе + + // Для разделов не важно какое состояние сейчас, + // они всегда зависят только от вложенных. + + Если ЕстьПомеченные Тогда + + Если ЕстьНепомеченные Тогда + Возврат ПометкаКвадрат(); + Иначе + Возврат ПометкаФлажокУстановлен(); + КонецЕсли; + + КонецЕсли; + + Возврат ПометкаФлажокНеУстановлен(); + + КонецЕсли; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева. +// * Пометка - Число - Обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция СостояниеВложенныхЭлементов(ЭлементДерева) + + ВложенныеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + + ЕстьПомеченные = Ложь; + ЕстьНепомеченные = Ложь; + + Для каждого ВложенныйЭлемент Из ВложенныеЭлементы Цикл + + Если ВложенныйЭлемент.Пометка = ПометкаФлажокНеУстановлен() Тогда + ЕстьНепомеченные = Истина; + Продолжить; + КонецЕсли; + + Если ВложенныйЭлемент.Пометка = ПометкаФлажокУстановлен() Тогда + ЕстьПомеченные = Истина; + + Если ВложенныйЭлемент.ЭтоОбъектМетаданных Тогда + + // Для объекта метаданных допустимо иметь непомеченные в своем составе вложенных, + // при этом самостоятельно быть помеченным. Чтобы обыграть эту ситуацию надо поднять + // вложенные элементы на один уровень с самим объектом, к которому они относятся. + + Состояние = СостояниеВложенныхЭлементов(ВложенныйЭлемент); + ЕстьПомеченные = ЕстьПомеченные Или Состояние.ЕстьПомеченные; + ЕстьНепомеченные = ЕстьНепомеченные Или Состояние.ЕстьНепомеченные; + КонецЕсли; + + Продолжить; + КонецЕсли; + + Если ВложенныйЭлемент.Пометка = ПометкаКвадрат() Тогда + ЕстьПомеченные = Истина; + ЕстьНепомеченные = Истина; + Продолжить; + КонецЕсли; + + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("ЕстьПомеченные", ЕстьПомеченные); + Результат.Вставить("ЕстьНепомеченные", ЕстьНепомеченные); + + Возврат Результат; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева. +// * Пометка - Число - Обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция ТребуетсяПометитьВложенныеЭлементы(ЭлементДерева) + + Если ЭлементДерева.ЭтоОбъектМетаданных Тогда + + // Если для объекта метаданных есть не полностью выбранные вложенные элементы, + // значит эти элементы были выбраны пользователем и не следует портить его выбор. + + СостояниеВложенныхЭлементов = СостояниеВложенныхЭлементов(ЭлементДерева); + + ЕстьПомеченные = СостояниеВложенныхЭлементов.ЕстьПомеченные; + ЕстьНепомеченные = СостояниеВложенныхЭлементов.ЕстьНепомеченные; + + Если ЕстьПомеченные И ЕстьНепомеченные Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева. +// * Пометка - Число - Обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПометитьВложенныеЭлементыРекурсивно(ЭлементДерева) + + ВложенныеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + + Для каждого ВложенныйЭлемент Из ВложенныеЭлементы Цикл + + ВложенныйЭлемент.Пометка = ЭлементДерева.Пометка; + ПометитьВложенныеЭлементыРекурсивно(ВложенныйЭлемент); + + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// КоллекцияЭлементовДерева - ДанныеФормыДерева, ДанныеФормыЭлементДерева. +// * Пометка - Число - Обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// ЗначениеПометки - Число - Устанавливаемое значение. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПометитьВсеЭлементыДереваРекурсивно(ЭлементДеревоРазделовПоиска, ЗначениеПометки) + + КоллекцияЭлементовДерева = ЭлементДеревоРазделовПоиска.ПолучитьЭлементы(); + + Для каждого ЭлементДерева Из КоллекцияЭлементовДерева Цикл + ЭлементДерева.Пометка = ЗначениеПометки; + ПометитьВсеЭлементыДереваРекурсивно(ЭлементДерева, ЗначениеПометки); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область БизнесЛогика + +&НаСервереБезКонтекста +Функция ЭтоКорневаяПодсистема(ОбъектМетаданных) + + Возврат Метаданные.Подсистемы.Содержит(ОбъектМетаданных); + +КонецФункции + +&НаСервереБезКонтекста +Функция ОбъектМетаданныхДоступен(ОбъектМетаданных) + + ДоступенПоПравам = ПравоДоступа("Просмотр", ОбъектМетаданных); + ДоступенПоФункциональнымОпциям = ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных); + + СвойстваМетаданного = Новый Структура("ПолнотекстовыйПоиск, ВключатьВКомандныйИнтерфейс"); + ЗаполнитьЗначенияСвойств(СвойстваМетаданного, ОбъектМетаданных); + + Если СвойстваМетаданного.ПолнотекстовыйПоиск = Неопределено Тогда + ИспользованиеПолнотекстовогоПоиска = Истина; // Если свойства нет - игнорируем. + Иначе + ИспользованиеПолнотекстовогоПоиска = (СвойстваМетаданного.ПолнотекстовыйПоиск = + Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать); + КонецЕсли; + + Если СвойстваМетаданного.ВключатьВКомандныйИнтерфейс = Неопределено Тогда + ВключатьВКомандныйИнтерфейс = Истина; // Если свойства нет - игнорируем. + Иначе + ВключатьВКомандныйИнтерфейс = СвойстваМетаданного.ВключатьВКомандныйИнтерфейс; + КонецЕсли; + + Возврат ДоступенПоПравам И ДоступенПоФункциональнымОпциям + И ИспользованиеПолнотекстовогоПоиска И ВключатьВКомандныйИнтерфейс; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПодчиненныеСправочники(ОбъектМетаданных) + + Результат = Новый Массив; + + Для Каждого Справочник Из Метаданные.Справочники Цикл + Если Справочник.Владельцы.Содержит(ОбъектМетаданных) + И ОбъектМетаданныхДоступен(Справочник) Тогда + + Результат.Добавить(Справочник); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Процедура СохранитьТекущийПутьРаздела(ТекущийРаздел, ИдентификаторСтроки) + + ПараметрыТекущегоРаздела = Новый Структура; + ПараметрыТекущегоРаздела.Вставить("ТекущийРаздел", ТекущийРаздел); + ПараметрыТекущегоРаздела.Вставить("ИдентификаторСтроки", ИдентификаторСтроки); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПолнотекстовыйПоискТекущийРаздел", "", ПараметрыТекущегоРаздела); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗагрузитьТекущийПутьРаздела(ПараметрыТекущегоРаздела) + + СохраненныеНастройкиПоиска = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискТекущийРаздел", ""); + + ТекущийРаздел = Неопределено; + ИдентификаторСтроки = Неопределено; + + Если ТипЗнч(СохраненныеНастройкиПоиска) = Тип("Структура") Тогда + СохраненныеНастройкиПоиска.Свойство("ТекущийРаздел", ТекущийРаздел); + СохраненныеНастройкиПоиска.Свойство("ИдентификаторСтроки", ИдентификаторСтроки); + КонецЕсли; + + ПараметрыТекущегоРаздела.ТекущийРаздел = ?(ТекущийРаздел = Неопределено, "", ТекущийРаздел); + ПараметрыТекущегоРаздела.ИдентификаторСтроки = ?(ИдентификаторСтроки = Неопределено, 0, ИдентификаторСтроки); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl deleted file mode 100644 index 471242a96..000000000 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl +++ /dev/null @@ -1,392 +0,0 @@ -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Параметры.Свойство("ОбластиПоиска", ОбластиПоиска); - Параметры.Свойство("ИскатьВРазделах", ИскатьВРазделах); - ЗаполнитьДеревоРазделовПоиска(); - Элементы.ДеревоРазделовПоиска.Доступность = ИскатьВРазделах = 1; - - ДанныеТекущегоРаздела = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискТекущийРаздел", ""); - Если ДанныеТекущегоРаздела <> Неопределено - И ТипЗнч(ДанныеТекущегоРаздела) = Тип("Структура") Тогда - - ТекущийРаздел = ДанныеТекущегоРаздела.ТекущийРаздел; - ИдентификаторСтроки = ДанныеТекущегоРаздела.ИдентификаторСтроки; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - // Перейдем к разделу, с которым работали при предыдущих настройках. - Если Не ПустаяСтрока(ТекущийРаздел) И ИдентификаторСтроки <> 0 Тогда - РазделПоиска = ДеревоРазделовПоиска.НайтиПоИдентификатору(ИдентификаторСтроки); - Если РазделПоиска = Неопределено Или РазделПоиска.Раздел <> ТекущийРаздел Тогда - Возврат; - КонецЕсли; - РодительРаздела = РазделПоиска.ПолучитьРодителя(); - Если РодительРаздела <> Неопределено Тогда - Пока РодительРаздела <> Неопределено Цикл - Элементы.ДеревоРазделовПоиска.Развернуть(РодительРаздела.ПолучитьИдентификатор()); - РодительРаздела = РодительРаздела.ПолучитьРодителя(); - КонецЦикла; - КонецЕсли; - Элементы.ДеревоРазделовПоиска.ТекущаяСтрока = ИдентификаторСтроки; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбластьПоискаПриИзменении(Элемент) - - УстановитьДоступностьЭлементовФормы(); - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоРазделовПоиска - -&НаКлиенте -Процедура ДеревоРазделовПоискаПометкаПриИзменении(Элемент) - ЗначениеПометки = Элементы.ДеревоРазделовПоиска.ТекущиеДанные.Пометка; - - Родитель = Элементы.ДеревоРазделовПоиска.ТекущиеДанные.ПолучитьРодителя(); - Пока Родитель <> Неопределено Цикл - Если Не ЕстьВозможностьИзмененияПометки(Родитель, ЗначениеПометки) Тогда - Прервать; - КонецЕсли; - Родитель.Пометка = ЗначениеПометки; - Родитель = Родитель.ПолучитьРодителя(); - КонецЦикла; - - ДочерниеЭлементы = Элементы.ДеревоРазделовПоиска.ТекущиеДанные.ПолучитьЭлементы(); - Если ДочерниеЭлементы.Количество() > 0 Тогда - УстановитьПометкуВДочернихУзлах(ДочерниеЭлементы, ЗначениеПометки); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура КомандаОК(Команда) - - ТекущийРаздел = ""; - ТекущиеДанные = Элементы.ДеревоРазделовПоиска.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - ТекущийРаздел = ТекущиеДанные.Раздел; - КонецЕсли; - СохранитьТекущийПутьРаздела(ТекущийРаздел, Элементы.ДеревоРазделовПоиска.ТекущаяСтрока); - - НастройкиПоиска = Новый Структура; - НастройкиПоиска.Вставить("ОбластиПоиска", СписокОбластей()); - НастройкиПоиска.Вставить("ИскатьВРазделах", ИскатьВРазделах = 1); - - Закрыть(НастройкиПоиска); - -КонецПроцедуры - -&НаКлиенте -Процедура СнятьФлажки(Команда) - УстановитьПометкуВДочернихУзлах(ДеревоРазделовПоиска.ПолучитьЭлементы(), Ложь); -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьФлажки(Команда) - УстановитьПометкуВДочернихУзлах(ДеревоРазделовПоиска.ПолучитьЭлементы(), Истина); -КонецПроцедуры - -&НаКлиенте -Процедура СвернутьВсе(Команда) - ДеревоФормы = Элементы.ДеревоРазделовПоиска; - Для Каждого Элемент Из ДеревоРазделовПоиска.ПолучитьЭлементы() Цикл - ДеревоФормы.Свернуть(Элемент.ПолучитьИдентификатор()); - КонецЦикла; -КонецПроцедуры - -&НаКлиенте -Процедура РазвернутьВсе(Команда) - ДеревоФормы = Элементы.ДеревоРазделовПоиска; - Для Каждого Элемент Из ДеревоРазделовПоиска.ПолучитьЭлементы() Цикл - Элементы.ДеревоРазделовПоиска.Развернуть(Элемент.ПолучитьИдентификатор(), Истина); - КонецЦикла; -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаСервере -Функция СписокОбластей() - - Список = Новый СписокЗначений; - - ДеревоОМ = РеквизитФормыВЗначение("ДеревоРазделовПоиска"); - - ЗаполнитьСписокОбластей(ДеревоОМ.Строки, Список); - - Возврат Список; - -КонецФункции - -&НаСервере -Процедура ЗаполнитьСписокОбластей(Строки, Список) - - Для Каждого Раздел Из Строки Цикл - Если Раздел.Пометка Тогда - - Если Раздел.ЭтоОбъектМетаданных Тогда - Список.Добавить(Раздел.ОбъектМД, Раздел.ПутьКДанным); - КонецЕсли; - - Если Раздел.Строки.Количество() > 0 Тогда - ЗаполнитьСписокОбластей(Раздел.Строки, Список); - КонецЕсли; - - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьДеревоРазделовПоиска() - - МетаданныеПодсистемы = Метаданные.Подсистемы; - МетаданныеЖурналыДокументов = Метаданные.ЖурналыДокументов; - ТаблицаСправочники = СвязанныеСправочники(); - - ДеревоОМ = РеквизитФормыВЗначение("ДеревоРазделовПоиска"); - - ДобавитьОбъектыПодсистемы(МетаданныеПодсистемы, ДеревоОМ, ТаблицаСправочники); - - ПолнотекстовыйПоискСерверПереопределяемый.ПриПолученииРазделовПолнотекстовогоПоиска(ДеревоОМ); - - ДеревоОМ.Строки.Сортировать("Раздел"); - - Для Каждого Область Из ОбластиПоиска Цикл - Если ПустаяСтрока(Область.Представление) Тогда - СтрокаДерева = ДеревоОМ.Строки.Найти(Область.Значение ,"Раздел"); - Если СтрокаДерева <> Неопределено Тогда - СтрокаДерева.Пометка = Истина; - КонецЕсли; - Иначе - // Если есть путь к разделу, ставим отметку, начиная с корневого. - МассивОбластейСПутями = СтрРазделить(Область.Представление, ",", Ложь); - СтрокиПоиска = ДеревоОМ.Строки; - Для Каждого ОбластьСПутем Из МассивОбластейСПутями Цикл - СтрокаДерева = СтрокиПоиска.Найти(ОбластьСПутем ,"Раздел"); - Если СтрокаДерева <> Неопределено Тогда - СтрокаДерева.Пометка = Истина; - СтрокиПоиска = СтрокаДерева.Строки; - Иначе - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЦикла; - - ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоРазделовПоиска"); - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьОбъектыПодсистемы(Подсистемы, ЭлементДерева, ТаблицаСправочники, ПутьКДанным = "") - - Для Каждого Подсистема Из Подсистемы Цикл - - Если Подсистема.ВключатьВКомандныйИнтерфейс - И ПравоДоступа("Просмотр", Подсистема) - И ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Подсистема) Тогда - - НоваяПодсистема = ЭлементДерева.Строки.Добавить(); - НоваяПодсистема.Раздел = Подсистема; - - ПутьКДаннымОбъекта = ПутьКДанным + Подсистема + ","; - - Для Каждого ОбъектПодсистемы Из Подсистема.Состав Цикл - - Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектПодсистемы) Тогда - Продолжить; - КонецЕсли; - - Если ОбщегоНазначения.ЭтоСправочник(ОбъектПодсистемы) - Или ОбщегоНазначения.ЭтоДокумент(ОбъектПодсистемы) - Или ОбщегоНазначения.ЭтоРегистрСведений(ОбъектПодсистемы) - Или ОбщегоНазначения.ЭтоЗадача(ОбъектПодсистемы) Тогда - - Если ОбъектПодсистемы.ПолнотекстовыйПоиск = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.НеИспользовать Тогда - Продолжить; - КонецЕсли; - - ПредставлениеОбъекта = ПредставлениеФормыСписка(ОбъектПодсистемы); - НовыйОбъект = НоваяПодсистема.Строки.Добавить(); - НовыйОбъект.Раздел = ПредставлениеОбъекта; - НовыйОбъект.ЭтоОбъектМетаданных = Истина; - НовыйОбъект.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектПодсистемы); - НовыйОбъект.ПутьКДанным = ПутьКДаннымОбъекта + ПредставлениеОбъекта + ","; - - Отбор = Новый Структура; - Отбор.Вставить("Владелец", ОбъектПодсистемы); - - НайденныеОбъекты = ТаблицаСправочники.НайтиСтроки(Отбор); - Для Каждого Стр Из НайденныеОбъекты Цикл - - Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Стр.Объект) Тогда - Продолжить; - КонецЕсли; - - ПредставлениеОбъекта = ПредставлениеФормыСписка(Стр.Объект); - НовыйВспомогательныйОбъект = НовыйОбъект.Строки.Добавить(); - НовыйВспомогательныйОбъект.Раздел = ПредставлениеОбъекта; - НовыйВспомогательныйОбъект.ЭтоОбъектМетаданных = Истина; - НовыйВспомогательныйОбъект.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Стр.Объект); - НовыйВспомогательныйОбъект.ПутьКДанным = НовыйОбъект.ПутьКДанным + ПредставлениеОбъекта; - КонецЦикла; - ИначеЕсли ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектПодсистемы) Тогда - ЖурналДокументовСоздан = Ложь; - Для Каждого Документ Из ОбъектПодсистемы.РегистрируемыеДокументы Цикл - - Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Документ) Тогда - Продолжить; - КонецЕсли; - - Если Документ.ПолнотекстовыйПоиск = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.НеИспользовать Тогда - Продолжить; - КонецЕсли; - Если Не ЖурналДокументовСоздан Тогда - НовыйОбъект = НоваяПодсистема.Строки.Добавить(); - НовыйОбъект.Раздел = ОбъектПодсистемы; - НовыйОбъект.ПутьКДанным = ПутьКДаннымОбъекта + ОбъектПодсистемы + ","; - ЖурналДокументовСоздан = Истина; - КонецЕсли; - - ПредставлениеОбъекта = ПредставлениеФормыСписка(Документ); - НовыйВспомогательныйОбъект = НовыйОбъект.Строки.Добавить(); - НовыйВспомогательныйОбъект.Раздел = ПредставлениеОбъекта; - НовыйВспомогательныйОбъект.ЭтоОбъектМетаданных = Истина; - НовыйВспомогательныйОбъект.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Документ); - НовыйВспомогательныйОбъект.ПутьКДанным = НовыйОбъект.ПутьКДанным + ПредставлениеОбъекта; - КонецЦикла; - Если ЖурналДокументовСоздан Тогда - НовыйОбъект.Строки.Сортировать("Раздел"); - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - Если Подсистема.Подсистемы.Количество() > 0 Тогда - ДобавитьОбъектыПодсистемы(Подсистема.Подсистемы, НоваяПодсистема, ТаблицаСправочники, ПутьКДаннымОбъекта); - КонецЕсли; - - Если НоваяПодсистема.Строки.Количество() = 0 Тогда - ЭлементДерева.Строки.Удалить(НоваяПодсистема); - Иначе - НоваяПодсистема.Строки.Сортировать("Раздел"); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция СвязанныеСправочники() - - МетаданныеСправочники = Метаданные.Справочники; - - ТаблицаСправочники = Новый ТаблицаЗначений; - ТаблицаСправочники.Колонки.Добавить("ТипОбъекта"); - ТаблицаСправочники.Колонки.Добавить("Объект"); - ТаблицаСправочники.Колонки.Добавить("Владелец"); - - Для Каждого Справочник Из МетаданныеСправочники Цикл - Если Справочник.ПолнотекстовыйПоиск = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать Тогда - Если Справочник.Владельцы.Количество() = 1 Тогда - НоваяСтрока = ТаблицаСправочники.Добавить(); - НоваяСтрока.ТипОбъекта = "Справочник"; - НоваяСтрока.Объект = Справочник; - Для Каждого Владелец Из Справочник.Владельцы Цикл - НоваяСтрока.Владелец = Владелец; - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат ТаблицаСправочники; - -КонецФункции - -&НаСервере -Процедура УстановитьДоступностьЭлементовФормы() - Элементы.ДеревоРазделовПоиска.Доступность = ИскатьВРазделах = 1; -КонецПроцедуры - -&НаКлиенте -Функция УстановитьПометкуВДочернихУзлах(ЭлементыДерева, ЗначениеПометки) - Для Каждого Элемент Из ЭлементыДерева Цикл - Элемент.Пометка = ЗначениеПометки; - ДочерниеЭлементы = Элемент.ПолучитьЭлементы(); - Если ДочерниеЭлементы.Количество() > 0 Тогда - УстановитьПометкуВДочернихУзлах(ДочерниеЭлементы, ЗначениеПометки); - КонецЕсли; - КонецЦикла; -КонецФункции - -&НаКлиенте -Функция ЕстьВозможностьИзмененияПометки(Родитель, ЗначениеПометки) - ВозможностьИзменения = Истина; - - Если ЗначениеПометки Тогда - Возврат Истина; - КонецЕсли; - - ЭлементыДерева = Родитель.ПолучитьЭлементы(); - Если Родитель.ЭтоОбъектМетаданных И ЭлементыДерева.Количество() = 1 Тогда - Возврат Ложь; - КонецЕсли; - Для Каждого Элемент Из ЭлементыДерева Цикл - Если Элемент.Пометка <> ЗначениеПометки Тогда - ВозможностьИзменения = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - - Возврат ВозможностьИзменения; -КонецФункции - -&НаСервере -Функция ПредставлениеФормыСписка(Объект) - - Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеСписка) Тогда - Представление = Объект.РасширенноеПредставлениеСписка; - ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеСписка) Тогда - Представление = Объект.ПредставлениеСписка; - Иначе - Представление = Объект.Представление(); - КонецЕсли; - - Возврат Представление; - -КонецФункции - -&НаСервереБезКонтекста -Процедура СохранитьТекущийПутьРаздела(ТекущийРаздел, ИдентификаторСтроки) - - ПараметрыТекущегоРаздела = Новый Структура; - ПараметрыТекущегоРаздела.Вставить("ТекущийРаздел", ТекущийРаздел); - ПараметрыТекущегоРаздела.Вставить("ИдентификаторСтроки", ИдентификаторСтроки); - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПолнотекстовыйПоискТекущийРаздел", "", ПараметрыТекущегоРаздела); - -КонецПроцедуры - -#КонецОбласти - diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form index 2eec937ab..8daebf143 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form @@ -34,7 +34,7 @@ true Left - 20 + 25 40 true true diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl index ab0d985d3..b5d851e1e 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl @@ -7,11 +7,8 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - - ИсторияПоиска = ИсторияПоиска(); - Если ТипЗнч(ИсторияПоиска) = Тип("Массив") Тогда - Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ИсторияПоиска); - КонецЕсли; + + ОбновитьИсториюПоиска(Элементы.СтрокаПоиска); КонецПроцедуры @@ -22,7 +19,17 @@ &НаКлиенте Процедура ВыполнитьПоиск(Команда) - ПодключитьОбработчикОжидания("ОткрытьФормуПоиска", 0.1, Истина); + Если ПустаяСтрока(СтрокаПоиска) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Введите, что нужно найти.'")); + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПереданнаяСтрокаПоиска", СтрокаПоиска); + + ОткрытьФорму("ОбщаяФорма.ФормаПоиска", ПараметрыФормы,, Истина); + + ОбновитьИсториюПоиска(Элементы.СтрокаПоиска); КонецПроцедуры @@ -30,30 +37,21 @@ #Область СлужебныеПроцедурыИФункции -&НаКлиенте -Процедура ОткрытьФормуПоиска() +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьИсториюПоиска(Элемент) - Если ПустаяСтрока(СтрокаПоиска) Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Введите, что нужно найти.'")); - Возврат; - КонецЕсли; - - ФормаПараметры = Новый Структура; - ФормаПараметры.Вставить("ПереданнаяСтрокаПоиска", СтрокаПоиска); - - ФормаИмя = "ОбщаяФорма.ФормаПоиска"; - ОткрытьФорму(ФормаИмя, ФормаПараметры, , Истина); - - ИсторияПоиска = ИсторияПоиска(); + ИсторияПоиска = СохраненнаяИсторияПоиска(); Если ТипЗнч(ИсторияПоиска) = Тип("Массив") Тогда - Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ИсторияПоиска); + Элемент.СписокВыбора.ЗагрузитьЗначения(ИсторияПоиска); КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста -Функция ИсторияПоиска() +Функция СохраненнаяИсторияПоиска() + Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", ""); + КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl index 032082d58..6fb3652e2 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl @@ -1,7 +1,3 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -14,3 +10,226 @@ КонецПроцедуры #КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПараметрыПоиска() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("СтрокаПоиска", 0); + Параметры.Вставить("НаправлениеПоиска", "ПерваяЧасть"); + Параметры.Вставить("ТекущаяПозиция", 0); + Параметры.Вставить("ИскатьВРазделах", Ложь); + Параметры.Вставить("ОбластиПоиска", Новый Массив); + + Возврат Параметры; + +КонецФункции + +Функция ВыполнитьПолнотекстовыйПоиск(ПараметрыПоиска) Экспорт + + СтрокаПоиска = ПараметрыПоиска.СтрокаПоиска; + Направление = ПараметрыПоиска.НаправлениеПоиска; + ТекущаяПозиция = ПараметрыПоиска.ТекущаяПозиция; + ИскатьВРазделах = ПараметрыПоиска.ИскатьВРазделах; + ОбластиПоиска = ПараметрыПоиска.ОбластиПоиска; + + РазмерПорции = 10; + ОписаниеОшибки = ""; + КодОшибки = ""; + + СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(СтрокаПоиска, РазмерПорции); + + Если ИскатьВРазделах И ОбластиПоиска.Количество() > 0 Тогда + СписокПоиска.ИспользованиеМетаданных = ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать; + + Для каждого Область Из ОбластиПоиска Цикл + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Область.Значение); + СписокПоиска.ОбластьПоиска.Добавить(ОбъектМетаданных); + КонецЦикла; + КонецЕсли; + + Попытка + Если Направление = "ПерваяЧасть" Тогда + СписокПоиска.ПерваяЧасть(); + ИначеЕсли Направление = "ПредыдущаяЧасть" Тогда + СписокПоиска.ПредыдущаяЧасть(ТекущаяПозиция); + ИначеЕсли Направление = "СледующаяЧасть" Тогда + СписокПоиска.СледующаяЧасть(ТекущаяПозиция); + Иначе + ВызватьИсключение НСтр("ru = 'Параметр НаправлениеПоиска задан неверно.'"); + КонецЕсли; + Исключение + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КодОшибки = "ОшибкаПоиска"; + КонецПопытки; + + Если СписокПоиска.СлишкомМногоРезультатов() Тогда + ОписаниеОшибки = НСтр("ru = 'Слишком много результатов, уточните запрос'"); + КодОшибки = "СлишкомМногоРезультатов"; + КонецЕсли; + + ПолноеКоличество = СписокПоиска.ПолноеКоличество(); + + Если ПолноеКоличество = 0 Тогда + ОписаниеОшибки = НСтр("ru = 'По запросу ничего не найдено'"); + КодОшибки = "НичегоНеНайдено"; + КонецЕсли; + + Если ПустаяСтрока(КодОшибки) Тогда + РезультатыПоиска = РезультатыПолнотекстовогоПоиска(СписокПоиска); + Иначе + РезультатыПоиска = Новый Массив; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ТекущаяПозиция", СписокПоиска.НачальнаяПозиция()); + Результат.Вставить("Количество", СписокПоиска.Количество()); + Результат.Вставить("ПолноеКоличество", ПолноеКоличество); + Результат.Вставить("КодОшибки", КодОшибки); + Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки); + Результат.Вставить("РезультатыПоиска", РезультатыПоиска); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция РезультатыПолнотекстовогоПоиска(СписокПоиска) + + // Разбор списка посредством выделения блока описания HTML. + СтрокиПоискаHTML = СтрокиРезультатаПоискаHTML(СписокПоиска); + + Результат = Новый Массив; + + // Обход строк списка поиска. + Для Индекс = 0 По СписокПоиска.Количество() - 1 Цикл + + ОписаниеHTML = СтрокиПоискаHTML.ОписанияHTML.Получить(Индекс); + Представление = СтрокиПоискаHTML.Представления.Получить(Индекс); + СтрокаСпискаПоиска = СписокПоиска.Получить(Индекс); + + МетаданныеОбъекта = СтрокаСпискаПоиска.Метаданные; + Значение = СтрокаСпискаПоиска.Значение; + + Переопределяемый_ПриПолученииПолнотекстовымПоиском(МетаданныеОбъекта, Значение, Представление); + + Ссылка = ""; + Попытка + Ссылка = ПолучитьНавигационнуюСсылку(Значение); + Исключение + Ссылка = "#"; // Непредусмотренное для открытия. + КонецПопытки; + + СтрокаРезультата = Новый Структура; + СтрокаРезультата.Вставить("Ссылка", Ссылка); + СтрокаРезультата.Вставить("ОписаниеHTML", ОписаниеHTML); + СтрокаРезультата.Вставить("Представление", Представление); + + Результат.Добавить(СтрокаРезультата); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция СтрокиРезультатаПоискаHTML(СписокПоиска) + + ОтображениеСпискаHTML = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст); + + // Получение DOM для отображения списка. + // Нельзя выносить в отдельную функцию получения DOM из-за ошибки платформы в стеке вызовов потока чтения DOM. + ЧтениеHTML = Новый ЧтениеHTML; + ЧтениеHTML.УстановитьСтроку(ОтображениеСпискаHTML); + ПостроительDOM = Новый ПостроительDOM; + ОтображениеСпискаDOM = ПостроительDOM.Прочитать(ЧтениеHTML); + ЧтениеHTML.Закрыть(); + + СписокЭлементовDivDOM = ОтображениеСпискаDOM.ПолучитьЭлементыПоИмени("div"); + СтрокиОписанияHTML = СтрокиОписанияHTML(СписокЭлементовDivDOM); + + СписокЭлементовAnchorDOM = ОтображениеСпискаDOM.ПолучитьЭлементыПоИмени("a"); + СтрокиПредставления = СтрокиПредставления(СписокЭлементовAnchorDOM); + + Результат = Новый Структура; + Результат.Вставить("ОписанияHTML", СтрокиОписанияHTML); + Результат.Вставить("Представления", СтрокиПредставления); + + Возврат Результат; + +КонецФункции + +Функция СтрокиОписанияHTML(СписокЭлементовDivDOM) + + СтрокиОписанияHTML = Новый Массив; + Для каждого ЭлементDOM Из СписокЭлементовDivDOM Цикл + + Если ЭлементDOM.ИмяКласса = "textPortion" Тогда + + ЗаписьDOM = Новый ЗаписьDOM; + ЗаписьHTML = Новый ЗаписьHTML; + ЗаписьHTML.УстановитьСтроку(); + ЗаписьDOM.Записать(ЭлементDOM, ЗаписьHTML); + + ОписаниеHTMLСтрокиРезультата = ЗаписьHTML.Закрыть(); + + СтрокиОписанияHTML.Добавить(ОписаниеHTMLСтрокиРезультата); + + КонецЕсли; + КонецЦикла; + + Возврат СтрокиОписанияHTML; + +КонецФункции + +Функция СтрокиПредставления(СписокЭлементовAnchorDOM) + + СтрокиПредставления = Новый Массив; + Для каждого ЭлементDOM Из СписокЭлементовAnchorDOM Цикл + + Представление = ЭлементDOM.ТекстовоеСодержимое; + СтрокиПредставления.Добавить(Представление); + + КонецЦикла; + + Возврат СтрокиПредставления; + +КонецФункции + +// Позволяет переопределить: +// - Значение +// - Представление +// +// См. тип данных ЭлементСпискаПолнотекстовогоПоиска +// +Процедура Переопределяемый_ПриПолученииПолнотекстовымПоиском(МетаданныеОбъекта, Значение, Представление) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + + // Для дополнительных сведений открывается форма объекта, которому принадлежит значение, + // а не формы записи в регистре сведений. + + Если МетаданныеОбъекта = Метаданные.РегистрыСведений["ДополнительныеСведения"] Тогда + + Значение = Значение.Объект; + + МетаданныеОбъекта = Значение.Метаданные(); + + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1: %2'"), + МетаданныеОбъекта.ПредставлениеОбъекта, Строка(Значение)); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo index 40f629953..572d0237c 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo @@ -25,10 +25,10 @@ MobileDevice - Настройки + ВыборОбластиПоиска ru - Настройки + Выбор области поиска diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index e402ac5ec..7c29831e0 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -1008,78 +1008,8 @@ Возврат; КонецЕсли; - ДополнительныеПараметры = Новый Структура(); - ДополнительныеПараметры.Вставить("ИмяКаталога", ИмяКаталога); + ОбщегоНазначенияКлиент.ОткрытьПроводник(ИмяКаталога); - Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, ДополнительныеПараметры); - - ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения); - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ПослеПроверкиРасширенияРаботыСФайлами(Результат, ДополнительныеПараметры) Экспорт - - Если Результат Тогда - - Файл = Новый Файл(); - ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьСуществованиеФайла", ЭтотОбъект, ДополнительныеПараметры); - Файл.НачатьИнициализацию(ОписаниеОповещения, ДополнительныеПараметры.ИмяКаталога); - - Иначе - ТекстПредупреждения = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие каталога не возможно.'"); - ПоказатьПредупреждение(, ТекстПредупреждения); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ПроверитьСуществованиеФайла(Файл, ДополнительныеПараметры) Экспорт - ДополнительныеПараметры.Вставить("Файл", Файл); - ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОпределенияСуществованияФайла", ЭтотОбъект, ДополнительныеПараметры); - Файл.НачатьПроверкуСуществования(ОписаниеОповещения); -КонецПроцедуры - -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ПослеОпределенияСуществованияФайла(Существует, ДополнительныеПараметры) Экспорт - - Если Существует Тогда - Файл = ДополнительныеПараметры.Файл; - ОписаниеОповещения = Новый ОписаниеОповещения("ОпределитьЭтоКаталог", ЭтотОбъект, ДополнительныеПараметры); - Файл.НачатьПроверкуЭтоКаталог(ОписаниеОповещения); - Иначе - ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Каталог ""%1"" не существует или к нему нет доступа.'"), - ДополнительныеПараметры.ИмяКаталога); - ПоказатьПредупреждение(, ТекстПредупреждения); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ОпределитьЭтоКаталог(ЭтоКаталог, ДополнительныеПараметры) Экспорт - - Если ЭтоКаталог Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьКаталогСФайлом", ЭтотОбъект, ДополнительныеПараметры); - НачатьЗапускПриложения(ОписаниеОповещения, ДополнительныеПараметры.ИмяКаталога); - Иначе - ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '""%1"" является файлом, а не каталогом.'"), - ДополнительныеПараметры.ИмяКаталога); - ПоказатьПредупреждение(, ТекстПредупреждения); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ОткрытьКаталогСФайлом(КодВозврата, ДополнительныеПараметры) Экспорт - // Обработка не требуется. КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form index 3e73efea8..0912c567d 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form @@ -660,7 +660,6 @@ true InputField - true true Enter true @@ -11317,7 +11316,6 @@ Auto true true - auto Auto Auto @@ -16822,6 +16820,40 @@ true + + ЭтоПланОбменаРИБ + + <key>ru</key> + <value>Это план обмена РИБ</value> + + 80 + + Boolean + + + true + + + true + + + + ФайлНастроекОбменаДаннымиСохранен + + <key>ru</key> + <value>Файл настроек обмена данными успешно загружен</value> + + 81 + + Boolean + + + true + + + true + + КомандаДалее diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl index 518eb5955..e6fec8c52 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl @@ -2,7 +2,6 @@ &НаКлиенте Перем ЗакрытьФормуБезусловно, ПользовательОтветилДаНаВопросОСопоставлении, ПропускатьКонтрольОтказаТекущейСтраницы, ВнешниеРесурсыРазрешены; - #КонецОбласти #Область ОбработчикиСобытийФормы @@ -64,20 +63,26 @@ // Получаем значения по умолчанию для плана обмена. МенеджерПланаОбмена = ПланыОбмена[Объект.ИмяПланаОбмена]; - КраткоеОписание = МенеджерПланаОбмена.КраткаяИнформацияПоОбмену(Объект.ВариантНастройкиОбмена); - СсылкаНаПодробноеОписание = МенеджерПланаОбмена.ПодробнаяИнформацияПоОбмену(Объект.ВариантНастройкиОбмена); + ЗначенияНастроекПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, + "КраткаяИнформацияПоОбмену, ПодробнаяИнформацияПоОбмену, ИмяФайлаНастроекДляПриемника, + |ЭтоПланОбменаXDTO, ИмяФормыСозданияНачальногоОбраза, НаименованиеКонфигурацииКорреспондента, + |ЗаголовокПомощникаСозданияОбмена", + Объект.ВариантНастройкиОбмена, ВерсияКонфигурацииКорреспондента); + КраткоеОписание = ЗначенияНастроекПланаОбмена.КраткаяИнформацияПоОбмену; + СсылкаНаПодробноеОписание = ЗначенияНастроекПланаОбмена.ПодробнаяИнформацияПоОбмену; - ИмяФайлаНастроекДляПриемника = МенеджерПланаОбмена.ИмяФайлаНастроекДляПриемника() + ".xml"; + ИмяФайлаНастроекДляПриемника = ЗначенияНастроекПланаОбмена.ИмяФайлаНастроекДляПриемника + ".xml"; ОбновитьНастройкиИИхОписанияЗначениямиПоУмолчанию(); - ЭтоПланОбменаXDTO = ОбменДаннымиСервер.ЭтоПланОбменаXDTO(Объект.ИмяПланаОбмена); + ЭтоПланОбменаXDTO = ЗначенияНастроекПланаОбмена.ЭтоПланОбменаXDTO; + ЭтоПланОбменаРИБ = Метаданные.ПланыОбмена[Объект.ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза; КонтекстФормыНастройкиУзлов = Новый Структура; ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел(); - ИмяФормыСозданияНачальногоОбраза = МенеджерПланаОбмена.ИмяФормыСозданияНачальногоОбраза(); + ИмяФормыСозданияНачальногоОбраза = ЗначенияНастроекПланаОбмена.ИмяФормыСозданияНачальногоОбраза; ИспользуемыеТранспортыСообщенийОбмена = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(ЭтотУзел); @@ -88,16 +93,30 @@ ИспользоватьТранспортСообщенийОбменаWS = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.WS) <> Неопределено); // Получаем другие настройки. - Объект.ПрефиксИнформационнойБазыИсточника = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - Объект.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыИсточника); + Объект.ИспользоватьПрефиксыДляНастройкиОбмена = НЕ (ЭтоПланОбменаXDTO + И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПланыОбмена[Объект.ИмяПланаОбмена].ПустаяСсылка())); + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда + Если ОбщегоНазначения.РазделениеВключено() Тогда + Объект.ПрефиксИнформационнойБазыИсточника = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); + Иначе + Объект.ПрефиксИнформационнойБазыИсточника = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + КонецЕсли; + Объект.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыИсточника); + Иначе + КодПредопределенногоУзла = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); + Объект.ИдентификаторИнформационнойБазыИсточника = КодПредопределенногоУзла; + Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = Истина; + Объект.ПрефиксИнформационнойБазыИсточникаУстановлен = Истина; + Объект.ИдентификаторИнформационнойБазыПриемника = Строка(Новый УникальныйИдентификатор()); + КонецЕсли; Если Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен + И Объект.ИспользоватьПрефиксыДляНастройкиОбмена И Не НастройкаОбменаССервисом Тогда ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(Объект.ПрефиксИнформационнойБазыИсточника); КонецЕсли; ВариантРаботыМастера = "НастроитьНовыйОбменДанными"; - Если НастройкаОбменаССервисом Тогда РежимРаботыМастера = "ОбменЧерезВебСервис"; @@ -118,8 +137,8 @@ МетаданныеПланаОбмена = Метаданные.ПланыОбмена[Объект.ИмяПланаОбмена]; - СинонимПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, "НаименованиеКонфигурацииКорреспондента", Объект.ВариантНастройкиОбмена); - Заголовок = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, "ЗаголовокПомощникаСозданияОбмена", Объект.ВариантНастройкиОбмена); + СинонимПланаОбмена = ЗначенияНастроекПланаОбмена.НаименованиеКонфигурацииКорреспондента; + Заголовок = ЗначенияНастроекПланаОбмена.ЗаголовокПомощникаСозданияОбмена; Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(Объект.ИмяПланаОбмена); Объект.ЭтоНастройкаСтандартногоОбмена = ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ЭтотУзел); @@ -741,6 +760,7 @@ ПолучитьФайл(АдресВременногоХранилища, ИмяФайлаНастроекДляПриемника, Истина); Объект.ИмяФайлаНастроекСинхронизацииДанных = ИмяФайлаНастроекДляПриемника; + ФайлНастроекОбменаДаннымиСохранен = Истина; #Иначе @@ -787,6 +807,7 @@ ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДополнительныеПараметры.АдресВременногоХранилища); УдалитьИзВременногоХранилища(ДополнительныеПараметры.АдресВременногоХранилища); ДвоичныеДанные.Записать(Объект.ИмяФайлаНастроекСинхронизацииДанных); + ФайлНастроекОбменаДаннымиСохранен = Истина; КонецЕсли; КонецПроцедуры @@ -903,7 +924,6 @@ &НаСервере Процедура ОбновитьНастройкиИИхОписанияЗначениямиПоУмолчанию(ДляОбменаЧерезПрямоеПодключение = Ложь) - // 1. Для этой базы. ФормаНастройкиУзла = ""; ФормаНастройкиЗначенийПоУмолчанию = ""; @@ -919,17 +939,25 @@ ВерсияКонфигурацииКорреспондента, ФормаНастройкиЗначенийПоУмолчанию, Объект.ВариантНастройкиОбмена); - + ОбновитьОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле); ОбновитьОписаниеЗначенийПоУмолчанию(ЗначенияПоУмолчаниюНаУзле); - НастройкиПараметровУчетаПоясняющаяНадпись = ПланыОбмена[Объект.ИмяПланаОбмена].ПояснениеДляНастройкиПараметровУчета(); + ЗначенияНастроекПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, + "ПояснениеДляНастройкиПараметровУчета, ОтображатьНастройкуОтборовНаУзле, ОтображатьЗначенияПоУмолчаниюНаУзле, + |ИмяФормыОтборовКорреспондента, ИмяФормыЗначенийПоУмолчаниюКорреспондента, ИмяФормыОбщиеДанныеУзлов, + |ОтборыКорреспондента, ЗначенияПоУмолчаниюКорреспондента, ПояснениеДляНастройкиПараметровУчета, + |ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента, ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, + |ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента", + Объект.ВариантНастройкиОбмена, ВерсияКонфигурацииКорреспондента); + + НастройкиПараметровУчетаПоясняющаяНадпись = ЗначенияНастроекПланаОбмена.ПояснениеДляНастройкиПараметровУчета; // Управление видимостью связанных элементов. ПредусмотреныНастройкиОтборовНаУзле = НастройкаОтборовНаУзле.Количество() > 0 - И ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, "ОтображатьНастройкуОтборовНаУзле", Объект.ВариантНастройкиОбмена); + И ЗначенияНастроекПланаОбмена.ОтображатьНастройкуОтборовНаУзле; ПредусмотреныЗначенияПоУмолчаниюНаУзле = ЗначенияПоУмолчаниюНаУзле.Количество() > 0 - И ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, "ОтображатьЗначенияПоУмолчаниюНаУзле", Объект.ВариантНастройкиОбмена); + И ЗначенияНастроекПланаОбмена.ОтображатьЗначенияПоУмолчаниюНаУзле; Элементы.РамкаГруппыОграничений.Видимость = ПредусмотреныНастройкиОтборовНаУзле; Элементы.РамкаГруппыОграничений1.Видимость = ПредусмотреныНастройкиОтборовНаУзле; @@ -943,7 +971,6 @@ Если Не ДляОбменаЧерезПрямоеПодключение Тогда Возврат; КонецЕсли; - ФормаНастройкиУзлаБазыКорреспондента = ""; ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента = ""; ФормаНастройкиУзлов = ""; @@ -959,19 +986,29 @@ ВерсияКонфигурацииКорреспондента, ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента, Объект.ВариантНастройкиОбмена); + + ФормаНастройкиУзлаБазыКорреспондента = ЗначенияНастроекПланаОбмена.ИмяФормыОтборовКорреспондента; + + ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента = ЗначенияНастроекПланаОбмена.ИмяФормыЗначенийПоУмолчаниюКорреспондента; + ФормаНастройкиУзлов = ЗначенияНастроекПланаОбмена.ИмяФормыОбщиеДанныеУзлов; + + НастройкаОтборовНаУзлеБазыКорреспондента = ЗначенияНастроекПланаОбмена.ОтборыКорреспондента; + + ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента = ЗначенияНастроекПланаОбмена.ЗначенияПоУмолчаниюКорреспондента; ОбновитьОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзлеБазыКорреспондента); ОбновитьОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись = ОбменДаннымиСервер.ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента( - Объект.ИмяПланаОбмена, - ВерсияКонфигурацииКорреспондента); + НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись = ЗначенияНастроекПланаОбмена. + ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента; + + НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись = ЗначенияНастроекПланаОбмена.ПояснениеДляНастройкиПараметровУчета; // Управление видимостью связанных элементов. ПредусмотреныНастройкиОтборовНаУзлеБазыКорреспондента = НастройкаОтборовНаУзлеБазыКорреспондента.Количество() > 0 - И ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, "ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента", Объект.ВариантНастройкиОбмена); + И ЗначенияНастроекПланаОбмена.ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента; ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента = ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента.Количество() > 0 - И ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, "ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента", Объект.ВариантНастройкиОбмена); + И ЗначенияНастроекПланаОбмена.ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента; Элементы.РамкаГруппыОграничений4.Видимость = ПредусмотреныНастройкиОтборовНаУзлеБазыКорреспондента; Элементы.РамкаГруппыЗначенийПоУмолчанию4.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента; @@ -985,18 +1022,17 @@ ОписаниеОграниченийПередачиДанных = ОбменДаннымиСервер.ОписаниеОграниченийПередачиДанных( Объект.ИмяПланаОбмена, НастройкаОтборовНаУзле, - ВерсияКонфигурацииКорреспондента, + ВерсияКонфигурацииКорреспондента, Объект.ВариантНастройкиОбмена); КонецПроцедуры &НаСервере Процедура ОбновитьОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзлеБазыКорреспондента) - ОписаниеОграниченийПередачиДанныхБазыКорреспондента = ОбменДаннымиСервер.ОписаниеОграниченийПередачиДанныхБазыКорреспондента( Объект.ИмяПланаОбмена, НастройкаОтборовНаУзлеБазыКорреспондента, - ВерсияКонфигурацииКорреспондента, + ВерсияКонфигурацииКорреспондента, Объект.ВариантНастройкиОбмена); КонецПроцедуры @@ -1007,14 +1043,13 @@ ОписаниеЗначенийПоУмолчанию = ОбменДаннымиСервер.ОписаниеЗначенийПоУмолчанию( Объект.ИмяПланаОбмена, ЗначенияПоУмолчаниюНаУзле, - ВерсияКонфигурацииКорреспондента, + ВерсияКонфигурацииКорреспондента, Объект.ВариантНастройкиОбмена); КонецПроцедуры &НаСервере Процедура ОбновитьОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента) - ОписаниеЗначенийПоУмолчаниюБазыКорреспондента = ОбменДаннымиСервер.ОписаниеЗначенийПоУмолчаниюБазыКорреспондента( Объект.ИмяПланаОбмена, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, @@ -1695,28 +1730,23 @@ ПрефиксИсточникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыИсточникаОбменЧерезВнешнееСоединение); // В основном префикс нужен только для просмотра. - ПодсказкаДляИзменяемогоПрефикса = Метаданные.Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Подсказка; - Если Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен Тогда - Для Каждого ПрефиксИсточникаЭлемент Из ПрефиксИсточникаКоллекцияЭлементов Цикл - ПрефиксИсточникаЭлемент.ТолькоПросмотр = Ложь; - ПрефиксИсточникаЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; - ПрефиксИсточникаЭлемент.РасширеннаяПодсказка.Заголовок = ПодсказкаДляИзменяемогоПрефикса; - КонецЦикла; - КонецЕсли; + ПрефиксИсточникаДоступность = НЕ Объект.ПрефиксИнформационнойБазыИсточникаУстановлен + ИЛИ ЭтоПланОбменаРИБ; + Для Каждого ПрефиксИсточникаЭлемент Из ПрефиксИсточникаКоллекцияЭлементов Цикл + ПрефиксИсточникаЭлемент.Видимость = Объект.ИспользоватьПрефиксыДляНастройкиОбмена; + ПрефиксИсточникаЭлемент.Доступность = ПрефиксИсточникаДоступность; + КонецЦикла; // Префикс приемника для онлайн обменов с возможностью установки префикса в корреспонденте. ПрефиксПриемникаКоллекцияЭлементов = Новый Массив; + ПрефиксПриемникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыПриемника); ПрефиксПриемникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВнешнееСоединение); ПрефиксПриемникаКоллекцияЭлементов.Добавить(Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис); - Для Каждого ПрефиксИсточникаЭлемент Из ПрефиксИсточникаКоллекцияЭлементов Цикл - ПрефиксИсточникаЭлемент.РасширеннаяПодсказка.Заголовок = ПодсказкаДляИзменяемогоПрефикса; + Для Каждого ПрефиксПриемникаЭлемент Из ПрефиксПриемникаКоллекцияЭлементов Цикл + ПрефиксПриемникаЭлемент.Видимость = Объект.ИспользоватьПрефиксыДляНастройкиОбмена; КонецЦикла; - Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда - Элементы.ПрефиксИнформационнойБазыПриемника.РасширеннаяПодсказка.Заголовок = ПодсказкаДляИзменяемогоПрефикса; - КонецЕсли; - Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда Элементы.СтраницыОтображенияФинальногоДействия.ТекущаяСтраница = Элементы.СтраницаВыполнитьСозданиеНачальногоОбразаПодчиненногоУзла; Иначе @@ -2074,15 +2104,19 @@ Объект.КодУзлаКорреспондента = ПараметрыПриемника.КодЭтогоУзла; - Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыПриемника.ПрефиксИнформационнойБазы; - Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыПриемника); - Если Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен Тогда - Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыПриемника.ПрефиксИнформационнойБазыПоУмолчанию; + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда + Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыПриемника.ПрефиксИнформационнойБазы; + Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыПриемника); + Если Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен Тогда + Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыПриемника.ПрефиксИнформационнойБазыПоУмолчанию; + КонецЕсли; + Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.Видимость = Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; + Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; + Иначе + Объект.ИдентификаторИнформационнойБазыПриемника = ПараметрыПриемника.КодЭтогоУзла; КонецЕсли; - Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.Видимость = Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; - Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; // Проверка на существование обмена с базой-корреспондентом. ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ); @@ -2102,8 +2136,9 @@ КонецЕсли; ОбновитьНастройкиИИхОписанияЗначениямиПоУмолчанию(Истина); - - ОбменДаннымиСервер.ОбщиеДанныеУзлов(Объект.ИмяПланаОбмена, ВерсияКонфигурацииКорреспондента, ФормаНастройкиУзлов); + ФормаНастройкиУзлов = ""; + ОбменДаннымиСервер.ОбщиеДанныеУзлов(Объект.ИмяПланаОбмена, ВерсияКонфигурацииКорреспондента, + Объект.ВариантНастройкиОбмена, ФормаНастройкиУзлов); КонецЕсли; @@ -2490,7 +2525,7 @@ ОчиститьСообщения(); Если Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы - И ПустаяСтрока(Объект.ИмяФайлаНастроекСинхронизацииДанных) Тогда + И Не ФайлНастроекОбменаДаннымиСохранен Тогда НСтрока = НСтр("ru = 'Сохраните файл с настройками для другой программы'"); @@ -2788,7 +2823,7 @@ ВерсияКорреспондента = "0.0.0.0"; КонецЕсли; - + Попытка ОбменДаннымиСервер.ПриПодключенииККорреспонденту(Объект.ИмяПланаОбмена, ВерсияКорреспондента); Исключение @@ -3275,21 +3310,24 @@ КонецЕсли; - Если ПустаяСтрока(Объект.ПрефиксИнформационнойБазыИсточника) Тогда + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена + И ПустаяСтрока(Объект.ПрефиксИнформационнойБазыИсточника) Тогда НСтрока = НСтр("ru = 'Укажите префикс этой информационной базы.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); КонецЕсли; - Если ПустаяСтрока(Объект.ПрефиксИнформационнойБазыПриемника) Тогда + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена + И ПустаяСтрока(Объект.ПрефиксИнформационнойБазыПриемника) Тогда НСтрока = НСтр("ru = 'Укажите существующий или желаемый префикс второй информационной базы.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); КонецЕсли; - Если СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена + И СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); @@ -3334,7 +3372,8 @@ Возврат Неопределено; КонецЕсли; - Если ПустаяСтрока(Объект.ПрефиксИнформационнойБазыИсточника) Тогда + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена + И ПустаяСтрока(Объект.ПрефиксИнформационнойБазыИсточника) Тогда НСтрока = НСтр("ru = 'Укажите префикс информационной базы.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); @@ -3558,8 +3597,15 @@ &НаКлиенте Функция Подключаемый_СтраницаМастераИтогНастройкиОбмена_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если ВариантРаботыМастера = "НастроитьНовыйОбменДанными" Тогда + Если НЕ Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда + // Представление результата настройки обмена. + СтрокаСообщения = НСтр("ru = '%1%2%3'"); + + ПредставлениеРезультатаНастройкиОбмена = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, + ПредставлениеРезультатаТранспортСообщений(), + ПредставлениеРезультатаОтборыНаУзле(), + ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзле()); + ИначеЕсли ВариантРаботыМастера = "НастроитьНовыйОбменДанными" Тогда // Представление результата настройки обмена. СтрокаСообщения = НСтр("ru = '%1%2%3Префикс этой информационной базы: %4 @@ -3570,7 +3616,9 @@ ПредставлениеРезультатаОтборыНаУзле(), ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзле(), Объект.ПрефиксИнформационнойБазыИсточника, - Объект.ПрефиксИнформационнойБазыПриемника); + ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, + Объект.ПрефиксИнформационнойБазыПриемника, + Объект.ИдентификаторИнформационнойБазыПриемника)); Иначе @@ -3581,7 +3629,9 @@ ПредставлениеРезультатаТранспортСообщений(), ПредставлениеРезультатаОтборыНаУзле(), ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзле(), - Объект.ПрефиксИнформационнойБазыИсточника); + ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, + Объект.ПрефиксИнформационнойБазыИсточника, + Объект.КодПредопределенногоУзла)); КонецЕсли; @@ -3628,7 +3678,9 @@ Объект.ПрефиксИнформационнойБазыИсточника, ПредставлениеРезультатаОтборыНаУзлеБазыКорреспондента(), ПредставлениеРезультатаЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(), - Объект.ПрефиксИнформационнойБазыПриемника); + ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, + Объект.ПрефиксИнформационнойБазыПриемника, + Объект.ИдентификаторИнформационнойБазыПриемника)); // выводим поясняющую надпись Элементы.ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставления.Видимость = Ложь; @@ -4347,7 +4399,7 @@ КодУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.УзелИнформационнойБазы, "Код"); НастройкиПараметровУчетаЗаданы = ОбменДаннымиСервер.НастройкиПараметровУчетаВСистемеУстановлены(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); - + УзелСуществует = Истина; Если ТипСоединения = "ВебСервис" Тогда СтрокаСообщенияОбОшибке = ""; @@ -4389,7 +4441,9 @@ КонецЕсли; НастройкиПараметровУчетаКорреспондентаЗаданы = ПараметрыПриемника.НастройкиПараметровУчетаЗаданы; - + Если ПараметрыПриемника.Свойство("УзелСуществует") Тогда + УзелСуществует = ПараметрыПриемника.УзелСуществует; + КонецЕсли; ИначеЕсли ТипСоединения = "ВнешнееСоединение" Тогда ПараметрыТранспорта = ОбменДаннымиСервер.НастройкиТранспортаПоПараметрамВнешнегоСоединения(ПараметрыПодключения); @@ -4420,13 +4474,22 @@ КонецЕсли; НастройкиПараметровУчетаКорреспондентаЗаданы = ПараметрыПриемника.НастройкиПараметровУчетаЗаданы; - + Если ПараметрыПриемника.Свойство("УзелСуществует") Тогда + УзелСуществует = ПараметрыПриемника.УзелСуществует; + КонецЕсли; КонецЕсли; Если Отказ Тогда Возврат; КонецЕсли; + Если Не УзелСуществует Тогда + Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ИмяПланаОбмена, КодУзла); + ВызватьИсключение Сообщение; + КонецЕсли; + + Если НастройкиПараметровУчетаЗаданы И НастройкиПараметровУчетаКорреспондентаЗаданы Тогда ПропуститьСтраницу = Истина; Возврат; @@ -4476,22 +4539,25 @@ КонецЕсли; - Если ПустаяСтрока(Объект.ПрефиксИнформационнойБазыИсточника) Тогда + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена + И ПустаяСтрока(Объект.ПрефиксИнформационнойБазыИсточника) Тогда НСтрока = НСтр("ru = 'Укажите префикс этой программы.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); КонецЕсли; - Если СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда + Если СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда - НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); - - Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Ложь; - Иначе - Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Истина; + НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); + + Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Ложь; + Иначе + Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Истина; + КонецЕсли; КонецЕсли; Если Отказ Тогда @@ -4522,7 +4588,8 @@ КонецЕсли; - Если СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена + И СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); @@ -4586,8 +4653,10 @@ &НаСервере Процедура СтраницаМастераНастройкаПараметров_ПриПереходеДалееНаСервере(Отказ) - - Если Не ПланыОбмена[Объект.ИмяПланаОбмена].НайтиПоКоду(ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(Объект.ПрефиксИнформационнойБазыПриемника)).Пустая() Тогда + ИспользуемыйПрефиксКорреспондента = ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, + Объект.ПрефиксИнформационнойБазыПриемника, + Объект.ИдентификаторИнформационнойБазыПриемника); + Если Не ПланыОбмена[Объект.ИмяПланаОбмена].НайтиПоКоду(ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ИспользуемыйПрефиксКорреспондента)).Пустая() Тогда НСтрока = НСтр("ru = 'Значение префикса второй информационной базы не уникально. |В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом. @@ -4693,8 +4762,15 @@ // получаем файл ДвоичныеДанные.Записать(Объект.ИмяФайлаНастроекСинхронизацииДанных); + ФайлНастроекОбменаДаннымиСохранен = Истина; + КонецЕсли; + ИначеЕсли Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL + Или Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + + Объект.ИмяФайлаНастроекСинхронизацииДанных = ИмяФайлаНастроекДляПриемника; + КонецЕсли; Элементы.ВыполнитьОбменДаннымиСейчас21.Заголовок = СтрЗаменить(Элементы.ВыполнитьОбменДаннымиСейчас21.Заголовок, "%Программа%", СинонимПланаОбмена); @@ -4780,9 +4856,13 @@ КонецЕсли; - Объект.ПрефиксИнформационнойБазыПриемника = ВнешнееСоединение.ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыПриемника); - + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда + Объект.ПрефиксИнформационнойБазыПриемника = ВнешнееСоединение.ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыПриемника); + Иначе + Объект.ИдентификаторИнформационнойБазыПриемника = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.КодПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); + Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ИдентификаторИнформационнойБазыПриемника); + КонецЕсли; // Проверка на существование обмена с базой-корреспондентом. ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ); Если Отказ Тогда @@ -4790,16 +4870,19 @@ КонецЕсли; ПрефиксПриемникаЭлемент = Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВнешнееСоединение; - Если Объект.ПрефиксИнформационнойБазыПриемникаУстановлен Тогда - ПрефиксПриемникаЭлемент.ТолькоПросмотр = Истина; - ПрефиксПриемникаЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + Если Объект.ИспользоватьПрефиксыДляНастройкиОбмена Тогда + Если Объект.ПрефиксИнформационнойБазыПриемникаУстановлен Тогда + ПрефиксПриемникаЭлемент.ТолькоПросмотр = Истина; + ПрефиксПриемникаЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + Иначе + Объект.ПрефиксИнформационнойБазыПриемника = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПрефиксИнформационнойБазыПоУмолчанию(); + ПрефиксПриемникаЭлемент.ТолькоПросмотр = Ложь; + ПрефиксПриемникаЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; + КонецЕсли; Иначе - Объект.ПрефиксИнформационнойБазыПриемника = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПрефиксИнформационнойБазыПоУмолчанию(); - ПрефиксПриемникаЭлемент.ТолькоПросмотр = Ложь; - ПрефиксПриемникаЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; + ПрефиксПриемникаЭлемент.Видимость = Ложь; КонецЕсли; - Объект.НаименованиеВторойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.НаименованиеПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); ЗаданоНаименованиеВторойБазы = Не ПустаяСтрока(Объект.НаименованиеВторойБазы); @@ -4817,9 +4900,12 @@ &НаСервере Процедура ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ) - + ИспользуемыйПрефиксКорреспондента = ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, + Объект.ПрефиксИнформационнойБазыПриемника, + Объект.ИдентификаторИнформационнойБазыПриемника); + КодУзла = ?(ПустаяСтрока(Объект.КодУзлаКорреспондента), - ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(Объект.ПрефиксИнформационнойБазыПриемника), + ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ИспользуемыйПрефиксКорреспондента), Объект.КодУзлаКорреспондента); Если Не ПустаяСтрока(КодУзла) diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html index 55af35561..079c40915 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p>Предназначен для настройки <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a> между двумя программами. Возможна настройка синхронизации данных по правилам обмена, без использования правил обмена и организация совместной работы в распределенной информационной базе (РИБ).</p> <h3>Этапы настройки параметров синхронизации данных</h3> <ul><li>Настройка синхронизации данных при выборе варианта подключения через другие каналы связи выполняется в два этапа. Первый шаг настройки синхронизации данных выполняется в текущей программе, затем необходимо перейти в другую программу и закончить в ней настройку синхронизации данных. Для передачи информации между этапами настройки синхронизации данных используется временный файл с настройками. При настройке синхронизации данных через прямое соединение с базой или через веб-сервисы вся настройка для обеих программ выполняется в текущей программе. diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index a0b6f00a6..c140cc0b7 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -28,8 +28,16 @@ РегистрироватьДанныеДляВыгрузки = Истина, ИспользоватьНастройкиТранспорта = Истина) Экспорт - КодЭтогоУзла = ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника); - КодНовогоУзла = ?(ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными", КодНовогоУзлаВторойБазы, ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника)); + КодЭтогоУзла = ?(ИспользоватьПрефиксыДляНастройкиОбмена, + ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника), + ПолучитьКодУзлаЭтойБазы(ИдентификаторИнформационнойБазыИсточника)); + Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + КодНовогоУзла = КодНовогоУзлаВторойБазы; + ИначеЕсли ИспользоватьПрефиксыДляНастройкиОбмена Тогда + КодНовогоУзла = ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника); + Иначе + КодНовогоУзла = ИдентификаторИнформационнойБазыПриемника; + КонецЕсли; ВыполнитьДействияПоНастройкеОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла, РегистрироватьДанныеДляВыгрузки, ИспользоватьНастройкиТранспорта); @@ -86,7 +94,8 @@ ОбновитьНастройкиТранспортаСообщенийОбмена(); // Обновляем значение константы префикса ИБ. - Если Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда + Если ИспользоватьПрефиксыДляНастройкиОбмена + И Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы(); @@ -100,7 +109,9 @@ КонецЕсли; // {Обработчик: ПриОтправкеДанныхОтправителя} Начало - ПланыОбмена[ИмяПланаОбмена].ПриОтправкеДанныхОтправителя(НастройкаОтборовНаУзле, Ложь); + Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПриОтправкеДанныхОтправителя",ИмяПланаОбмена) Тогда + ПланыОбмена[ИмяПланаОбмена].ПриОтправкеДанныхОтправителя(НастройкаОтборовНаУзле, Ложь); + КонецЕсли; // {Обработчик: ПриОтправкеДанныхОтправителя} Окончание Если ВерсияКорреспондента_2_1_1_7 Тогда @@ -136,8 +147,8 @@ ЗафиксироватьТранзакцию(); Исключение - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); ОтменитьТранзакцию(); + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); КонецПопытки; Если Отказ Тогда @@ -155,7 +166,7 @@ // Выполняем регистрацию изменений во второй ИБ. WSПрокси.RegisterOnlyCatalogData( ИмяПланаОбмена, - ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена), + КодЭтогоУзла, ДлительнаяОперация, ИдентификаторОперацииСозданияОбменаДанными); @@ -174,7 +185,11 @@ ИспользоватьПараметрыТранспортаCOM = Истина; КодЭтогоУзла = ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника); - КодНовогоУзла = ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника); + Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда + КодНовогоУзла = ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника); + Иначе + КодНовогоУзла = ИдентификаторИнформационнойБазыПриемника; + КонецЕсли; // Создаем внешнее соединение Подключение = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(ЭтотОбъект); @@ -202,12 +217,13 @@ ОбновитьНастройкиТранспортаСообщенийОбменаCOM(); // Обновляем значение константы префикса ИБ. - Если Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда + Если ИспользоватьПрефиксыДляНастройкиОбмена + И Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы(); КонецЕсли; - + // Выгружаем параметры помощника в строку. СтрокаПараметровМастераXML = ВыполнитьВыгрузкуПараметровМастера(Отказ); @@ -227,7 +243,7 @@ Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); ВызватьИсключение Сообщение; КонецЕсли; - + // Выполняем создание настройки обмена во второй ИБ через внешнее соединение. Если ВерсияКорреспондента_2_1_1_7 ИЛИ ВерсияКорреспондента_2_0_1_6 Тогда @@ -235,7 +251,7 @@ ОбщегоНазначения.ЗначениеВСтрокуXML(НастройкаОтборовНаУзлеБазыКорреспондента), ОбщегоНазначения.ЗначениеВСтрокуXML(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента), ПрефиксИнформационнойБазыПриемникаУстановлен, - ПрефиксИнформационнойБазыПриемника); + ?(ИспользоватьПрефиксыДляНастройкиОбмена,ПрефиксИнформационнойБазыПриемника,ИдентификаторИнформационнойБазыПриемника)); Иначе @@ -243,7 +259,7 @@ ЗначениеВСтрокуВнутр(НастройкаОтборовНаУзлеБазыКорреспондента), ЗначениеВСтрокуВнутр(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента), ПрефиксИнформационнойБазыПриемникаУстановлен, - ПрефиксИнформационнойБазыПриемника); + ?(ИспользоватьПрефиксыДляНастройкиОбмена,ПрефиксИнформационнойБазыПриемника,ИдентификаторИнформационнойБазыПриемника)); КонецЕсли; @@ -255,8 +271,8 @@ ЗафиксироватьТранзакцию(); Исключение - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); ОтменитьТранзакцию(); + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); КонецПопытки; Если Отказ Тогда @@ -340,8 +356,8 @@ ЗафиксироватьТранзакцию(); Исключение - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); ОтменитьТранзакцию(); + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); КонецПопытки; Если Отказ Тогда @@ -417,8 +433,8 @@ ЗафиксироватьТранзакцию(); Исключение - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); ОтменитьТранзакцию(); + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); КонецПопытки; КонецПроцедуры @@ -472,8 +488,8 @@ ЗафиксироватьТранзакцию(); Исключение - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); ОтменитьТранзакцию(); + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); КонецПопытки; КонецПроцедуры @@ -528,14 +544,19 @@ НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(НастройкаОтборовНаУзле); ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле); - + Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда + ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")); + КонецЕсли; + // {Обработчик: ПриПолученииДанныхОтправителя} Начало - Попытка - ПланыОбмена[ИмяПланаОбмена].ПриПолученииДанныхОтправителя(НастройкаОтборовНаУзле, Ложь); - Исключение - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); - Возврат; - КонецПопытки; + Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПриПолученииДанныхОтправителя",ИмяПланаОбмена) Тогда + Попытка + ПланыОбмена[ИмяПланаОбмена].ПриПолученииДанныхОтправителя(НастройкаОтборовНаУзле, Ложь); + Исключение + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); + Возврат; + КонецПопытки; + КонецЕсли; // {Обработчик: ПриПолученииДанныхОтправителя} Окончание ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, @@ -760,7 +781,8 @@ КонецЕсли; // Обновляем значение константы префикса ИБ. - Если Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда + Если ИспользоватьПрефиксыДляНастройкиОбмена + И Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы(); @@ -813,9 +835,10 @@ // Получение ссылки на этот узел плана обмена. ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел(); - - Если ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код")) Тогда - + КодЭтогоУзлаВБазе = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код"); + ЭтоПланОбменаРИБ = Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза; + Если ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код")) + Или (ЭтоПланОбменаРИБ И КодЭтогоУзлаВБазе <> КодЭтогоУзла) Тогда ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); ЭтотУзелОбъект.Код = КодЭтогоУзла; ЭтотУзелОбъект.Наименование = НаименованиеЭтойБазы; @@ -891,7 +914,13 @@ И Не ОбщегоНазначения.РазделениеВключено() Тогда ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); КонецЕсли; - + Если КодЭтогоУзла <> КодЭтогоУзлаВБазе + И ИспользоватьПрефиксыДляНастройкиОбмена Тогда + // Узел в базе корреспонденте нуждается в перекодировании. + СтруктураВременныйКод = Новый Структура("Корреспондент, КодУзла",УзелИнформационнойБазы,КодЭтогоУзла); + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураВременныйКод,"ПсевдонимыПредопределенныхУзлов"); + КонецЕсли; + КонецПроцедуры Процедура ОбновитьНастройкиТранспортаСообщенийОбмена() @@ -954,7 +983,6 @@ КонецПроцедуры Процедура ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы() - ЗначениеДоОбновления = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); Если ПустаяСтрока(ЗначениеДоОбновления) @@ -1018,28 +1046,37 @@ Функция ПолучитьКодУзлаЭтойБазы(Знач ПрефиксИнформационнойБазыЗаданныйПользователем) - Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" - И ВерсияФорматаФайлаНастроекОбменаДанными = "1.0" Тогда + Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - Возврат КодПредопределенногоУзла; - - КонецЕсли; - - Результат = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - - Если ПустаяСтрока(Результат) Тогда - - Результат = ПрефиксИнформационнойБазыЗаданныйПользователем; - - Если ПустаяСтрока(Результат) Тогда - - Возврат "000"; - + Если ЗначениеЗаполнено(КодПредопределенногоУзла) Тогда + Возврат КодПредопределенногоУзла; + Иначе + Возврат СокрЛП(ПрефиксИнформационнойБазыЗаданныйПользователем); КонецЕсли; КонецЕсли; - - Возврат ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(Результат); + Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда + Если ЗначениеЗаполнено(ПрефиксИнформационнойБазыИсточника) Тогда + Результат = ПрефиксИнформационнойБазыИсточника; + Иначе + Если ПустаяСтрока(Результат) Тогда + Результат = ПрефиксИнформационнойБазыЗаданныйПользователем; + + Если ПустаяСтрока(Результат) Тогда + + Возврат "000"; + + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(Результат); + Иначе + Если ЗначениеЗаполнено(ИдентификаторИнформационнойБазыИсточника) Тогда + Возврат ИдентификаторИнформационнойБазыИсточника; + Иначе + Возврат ""; + КонецЕсли; + КонецЕсли; КонецФункции Функция ПолучитьКодУзлаКорреспондента() @@ -1049,8 +1086,11 @@ Возврат КодУзлаКорреспондента; КонецЕсли; - - Возврат ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника); + Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда + Возврат ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника); + Иначе + Возврат ИдентификаторИнформационнойБазыПриемника; + КонецЕсли; КонецФункции Процедура ПрочитатьПараметрыВСтруктуру(Отказ, СтрокаXML, СтруктураНастроек) @@ -1129,7 +1169,18 @@ // Заполняем свойства обработки значениями из файла. ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураНастроек); - + Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS + Или ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + // Требуется заполнить настройку использования префиксов. + ИспользоватьПрефиксыДляНастройкиОбмена = НЕ (ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ЭтоПланОбменаXDTO") + И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка())); + КонецЕсли; + Если НЕ ИспользоватьПрефиксыДляНастройкиОбмена Тогда + ПрефиксИнформационнойБазыИсточника = ""; + ПрефиксИнформационнойБазыПриемника = ""; + СтруктураНастроек.Свойство("ПрефиксИнформационнойБазыИсточника", ИдентификаторИнформационнойБазыИсточника); + СтруктураНастроек.Свойство("ПрефиксИнформационнойБазыПриемника", ИдентификаторИнформационнойБазыПриемника); + КонецЕсли; УчетнаяЗаписьЭлектроннойПочты = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") @@ -1153,18 +1204,6 @@ КонецЕсли; - ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - - Если Не ПустаяСтрока(ПрефиксИнформационнойБазы) - И ПрефиксИнформационнойБазы <> ПрефиксИнформационнойБазыИсточника Тогда - - ПолеСтрокаСообщенияОбОшибке = НСтр("ru = 'На первом этапе настройки обмена был неправильно указан префикс второй информационной базы. - |Настройку обмена требуется начать заново.'"); - // - ОбменДаннымиСервер.СообщитьОбОшибке(СтрокаСообщенияОбОшибке(), Отказ); - - КонецЕсли; - КонецПроцедуры Функция СчитатьДанныеВСтруктуру(ЧтениеXML) @@ -1201,9 +1240,13 @@ ЗаписатьXML(ЗаписьXML, НаименованиеЭтойБазы, "НаименованиеВторойБазы", НазначениеТипаXML.Явное); ЗаписатьXML(ЗаписьXML, НаименованиеВторойБазы, "НаименованиеЭтойБазы", НазначениеТипаXML.Явное); - ЗаписатьXML(ЗаписьXML, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(), "Код"), "КодНовогоУзлаВторойБазы", НазначениеТипаXML.Явное); - - ЗаписатьXML(ЗаписьXML, ПрефиксИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника", НазначениеТипаXML.Явное); + Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда + ЗаписатьXML(ЗаписьXML, СокрЛП(ПрефиксИнформационнойБазыИсточника), "КодНовогоУзлаВторойБазы", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, ПрефиксИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника", НазначениеТипаXML.Явное); + Иначе + ЗаписатьXML(ЗаписьXML, ИдентификаторИнформационнойБазыИсточника, "КодНовогоУзлаВторойБазы", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, ИдентификаторИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника", НазначениеТипаXML.Явное); + КонецЕсли; // Настройки транспорта сообщений обмена. ДобавитьЗаписьXML(ЗаписьXML, "ВидТранспортаСообщенийОбмена"); @@ -1264,7 +1307,11 @@ // Поддержка файла настроек обмена формата версии 1.0. ЗаписатьXML(ЗаписьXML, НаименованиеЭтойБазы, "НаименованиеНастройкиВыполненияОбмена", НазначениеТипаXML.Явное); - ЗаписатьXML(ЗаписьXML, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(), "Код"), "КодНовогоУзла", НазначениеТипаXML.Явное); + Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда + ЗаписатьXML(ЗаписьXML, СокрЛП(ПрефиксИнформационнойБазыИсточника), "КодНовогоУзла", НазначениеТипаXML.Явное); + Иначе + ЗаписатьXML(ЗаписьXML, ИдентификаторИнформационнойБазыИсточника, "КодНовогоУзла", НазначениеТипаXML.Явное); + КонецЕсли; ЗаписатьXML(ЗаписьXML, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "Код"), "КодПредопределенногоУзла", НазначениеТипаXML.Явное); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo index 1d411382a..c54b27f0a 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo @@ -602,7 +602,7 @@ <type> <types>String</types> <stringQualifiers> - <length>9</length> + <length>36</length> </stringQualifiers> </type> <minValue xsi:type="core:UndefinedValue"/> @@ -617,7 +617,7 @@ <type> <types>String</types> <stringQualifiers> - <length>9</length> + <length>36</length> </stringQualifiers> </type> <minValue xsi:type="core:UndefinedValue"/> @@ -632,7 +632,7 @@ <type> <types>String</types> <stringQualifiers> - <length>9</length> + <length>36</length> </stringQualifiers> </type> <minValue xsi:type="core:UndefinedValue"/> @@ -798,6 +798,48 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="dc024d33-1715-40da-9c00-443d25a31ebc"> + <name>ИспользоватьПрефиксыДляНастройкиОбмена</name> + <synonym> + <key>ru</key> + <value>Использовать префиксы для настройки обмена</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="f8f585d1-01a0-4892-8852-c692ffaa1344"> + <name>ИдентификаторИнформационнойБазыПриемника</name> + <synonym> + <key>ru</key> + <value>Идентификатор информационной базы приемника</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>36</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="35c237a7-71e1-415c-809d-e99babee4e0e"> + <name>ИдентификаторИнформационнойБазыИсточника</name> + <synonym> + <key>ru</key> + <value>Идентификатор информационной базы источника</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>36</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <tabularSections uuid="9ab0fe18-4dd7-4eed-958d-8537d4896d84"> <producedTypes> <objectType typeId="b9e83240-a43f-427a-b807-0a77e719ef32" valueTypeId="6812c00d-afc1-4d2d-bcd2-1e22a9ce578e"/> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form index 0507494ac..b804b51c5 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form @@ -626,33 +626,6 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> - <items xsi:type="form:Button"> - <name>КонтекстноеМенюСписокУстановитьПометкуУдаления</name> - <id>45</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>КонтекстноеМенюСписокУстановитьПометкуУдаленияРасширеннаяПодсказка</name> - <id>87</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.ПометитьНаУдаление</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> <items xsi:type="form:Button"> <name>КонтекстноеМенюСписокСохранитьКак</name> <id>71</id> @@ -679,6 +652,32 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> + <items xsi:type="form:Button"> + <name>СписокКонтекстноеМенюУстановитьПометкуУдаления</name> + <id>112</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка</name> + <id>113</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Item.Список.StandardCommand.SetDeletionMark</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <items xsi:type="form:Button"> <name>КонтекстноеМенюСписокКопировать</name> <id>46</id> @@ -857,34 +856,6 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> - <items xsi:type="form:Button"> - <name>ФормаУстановитьПометкуУдаления</name> - <id>42</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка</name> - <id>77</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.ПометитьНаУдаление</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> - </items> <items xsi:type="form:Button"> <name>ФормаСохранитьКак</name> <id>70</id> @@ -915,6 +886,58 @@ <items xsi:type="form:FormGroup"> <name>ФормаСтандартныеКоманды</name> <id>72</id> + <items xsi:type="form:Button"> + <name>ФормаУстановитьПометкуУдаления</name> + <id>108</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка</name> + <id>109</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Item.Список.StandardCommand.SetDeletionMark</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ФормаИзменитьФорму</name> + <id>110</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаИзменитьФормуРасширеннаяПодсказка</name> + <id>111</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.CustomizeForm</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -934,9 +957,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <extInfo xsi:type="form:ButtonGroupExtInfo"> - <commandSource>Form</commandSource> - </extInfo> + <extInfo xsi:type="form:ButtonGroupExtInfo"/> </items> <items xsi:type="form:Button"> <name>ФормаСправка</name> @@ -1152,11 +1173,6 @@ <picture xsi:type="core:PictureRef"> <picture>StdPicture.MarkToDelete</picture> </picture> - <action xsi:type="form:FormCommandHandlerContainer"> - <handler> - <name>ПометитьНаУдаление</name> - </handler> - </action> <representation>Picture</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl index 2c457952e..bd85c3af2 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl @@ -117,14 +117,6 @@ Процедура СписокПередУдалением(Элемент, Отказ) Отказ = Истина; - ПометитьНаУдалениеСнятьПометку(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПометитьНаУдаление(Команда) - - ПометитьНаУдалениеСнятьПометку(); КонецПроцедуры @@ -266,61 +258,14 @@ ЗафиксироватьТранзакцию(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВызватьИсключение; КонецПопытки; Элементы.Список.Обновить(); КонецПроцедуры -&НаСервере -Процедура УстановитьПометкуУдаления(Версия, Пометка) - ВерсияОбъект = Версия.ПолучитьОбъект(); - ВерсияОбъект.Заблокировать(); - ВерсияОбъект.УстановитьПометкуУдаления(Пометка); -КонецПроцедуры - -&НаКлиенте -Процедура ПометитьНаУдалениеСнятьПометку() - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТекущиеДанные.ПометкаУдаления Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"), - Строка(ТекущиеДанные.Ссылка)); - Иначе - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пометить ""%1"" на удаление?'"), - Строка(ТекущиеДанные.Ссылка)); - КонецЕсли; - - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("ТекущиеДанные", ТекущиеДанные); - Обработчик = Новый ОписаниеОповещения("ПометитьНаУдалениеСнятьПометкуЗавершение", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); -КонецПроцедуры - -&НаКлиенте -Процедура ПометитьНаУдалениеСнятьПометкуЗавершение(Ответ, ПараметрыВыполнения) Экспорт - Если Ответ <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - ЗначениеПометкиУдаления = Не ПараметрыВыполнения.ТекущиеДанные.ПометкаУдаления; - УстановитьПометкуУдаления(ПараметрыВыполнения.ТекущиеДанные.Ссылка, ЗначениеПометкиУдаления); - - Если ПараметрыВыполнения.ТекущиеДанные.ПометкаУдаления Тогда - ПараметрыВыполнения.ТекущиеДанные.ИндексКартинкиТекущий = 1; - Иначе - ПараметрыВыполнения.ТекущиеДанные.ИндексКартинкиТекущий = ПараметрыВыполнения.ТекущиеДанные.ИндексКартинки; - КонецЕсли; - Элементы.Список.Обновить(); -КонецПроцедуры - &НаСервере Процедура НастроитьДинамическийСписок(ИмяСправочникаХранилищаВерсийФайлов) diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl index 6fa0c14a5..10428a0c1 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl @@ -13,7 +13,7 @@ РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьУсловноеОформлениеСпискаФайлов(Список); - ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере(); + ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере(); Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда Элементы.ФормаИзменить.Видимость = Ложь; @@ -26,33 +26,19 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ИмпортФайловЗавершен" Тогда + Если ИмяСобытия = "Запись_ПапкиФайлов" Тогда Элементы.Список.Обновить(); - - Если Параметр <> Неопределено Тогда - Элементы.Список.ТекущаяСтрока = Параметр; - КонецЕсли; - КонецЕсли; - - Если ИмяСобытия = "ИмпортКаталоговЗавершен" Тогда + ИначеЕсли ИмяСобытия = "Запись_Файл" Тогда Элементы.Список.Обновить(); - КонецЕсли; - - Если ИмяСобытия = "Запись_Файл" - И Параметр.Свойство("Событие") - И Параметр.Событие = "СозданФайл" Тогда - - Элементы.Список.Обновить(); - Если Параметр <> Неопределено И Параметр.Файл <> Неопределено Тогда + Если ТипЗнч(Параметр) = Тип("Структура") И Параметр.Свойство("Файл") Тогда Элементы.Список.ТекущаяСтрока = Параметр.Файл; + ИначеЕсли Источник <> Неопределено Тогда + Элементы.Список.ТекущаяСтрока = Источник; КонецЕсли; - КонецЕсли; - - Если ВРег(ИмяСобытия) = ВРег("Запись_НаборКонстант") - И ( ВРег(Источник) = ВРег("ИспользоватьЭлектронныеПодписи") + ИначеЕсли ВРег(ИмяСобытия) = ВРег("Запись_НаборКонстант") + И (ВРег(Источник) = ВРег("ИспользоватьЭлектронныеПодписи") Или ВРег(Источник) = ВРег("ИспользоватьШифрование")) Тогда - - ПодключитьОбработчикОжидания("ПриИзмененияИспользованияПодписанияИлиШифрования", 0.3, Истина); + ПодключитьОбработчикОжидания("ПриИзмененииИспользованияПодписанияИлиШифрования", 0.3, Истина); КонецЕсли; КонецПроцедуры @@ -223,14 +209,14 @@ КонецПроцедуры &НаКлиенте -Процедура ПриИзмененияИспользованияПодписанияИлиШифрования() +Процедура ПриИзмененииИспользованияПодписанияИлиШифрования() - ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере(); + ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере(); КонецПроцедуры &НаСервере -Процедура ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере() +Процедура ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере() РаботаСФайламиСлужебный.КриптографияПриСозданииФормыНаСервере(ЭтотОбъект,, Истина); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> + <itemsViewMode>Normal</itemsViewMode> + <itemsUserSettingID>911b6018-f537-43e8-a417-da56b22f9aec</itemsUserSettingID> +</Settings> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form new file mode 100644 index 000000000..38c916664 --- /dev/null +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form @@ -0,0 +1,447 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:Table"> + <name>Список</name> + <id>1</id> + <title> + <key>ru</key> + <value>Группы файлов</value> + + true + true + + true + + + Список + + None + Create + + КартинкаНаименование + 36 + + СписокСтандартнаяКартинка + 33 + true + true + + true + + + Список.DefaultPicture + + + СписокСтандартнаяКартинкаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + СписокСтандартнаяКартинкаКонтекстноеМеню + 34 + true + + PictureField + Enter + true + Left + true + + true + true + true + true + + + 1 + + + + + СписокНаименование + 20 + + <key>ru</key> + <value>Список наименование</value> + + true + true + + true + + + Список.Наименование + + + СписокНаименованиеРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СписокНаименованиеКонтекстноеМеню + 21 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Картинка и наименование</value> + + + КартинкаНаименованиеРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокКоманднаяПанель + 3 + + КоманднаяПанель + 29 + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + Form + + + + СписокСоздатьГруппу + 31 + true + true + + true + + + СписокСоздатьГруппуРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + Form.Command.СоздатьГруппу + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + ValueChoice + СписокВыборЗначения + + + СписокСтрокаПоиска + 5 + + СписокСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 6 + true + + Список + + true + + + + СписокСостояниеПросмотра + 8 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 11 + + СписокУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + Tree + true + true + true + 7 + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + ExpandTopLevel + true + true + true + + Список.ИндексКартинки + + + CommonPicture.КоллекцияПиктограммФайлов + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Folders + + true + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Список + + <key>ru</key> + <value>Список</value> + + 1 + + DynamicList + + + true + + + true + + + Список.Ссылка + + + ВЫБРАТЬ + ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Ссылка, + ЛОЖЬ КАК ПометкаУдаления, + 1 КАК ИндексКартинки, + ВЫРАЗИТЬ("" КАК СТРОКА(150)) КАК Наименование, + ЛОЖЬ КАК ЭтоГруппа, + &ВладелецФайла КАК ВладелецФайла +ИЗ + Справочник.Пользователи КАК ИдентификаторыОбъектовМетаданных + Catalog.Пользователи + true + true + true + true + true + + + + ВладелецФайлов + + <key>ru</key> + <value>Владелец файлов</value> + + 2 + + + true + + + true + + + + ИмяСправочникаХранилищаФайлов + + <key>ru</key> + <value>Имя справочника хранилища файлов</value> + + 3 + + String + + + + true + + + true + + + + СоздатьГруппу + + <key>ru</key> + <value>Создать группу</value> + + 1 + + ru + Создать группу + + + true + + + + СоздатьГруппу + + + DontUse + Auto + + + ВладелецФайлов + + + + ПеремещаемыеФайлы + + true + + + + + + diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl new file mode 100644 index 000000000..b2e0ac259 --- /dev/null +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl @@ -0,0 +1,135 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + НастроитьДинамическийСписок(); + УстановитьУсловноеОформление(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + Список.УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ВладелецФайла"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + ОтборЭлемента.ПравоеЗначение = Параметры.ВладелецФайлов; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ЭтоГруппа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокСтандартнаяКартинка.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокНаименование.Имя); + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + +КонецПроцедуры + +&НаСервере +Процедура НастроитьДинамическийСписок() + + ВладелецФайлов = Параметры.ВладелецФайлов; + + ЗаголовокОшибки = НСтр("ru = 'Ошибка при настройке динамического списка присоединенных файлов.'"); + ОкончаниеОшибки = НСтр("ru = 'В этом случае настройка динамического списка невозможна.'"); + ИмяСправочникаХранилищаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( + ВладелецФайлов, "", ЗаголовокОшибки, ОкончаниеОшибки); + + ТипСправочникаСФайлами = Тип("СправочникСсылка." + ИмяСправочникаХранилищаФайлов); + МетаданныеСправочникаСФайлами = Метаданные.НайтиПоТипу(ТипСправочникаСФайлами); + ВозможностьСоздаватьГруппыФайлов = МетаданныеСправочникаСФайлами.Иерархический; + + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + + ТекстЗапроса = + "ВЫБРАТЬ + | Файлы.Ссылка КАК Ссылка, + | Файлы.ПометкаУдаления КАК ПометкаУдаления, + | ВЫБОР + | КОГДА Файлы.ПометкаУдаления = ИСТИНА + | ТОГДА ЕСТЬNULL(Файлы.ИндексКартинки, 2) + 1 + | ИНАЧЕ ЕСТЬNULL(Файлы.ИндексКартинки, 2) + | КОНЕЦ КАК ИндексКартинки, + | Файлы.Наименование КАК Наименование, + | &ЭтоГруппа КАК ЭтоГруппа, + | Файлы.ВладелецФайла КАК ВладелецФайла + |ИЗ + | &ИмяСправочника КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайлов + | И &ОтборГрупп"; + + ПолноеИмяСправочника = "Справочник." + ИмяСправочникаХранилищаФайлов; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", ПолноеИмяСправочника); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборГрупп", "Файлы.ЭтоГруппа"); + СвойстваСписка.ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа", + ?(ВозможностьСоздаватьГруппыФайлов, "Файлы.ЭтоГруппа", "ЛОЖЬ")); + + СвойстваСписка.ОсновнаяТаблица = ПолноеИмяСправочника; + СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); + Список.Параметры.УстановитьЗначениеПараметра("ВладелецФайлов", ВладелецФайлов); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + ПереместитьФайлыВГруппу(Параметры.ПеремещаемыеФайлы, Значение); + ОповеститьОбИзменении(ТипЗнч(Параметры.ПеремещаемыеФайлы[0])); + Оповестить("Запись_Файл", Новый Структура, Параметры.ПеремещаемыеФайлы); + Закрыть(); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПереместитьФайлыВГруппу(Знач Файлы, Знач Группа) + НачатьТранзакцию(); + Попытка + Для Каждого ФайлСсылка Из Файлы Цикл + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + ФайлОбъект.Родитель = Группа; + ФайлОбъект.Записать(); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьГруппу(Команда) + Родитель = Неопределено; + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + Родитель = ТекущиеДанные.Ссылка; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Родитель", Родитель); + ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайлов); + ПараметрыФормы.Вставить("ЭтоНоваяГруппа", Истина); + ПараметрыФормы.Вставить("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов); + + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ГруппаФайлов", ПараметрыФормы, ЭтотОбъект); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl index 97a8deed9..de3346091 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl @@ -11,16 +11,16 @@ ЭтоНоваяГруппа = Параметры.ЭтоНоваяГруппа; Если ЭтоНоваяГруппа Тогда - ОбъектЗначение = Справочники[Параметры.ИмяСправочникаХранилищаФайлов].СоздатьГруппу(); - ОбъектЗначение.Родитель = Параметры.Родитель; + ОбъектЗначение = Справочники[Параметры.ИмяСправочникаХранилищаФайлов].СоздатьГруппу(); + ОбъектЗначение.Родитель = ?(Параметры.Родитель.ЭтоГруппа, Параметры.Родитель, Неопределено); ОбъектЗначение.ВладелецФайла = Параметры.ВладелецФайла; - ОбъектЗначение.ДатаСоздания = ТекущаяУниверсальнаяДата(); - ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); + ОбъектЗначение.ДатаСоздания = ТекущаяУниверсальнаяДата(); + ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); ИначеЕсли ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); + КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); ЗначениеКопирования = Параметры.ЗначениеКопирования; - ОбъектЗначение = Справочники[КопируемыйОбъект.Метаданные().Имя].СоздатьГруппу(); + ОбъектЗначение = Справочники[КопируемыйОбъект.Метаданные().Имя].СоздатьГруппу(); ОбъектЗначение.Родитель = Параметры.Родитель; ЗаполнитьЗначенияСвойств(ОбъектЗначение, КопируемыйОбъект, "ВладелецФайла, ДатаСоздания, Описание, Наименование, ДатаМодификацииУниверсальная, Изменил"); @@ -240,16 +240,18 @@ НачатьТранзакцию(); Попытка - ЗаписываемыйОбъект.Изменил = Пользователи.АвторизованныйПользователь(); + ЗаписываемыйОбъект.Изменил = Пользователи.АвторизованныйПользователь(); ЗаписываемыйОбъект.ДатаМодификацииУниверсальная = ТекущаяУниверсальнаяДата(); ЗаписываемыйОбъект.Записать(); ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка записи группы присоединенных файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); ВызватьИсключение; + КонецПопытки; Если ПараметрОбъект = Неопределено Тогда @@ -285,6 +287,7 @@ КонецПроцедуры +&НаСервере Процедура ОбновитьИнформациюОбИзменении() ЧастиСтроки = Новый Массив; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form index f55ef831f..501795382 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form @@ -258,6 +258,60 @@ Normal
    + + ЗагрузитьФайлы + 300 + true + true + + true + + + ЗагрузитьФайлыРасширеннаяПодсказка + 301 + Label + true + true + + Left + + + Form.Command.ЗагрузитьФайлы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ЗагрузитьПапку + 321 + true + true + + true + + + ЗагрузитьПапкуРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + Form.Command.ЗагрузитьПапку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + СоздатьГруппу 298 @@ -517,11 +571,39 @@
    Form.Command.Отправить Normal + Auto true true UserCmds Auto
    + + СравнитьФайлы + 323 + true + true + + true + + + СравнитьФайлыРасширеннаяПодсказка + 324 + Label + true + true + + Left + + + Form.Command.СравнитьФайлы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -998,16 +1080,16 @@
    - ПеренестиЭлемент - 305 + ПеренестиВГруппу + 338 true true true - ПеренестиЭлементРасширеннаяПодсказка - 306 + ПеренестиВГруппуРасширеннаяПодсказка + 339 Label true true @@ -1015,7 +1097,7 @@ Left - Form.Item.Список.StandardCommand.MoveItem + Form.Command.ПереместитьВГруппу Normal Auto true @@ -1204,33 +1286,6 @@ - - ЗагрузитьФайлы - 300 - true - true - - true - - - ЗагрузитьФайлыРасширеннаяПодсказка - 301 - Label - true - true - - Left - - - Form.Command.ЗагрузитьФайлы - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - Предпросмотр 272 @@ -1521,32 +1576,6 @@ Normal - - ФормаСправка - 9 - true - true - - true - - - ФормаСправкаExtendedTooltip - 131 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - СохранитьПапку 319 @@ -1575,16 +1604,16 @@ InAdditionalSubmenu - ЗагрузитьПапку - 321 + ФормаСправка + 9 true true true - ЗагрузитьПапкуРасширеннаяПодсказка - 322 + ФормаСправкаExtendedTooltip + 131 Label true true @@ -1592,41 +1621,13 @@ Left - Form.Command.ЗагрузитьПапку + Form.StandardCommand.Help Normal Auto true true UserCmds Auto - InAdditionalSubmenu - - - СравнитьФайлы - 323 - true - true - - true - - - СравнитьФайлыРасширеннаяПодсказка - 324 - Label - true - true - - Left - - - Form.Command.СравнитьФайлы - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu true true @@ -1698,13 +1699,14 @@ 292 <key>ru</key> - <value>Работа с файлами ведется в облачном сервисе <link 1>%</>1</value> + <value>Работа с файлами ведется в облачном сервисе <link 1>%</>1.</value> true true true + Button ДекорацияПояснениеРасширеннаяПодсказка 294 @@ -1725,7 +1727,89 @@ true Left - Center + +
    + + ДекорацияКартинкаСтатусСинхронизации + 342 + + <key>ru</key> + <value>Неудачная синхронизация файлов</value> + + true + true + + true + + + ru + Последняя синхронизация файлов не удалась из-за возможных проблем с облачным сервисом, подключением к интернету или других проблем. Подробнее см. Журнал регистрации. + + + ДекорацияКартинкаСтатусСинхронизацииРасширеннаяПодсказка + 344 + Label + true + true + + Left + + + + ДекорацияКартинкаСтатусСинхронизацииКонтекстноеМеню + 343 + true + + true + true + + + CommonPicture.Предупреждение + + + + + ДекорацияДатаСинхронизации + 345 + + <key>ru</key> + <value>Синхронизировано: %2 </value> + + true + true + + true + + + ru + Последняя синхронизация файлов не удалась из-за возможных проблем с облачным сервисом, подключением к интернету или других проблем. Подробнее см. Журнал регистрации. + + Button + + ДекорацияДатаСинхронизацииРасширеннаяПодсказка + 347 + Label + true + true + + Left + + + + ДекорацияДатаСинхронизацииКонтекстноеМеню + 346 + true + + true + Label + true + true + + + URLProcessing + ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки + + Left true @@ -1789,6 +1873,7 @@ FindByCurrentValue ListSettings LoadDynamicListSettings + MoveItem OutputList Refresh SaveDynamicListSettings @@ -2352,10 +2437,6 @@ BeforeRowChange СписокПередНачаломИзменения - - OnChange - СписокПриИзменении - СписокСтрокаПоиска 248 @@ -3023,16 +3104,16 @@ Auto - СписокКонтекстноеМенюПеренестиЭлемент - 307 + СписокКонтекстноеМенюПереместитьВГруппу + 340 true true true - СписокКонтекстноеМенюПеренестиЭлементРасширеннаяПодсказка - 308 + СписокКонтекстноеМенюПереместитьВГруппуРасширеннаяПодсказка + 341 Label true true @@ -3040,7 +3121,7 @@ Left - Form.Item.Список.StandardCommand.MoveItem + Form.Command.ПереместитьВГруппу Normal Auto true @@ -3802,6 +3883,23 @@ true + + УчетнаяЗапись + + <key>ru</key> + <value>Учетная запись</value> + + 20 + + CatalogRef.УчетныеЗаписиСинхронизацииФайлов + + + true + + + true + + ОткрытьФайлДляПросмотра @@ -4241,6 +4339,7 @@ <name>Отправить</name> </handler> </action> + <representation>TextPicture</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -4258,11 +4357,15 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.Print</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>Печать</name> </handler> </action> + <representation>TextPicture</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -4340,7 +4443,7 @@ <name>ЗагрузитьФайлы</name> <title> <key>ru</key> - <value>Загрузить файлы</value> + <value>Загрузить файлы...</value> 23 @@ -4496,6 +4599,32 @@ DontUse Auto + + ПереместитьВГруппу + + <key>ru</key> + <value>Переместить в группу</value> + + 30 + + ru + Переместить в группу + + + true + + Ctrl+Shift+M + + StdPicture.MoveItem + + + + ПеренестиВГруппу + + + DontUse + Auto + ВладелецФайла diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html index fcf07d5dd..03a3794e1 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html @@ -55,12 +55,20 @@
  • Соответствующей командой меню Еще или контекстного меню по правой кнопке мыши можно Открыть каталог файла в Проводнике Windows.
  • Обновление файла

    • С помощью команды Еще - Обновить из файла на диске можно обновить файл из оригинального файла на диске (из которого изначально был создан файл в программе). -
    • Также можно воспользоваться соответствующей командой контекстного меню по правой кнопке мыши.

    Электронная подпись и шифрование

    +
  • Также можно воспользоваться соответствующей командой контекстного меню по правой кнопке мыши.
  • Сравнение файлов

    +
    • +
      Выберите в списке файлы для сравнения.
      +
    • +
      Выполните команду Еще - Сравнить файлы. При первом сравнении файлов программа предлагает выбрать, с помощью какой офисной программы выполнить сравнение. После этого открываются файлы для сравнения в выбранной офисной программе. Программа для сравнения должна быть установлена на компьютере.

    Электронная подпись и шифрование

    В выпадающем меню по кнопке  Электронная подпись и шифрование доступны команды для работы с электронной подписью файлов:

    • Подписать - создает ЭП для файла. Перед созданием ЭП программа предлагает выбрать сертификат ЭП из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек программы. Подписанный файл становится недоступным для редактирования и отображается в списках со значком .
    • Сохранить вместе с электронной подписью - сохраняет подпись в файл на диске. Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.
    • Добавить электронную подпись из файла - добавляет подпись к файлу. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл.
    • Зашифровать - по команде происходит шифрование файла. В отличие от подписания могут использоваться несколько сертификатов, например, если необходимо зашифровать файл для нескольких пользователей. Зашифрованный файл в списках отображается со значком . -
    • Расшифровать - по команде происходит расшифровка файла. Для расшифровки нужно ввести пароль к закрытому ключу.

    См. также:

    +
  • Расшифровать - по команде происходит расшифровка файла. Для расшифровки нужно ввести пароль к закрытому ключу.
  • Печать табличного документа со штампом электронной подписи

    +
    • +
      Для печати подписанного электронной подписью табличного документа со штампами визуализации электронной подписи в списке присоединенных файлов предусмотрена команда Печать - Со штампом элоектронной подписи.
      +
    • +
      Предварительно, табличный документ должен быть подписан одной или несколькими электронными подписями в соответствии с тем, как это предусмотрено в документе.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl index c356f9af3..4875dda08 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl @@ -30,11 +30,11 @@ КонецЕсли; КонецЕсли; - Элементы.ФормаРедактировать.ТолькоВоВсехДействиях = Параметры.ПростаяФорма; - Элементы.ФормаОткрыть.ТолькоВоВсехДействиях = Параметры.ПростаяФорма; + Элементы.ФормаРедактировать.ТолькоВоВсехДействиях = Параметры.ПростаяФорма; + Элементы.ФормаОткрыть.ТолькоВоВсехДействиях = Параметры.ПростаяФорма; Элементы.ФормаЗакончитьРедактирование.ТолькоВоВсехДействиях = Параметры.ПростаяФорма; - Элементы.СписокВажныеРеквизиты.Видимость = Не Параметры.ПростаяФорма; - Предпросмотр = Параметры.ПростаяФорма; + Элементы.СписокВажныеРеквизиты.Видимость = Не Параметры.ПростаяФорма; + Предпросмотр = Параметры.ПростаяФорма; ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебныйВызовСервера.ПолучитьПоказыватьКолонкуРазмер(); Если Не ПоказыватьКолонкуРазмер Тогда @@ -63,8 +63,6 @@ НастройкиФайлов = РаботаСФайламиСлужебный.НастройкиФайлов(); - РаботаСФайламиПереопределяемый.ПриОпределенииНастроек(НастройкиФайлов); - ИмяСправочникаХранилищаФайлов = Неопределено; ЗаголовокОшибки = НСтр("ru = 'Ошибка при настройке динамического списка присоединенных файлов.'"); @@ -133,7 +131,7 @@ ИменаЭлементовКнопокФормы = Новый ФиксированныйМассив(ИменаЭлементов); - ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере(); + ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере(); Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда Элементы.ФормаИзменить.Видимость = Ложь; @@ -143,7 +141,7 @@ КонецЕсли; ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - ТипСправочникаСФайлами, + ТипСправочникаСФайлами, "Предпросмотр"); Если ИспользоватьПредпросмотр <> Неопределено Тогда @@ -151,25 +149,19 @@ КонецЕсли; Элементы.АдресДанныхФайла.Видимость = Предпросмотр; - Элементы.Предпросмотр.Пометка = Предпросмотр; + Элементы.Предпросмотр.Пометка = Предпросмотр; РасширенияПоддерживающиеПредпросмотр = РаботаСФайламиСлужебный.СписокРасширенийДляПредпросмотра(); ОбновитьПояснениеОблачногоСервиса(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); - - Если Не МодульУправлениеДоступом.ЕстьРоль("НастройкаСинхронизацииФайлов") Тогда - Элементы.НастроитьСинхронизацию.Видимость = Ложь; - КонецЕсли; - - КонецЕсли; - + Элементы.НастроитьСинхронизацию.Видимость = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов); ЕстьЭлектроннаяПодпись = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись"); Элементы.ПечатьСоШтампом.Видимость = ЕстьЭлектроннаяПодпись; + Элементы.СравнитьФайлы.Видимость = Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() + И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); + ЗапрещенныеРасширения = РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений(); УстановитьУсловноеОформление(); @@ -196,32 +188,47 @@ И (ВРег(Источник) = ВРег("ИспользоватьЭлектронныеПодписи") Или ВРег(Источник) = ВРег("ИспользоватьШифрование")) Тогда - ПодключитьОбработчикОжидания("ПриИзмененияИспользованияПодписанияИлиШифрования", 0.3, Истина); - КонецЕсли; - - Если ИмяСобытия <> "Запись_Файл" Тогда + ПодключитьОбработчикОжидания("ПриИзмененииИспользованияПодписанияИлиШифрования", 0.3, Истина); Возврат; - КонецЕсли; + ИначеЕсли ИмяСобытия = "Запись_Файл" Тогда - СсылкаНаФайл = ?(ТипЗнч(Источник) = Тип("Массив"), Источник[0], Источник); - - Если ТипЗнч(СсылкаНаФайл) <> ТипСправочникаСФайлами Тогда - Возврат; - КонецЕсли; - - Если Параметр.Свойство("ЭтоНовый") И Параметр.ЭтоНовый Тогда - - Элементы.Список.ТекущаяСтрока = СсылкаНаФайл; - УстановитьДоступностьФайловыхКоманд(); - Иначе - Если НЕ ФайловыеКомандыДоступны() Тогда + СсылкаНаФайл = ?(ТипЗнч(Источник) = Тип("Массив"), Источник[0], Источник); + Если ТипЗнч(СсылкаНаФайл) <> ТипСправочникаСФайлами Тогда Возврат; КонецЕсли; - - Если Элементы.Список.ТекущиеДанные <> Неопределено - И СсылкаНаФайл = Элементы.Список.ТекущиеДанные.Ссылка Тогда + + Если Параметр.Свойство("ЭтоНовый") И Параметр.ЭтоНовый Тогда + + Элементы.Список.Обновить(); + Элементы.Список.ТекущаяСтрока = СсылкаНаФайл; УстановитьДоступностьФайловыхКоманд(); + + Иначе + Если ФайловыеКомандыДоступны() И Элементы.Список.ТекущиеДанные <> Неопределено + И СсылкаНаФайл = Элементы.Список.ТекущиеДанные.Ссылка Тогда + УстановитьДоступностьФайловыхКоманд(); + КонецЕсли; КонецЕсли; + ИначеЕсли ИмяСобытия = "Запись_ПапкиФайлов" Тогда + Элементы.Список.Обновить(); + УстановитьДоступностьФайловыхКоманд(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + Если НавигационнаяСсылкаФорматированнойСтроки = "OpenJournal" Тогда + + СтандартнаяОбработка = Ложь; + ПараметрыОтбора = ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись); + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ПараметрыОтбора, ЭтотОбъект); + КонецЕсли; КонецПроцедуры @@ -230,14 +237,6 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок -&НаКлиенте -Процедура СписокПриИзменении(Элемент) - Если Элемент.ВыделенныеСтроки.Количество() > 0 Тогда - Оповестить("Запись_Файл", - Новый Структура("Событие", "ДанныеФайлаИзменены"), Элемент.ВыделенныеСтроки); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -300,8 +299,9 @@ Если Элемент.ТекущиеДанные.ЭтоГруппа Тогда ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ГруппаФайлов", ПараметрыФормы); Иначе - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл", ПараметрыФормы); + РаботаСФайламиКлиент.СкопироватьФайл(ВладелецФайла, Элемент.ТекущиеДанные.Ссылка, ПараметрыФормы); КонецЕсли; + Иначе ТекущиеДанные = Элементы.Список.ТекущиеДанные; ГруппаФайлов = Неопределено; @@ -329,6 +329,10 @@ Процедура СписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) СтандартнаяОбработка = Ложь; + Если ФайлыРедактируютсяВОблачномСервисе Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + ПараметрыПеретаскивания.Значение = Неопределено; + КонецЕсли; КонецПроцедуры @@ -337,51 +341,56 @@ СтандартнаяОбработка = Ложь; - Если СтрСравнить(ИмяСправочникаХранилищаФайлов, "Файлы") = 0 Тогда - ПеретаскиваниеФайлов(ВладелецФайла, ПараметрыПеретаскивания.Значение, ПараметрыПеретаскивания.Действие); - Иначе - МассивИменФайлов = Новый Массив; - МассивЭлементовСписка = Новый Массив; + МассивИменФайлов = Новый Массив; + МассивЭлементовСписка = Новый Массив; + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") + И ПараметрыПеретаскивания.Значение.ЭтоФайл() Тогда - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") - И ПараметрыПеретаскивания.Значение.ЭтоФайл() Тогда - + Если СтрСравнить(ИмяСправочникаХранилищаФайлов, "Файлы") <> 0 Тогда МассивИменФайлов.Добавить(ПараметрыПеретаскивания.Значение.ПолноеИмя); + Иначе + ПеретаскиваниеФайлов(ВладелецФайла, ПараметрыПеретаскивания.Значение, ПараметрыПеретаскивания.Действие); + Возврат; + КонецЕсли; + ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда + + Если ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда - ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - - Если ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда - - ТипПеретаскиваемого = ТипЗнч(ПараметрыПеретаскивания.Значение[0]); - Если ТипПеретаскиваемого = Тип("СправочникСсылка.Файлы") Тогда - РаботаСФайламиСлужебныйКлиент.ПеренестиФайлыВПриложенныеФайлы( + ТипПеретаскиваемого = ТипЗнч(ПараметрыПеретаскивания.Значение[0]); + Если ТипПеретаскиваемого = Тип("СправочникСсылка.Файлы") Тогда + РаботаСФайламиСлужебныйКлиент.ПеренестиФайлыВПриложенныеФайлы( ПараметрыПеретаскивания.Значение, ВладелецФайла); - Возврат; - КонецЕсли; - Если ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда - Для каждого Значение Из ПараметрыПеретаскивания.Значение Цикл + Возврат; + КонецЕсли; + Если ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда + Если СтрСравнить(ИмяСправочникаХранилищаФайлов, "Файлы") <> 0 Тогда + Для Каждого Значение Из ПараметрыПеретаскивания.Значение Цикл Если ТипЗнч(Значение) = Тип("Файл") И Значение.ЭтоФайл() Тогда МассивИменФайлов.Добавить(Значение.ПолноеИмя); КонецЕсли; КонецЦикла; - ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = ТипСправочникаСФайлами Тогда - Для Каждого Значение Из ПараметрыПеретаскивания.Значение Цикл - МассивЭлементовСписка.Добавить(Значение); - КонецЦикла; + Иначе + ПеретаскиваниеФайлов(ВладелецФайла, ПараметрыПеретаскивания.Значение, ПараметрыПеретаскивания.Действие); + Возврат; КонецЕсли; + ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = ТипСправочникаСФайлами Тогда + Для Каждого Значение Из ПараметрыПеретаскивания.Значение Цикл + МассивЭлементовСписка.Добавить(Значение); + КонецЦикла; КонецЕсли; - КонецЕсли; - Если МассивИменФайлов.Количество() > 0 Тогда - РаботаСФайламиСлужебныйКлиент.ДобавитьФайлыПеретаскиванием( - Параметры.ВладелецФайла, УникальныйИдентификатор, МассивИменФайлов); - КонецЕсли; - - Если МассивЭлементовСписка.Количество() > 0 И ВозможностьСоздаватьГруппыФайлов Тогда - СтандартнаяОбработка = Истина; - КонецЕсли; + КонецЕсли; + + Если МассивИменФайлов.Количество() > 0 Тогда + РаботаСФайламиСлужебныйКлиент.ДобавитьФайлыПеретаскиванием( + Параметры.ВладелецФайла, УникальныйИдентификатор, МассивИменФайлов); + КонецЕсли; + + Если МассивЭлементовСписка.Количество() > 0 И ВозможностьСоздаватьГруппыФайлов Тогда + СтандартнаяОбработка = Истина; КонецЕсли; КонецПроцедуры @@ -540,6 +549,7 @@ КонецЕсли; ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; + Если ВыделенныеСтроки.Количество() > 0 Тогда РаботаСФайламиКлиент.НапечататьФайлы(ВыделенныеСтроки, ЭтотОбъект.УникальныйИдентификатор); КонецЕсли; @@ -599,13 +609,16 @@ Процедура СоздатьГруппу(Команда) ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные.ВладелецФайла <> ВладелецФайла Тогда + ТекущиеДанные = Неопределено; + КонецЕсли; Если ТекущиеДанные <> Неопределено Тогда ТекущиеДанные = ТекущиеДанные.Ссылка; КонецЕсли; ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Родитель", Неопределено); + ПараметрыФормы.Вставить("Родитель", ТекущиеДанные); ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыФормы.Вставить("ЭтоНоваяГруппа", Истина); ПараметрыФормы.Вставить("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов); @@ -717,6 +730,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ПеренестиВГруппу(Команда) + Если Элементы.Список.ВыделенныеСтроки.Количество() > 0 Тогда + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ВладелецФайлов", ВладелецФайла); + ПараметрыОткрытия.Вставить("ПеремещаемыеФайлы", Элементы.Список.ВыделенныеСтроки); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ВыборГруппы", ПараметрыОткрытия, ЭтотОбъект); + КонецЕсли; +КонецПроцедуры + ////////////////////////////////////////////////////////////////////////////////// // Обработчики команд для поддержки ЭП и шифрования. @@ -734,11 +757,9 @@ Возврат; КонецЕсли; - МассивФайлов = Новый Массив; - МассивФайлов.Добавить(ТекущиеДанные.Ссылка); - - РаботаСФайламиСлужебныйКлиент.ПодписатьФайлы(МассивФайлов, УникальныйИдентификатор, - Новый ОписаниеОповещения("ДобавлениеПодписейЗавершить", ЭтотОбъект)); + ОписаниеОповещения = Новый ОписаниеОповещения("ДобавлениеПодписейЗавершить", ЭтотОбъект); + ДополнительныеПараметры = Новый Структура("ОбработкаРезультата", ОписаниеОповещения); + РаботаСФайламиКлиент.ПодписатьФайл(ТекущиеДанные.Ссылка, УникальныйИдентификатор, ДополнительныеПараметры); КонецПроцедуры @@ -847,7 +868,7 @@ ИмяРабочегоКаталога, ОбъектСсылка) Зашифровать = Истина; - РаботаСФайламиСлужебныйВызовСервера.ЗанестиИнформациюОШифровании( + РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании( ОбъектСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, @@ -917,7 +938,7 @@ МассивОтпечатков = Новый Массив; МассивФайловВРабочемКаталогеДляУдаления = Новый Массив; - РаботаСФайламиСлужебныйВызовСервера.ЗанестиИнформациюОШифровании( + РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании( ОбъектСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, @@ -972,18 +993,12 @@ ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаЗавершениеРедактирования", ПараметрыФормы, ЭтотОбъект); ИначеЕсли МассивФайлов.Количество() = 1 Тогда - ПараметрыОбновленияФайлов = Новый Структура; - ПараметрыОбновленияФайлов.Вставить("МассивФайлов", МассивФайлов); - ПараметрыОбновленияФайлов.Вставить("ВозможностьСоздаватьВерсииФайлов", ВозможностьСоздаватьВерсииФайлов); - ПараметрыОбновленияФайлов.Вставить("ХранитьВерсии", ДанныеСтроки.ХранитьВерсии); + Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект); + ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, ДанныеСтроки.Ссылка, УникальныйИдентификатор); Если Не ВозможностьСоздаватьВерсииФайлов Тогда - ПараметрыОбновленияФайлов.Вставить("СоздатьНовуюВерсию", Ложь); + ПараметрыОбновленияФайла.Вставить("СоздатьНовуюВерсию", Ложь); КонецЕсли; - ПараметрыОбновленияФайлов.Вставить("ФайлРедактируетТекущийПользователь", Истина); - ПараметрыОбновленияФайлов.Вставить("ОбработчикРезультата", Неопределено); - ПараметрыОбновленияФайлов.Вставить("ИдентификаторФормы", УникальныйИдентификатор); - ПараметрыОбновленияФайлов.Вставить("Редактирует", ДанныеСтроки.РедактируетПользователь); - РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеПоСсылкамСОповещением(ПараметрыОбновленияФайлов); + РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); КонецЕсли; КонецПроцедуры @@ -995,22 +1010,7 @@ Возврат; КонецЕсли; - МассивФайлов = Новый Массив; - Для Каждого ЭлементСписка Из Элементы.Список.ВыделенныеСтроки Цикл - ДанныеСтроки = Элементы.Список.ДанныеСтроки(ЭлементСписка); - Если Не РаботаСФайламиСлужебныйКлиент.ВозможностьОсвободитьФайл( - ДанныеСтроки.Ссылка, - ДанныеСтроки.ФайлРедактируетТекущийПользователь, - ДанныеСтроки.РедактируетПользователь) Тогда - Продолжить; - КонецЕсли; - МассивФайлов.Добавить(ДанныеСтроки.Ссылка); - КонецЦикла; - - ОсвободитьФайлы(МассивФайлов); - Для Каждого ПрисоединенныйФайл Из МассивФайлов Цикл - ОповеститьОбИзменении(ПрисоединенныйФайл); - КонецЦикла; + РаботаСФайламиСлужебныйКлиент.ОсвободитьФайлы(Элементы.Список); УстановитьДоступностьФайловыхКоманд(); КонецПроцедуры @@ -1151,9 +1151,9 @@ Если ТекущиеДанные.ЭтоГруппа Тогда ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ГруппаФайлов", ПараметрыФормы); Иначе - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл", ПараметрыФормы); + РаботаСФайламиКлиент.ОткрытьФормуФайла(ТекущиеДанные.Ссылка,, ПараметрыФормы); КонецЕсли; - + КонецПроцедуры &НаКлиенте @@ -1209,10 +1209,12 @@ &НаСервере Процедура СкрытьКнопкиСозданияГруппы() - Элементы.СоздатьГруппу.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь; - Элементы.ЗагрузитьПапку.Видимость = Ложь; - Элементы.СохранитьПапку.Видимость = Ложь; + Элементы.СоздатьГруппу.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь; + Элементы.ЗагрузитьПапку.Видимость = Ложь; + Элементы.СохранитьПапку.Видимость = Ложь; + Элементы.ПеренестиВГруппу.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюПереместитьВГруппу.Видимость = Ложь; КонецПроцедуры &НаСервере @@ -1250,6 +1252,45 @@ КонецПроцедуры +&НаКлиенте +Процедура ПеретаскиваниеФайлов(ВладелецФайла, ЗначениеПеретаскивания, Действие) + + МассивИменФайлов = Новый Массив; + + ТипЗначения = ТипЗнч(ЗначениеПеретаскивания); + Если ТипЗначения = Тип("Файл") Тогда + + Если ЗначениеПеретаскивания.ЭтоФайл() Тогда + МассивИменФайлов.Добавить(ЗначениеПеретаскивания.ПолноеИмя); + КонецЕсли; + + ИначеЕсли ТипЗнч(ЗначениеПеретаскивания) = Тип("Массив") Тогда + + Для Каждого ФайлПринятый Из ЗначениеПеретаскивания Цикл + Если ФайлПринятый.ЭтоФайл() Тогда + МассивИменФайлов.Добавить(ФайлПринятый.ПолноеИмя); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + ПараметрыДобавления = Новый Структура; + ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); + ПараметрыДобавления.Вставить("ПолноеИмяФайла", Неопределено); + ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайла); + ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); + ПараметрыДобавления.Вставить("ИмяСоздаваемогоФайла", Неопределено); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); + + Для Каждого ФайлПринятый Из МассивИменФайлов Цикл + ПараметрыДобавления.ПолноеИмяФайла = ФайлПринятый; + РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); + КонецЦикла; + + Элементы.Список.Обновить(); + +КонецПроцедуры + &НаКлиенте Процедура УстановитьДоступностьФайловыхКоманд(Результат = Неопределено, ПараметрыВыполнения = Неопределено) Экспорт @@ -1297,56 +1338,6 @@ КонецПроцедуры - -&НаКлиенте -Процедура ПеретаскиваниеФайлов(ВладелецФайла, ЗначениеПеретаскивания, Действие) - - МассивИменФайлов = Новый Массив; - - ТипЗначения = ТипЗнч(ЗначениеПеретаскивания); - Если ТипЗначения = Тип("Файл") Тогда - - Если ЗначениеПеретаскивания.ЭтоФайл() Тогда - МассивИменФайлов.Добавить(ЗначениеПеретаскивания.ПолноеИмя); - КонецЕсли; - - ИначеЕсли ТипЗнч(ЗначениеПеретаскивания) = Тип("Массив") Тогда - - Для Каждого ФайлПринятый Из ЗначениеПеретаскивания Цикл - Если ФайлПринятый.ЭтоФайл() Тогда - МассивИменФайлов.Добавить(ФайлПринятый.ПолноеИмя); - КонецЕсли; - КонецЦикла; - - КонецЕсли; - - ПараметрыДобавления = Новый Структура; - ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); - ПараметрыДобавления.Вставить("ПолноеИмяФайла", Неопределено); - ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайла); - ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); - ПараметрыДобавления.Вставить("ИмяСоздаваемогоФайла", Неопределено); - ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); - - Для Каждого ФайлПринятый Из МассивИменФайлов Цикл - ПараметрыДобавления.ПолноеИмяФайла = ФайлПринятый; - РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); - КонецЦикла; - - Элементы.Список.Обновить(); - -КонецПроцедуры - - -&НаСервереБезКонтекста -Процедура ОсвободитьФайлы(Знач МассивФайлов) - - Для Каждого ПрисоединенныйФайл Из МассивФайлов Цикл - РаботаСФайламиСлужебный.ОсвободитьФайл(ПрисоединенныйФайл); - КонецЦикла; - -КонецПроцедуры - &НаСервере Процедура НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов) @@ -1487,9 +1478,9 @@ ИменаКоманд.Добавить("ОткрытьСвойстваФайла"); ИменаКоманд.Добавить("Скопировать"); ИменаКоманд.Добавить("ЗагрузитьФайлы"); + ИменаКоманд.Добавить("ЗагрузитьПапку"); - - + ИменаКоманд.Добавить("ПереместитьВГруппу"); Возврат ИменаКоманд; @@ -1588,13 +1579,25 @@ КонецЕсли; Если ФайлыРедактируютсяВОблачномСервисе Тогда + УдалитьКомандуИзМассива(ИменаКоманд, "Добавить"); УдалитьКомандуИзМассива(ИменаКоманд, "ДобавитьИзФайлаНаДиске"); УдалитьКомандуИзМассива(ИменаКоманд, "ДобавитьФайлПоШаблону"); УдалитьКомандуИзМассива(ИменаКоманд, "ДобавитьФайлСоСканера"); УдалитьКомандуИзМассива(ИменаКоманд, "Скопировать"); + + УдалитьКомандуИзМассива(ИменаКоманд, "СоздатьГруппу"); + УдалитьКомандуИзМассива(ИменаКоманд, "ПереместитьВГруппу"); + УдалитьКомандуИзМассива(ИменаКоманд, "УстановитьПометкуУдаления"); + УдалитьКомандуИзМассива(ИменаКоманд, "КонтекстноеМенюУстановитьПометкуУдаления"); + УдалитьКомандуИзМассива(ИменаКоманд, "Занять"); + + УдалитьКомандуИзМассива(ИменаКоманд, "ЗагрузитьФайлы"); + УдалитьКомандуИзМассива(ИменаКоманд, "ЗагрузитьПапку"); + КонецЕсли; + Возврат ИменаКоманд; КонецФункции @@ -1622,14 +1625,14 @@ КонецПроцедуры &НаКлиенте -Процедура ПриИзмененияИспользованияПодписанияИлиШифрования() +Процедура ПриИзмененииИспользованияПодписанияИлиШифрования() - ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере(); + ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере(); КонецПроцедуры &НаСервере -Процедура ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере() +Процедура ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере() РаботаСФайламиСлужебный.КриптографияПриСозданииФормыНаСервере(ЭтотОбъект); @@ -1697,45 +1700,46 @@ Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл, - | СтатусыСинхронизацииФайловСОблачнымСервисом.Href, - | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Наименование, - | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Сервис КАК Сервис - |ИЗ - | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом - |ГДЕ - | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = &ВладелецФайла"; + СведенияОСинхронизации = РаботаСФайламиСлужебный.СведенияОСинхронизации(ВладелецФайла.Ссылка); - Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла.Ссылка); - - РезультатЗапроса = Запрос.Выполнить(); - - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Если СведенияОСинхронизации.Количество() > 0 Тогда ФайлыРедактируютсяВОблачномСервисе = Истина; + УчетнаяЗапись = СведенияОСинхронизации.УчетнаяЗапись; ВидимостьПояснения = Истина; АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( - ВыборкаДетальныеЗаписи.Сервис, ВыборкаДетальныеЗаписи.Href); + СведенияОСинхронизации.Сервис, СведенияОСинхронизации.Href); ЧастиСтроки = Новый Массив; ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами ведется в облачном сервисе'")); ЧастиСтроки.Добавить(" "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(ВыборкаДетальныеЗаписи.УчетнаяЗаписьНаименование, , , , АдресПапкиВОблачномСервисе)); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(СведенияОСинхронизации.УчетнаяЗаписьНаименование,,,, АдресПапкиВОблачномСервисе)); + ЧастиСтроки.Добавить(". "); Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); - КонецЦикла; + Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; + Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки =?(СведенияОСинхронизации.Синхронизирован, ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); + + ЧастиСтроки.Очистить(); + ЧастиСтроки.Добавить(НСтр("ru = 'Синхронизировано'")); + ЧастиСтроки.Добавить(": "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD"),,,, "OpenJournal")); + Элементы.ДекорацияДатаСинхронизации.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + + КонецЕсли; + КонецЕсли; Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = ВидимостьПояснения; КонецПроцедуры +&НаСервереБезКонтекста +Функция ДанныеОтбораЖурналаРегистрации(Сервис) + Возврат РаботаСФайламиСлужебный.ДанныеОтбораЖурналаРегистрации(Сервис); +КонецФункции + &НаСервере Функция ПараметрыНастройкиСинхронизации(ВладелецФайла) diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form index 237afdcac..2162a7b1c 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form @@ -1,5 +1,189 @@ + + ГруппаПояснениеОблачногоСервиса + 215 + + ДекорацияКартинкаОблачногоСервиса + 217 + + <key>ru</key> + <value>Декорация картинка облачного сервиса</value> + + true + true + + true + + + ДекорацияКартинкаОблачногоСервисаРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + ДекорацияКартинкаОблачногоСервисаКонтекстноеМеню + 218 + true + + true + true + + + CommonPicture.ПапкаОблачногоСервиса + + + + + ДекорацияПояснение + 220 + + <key>ru</key> + <value>Файл доступен только для просмотра, работа с ним ведется в облачном сервисе %1. </value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 221 + true + + true + Label + true + + Left + Center + + + + ДекорацияКартинкаСтатусСинхронизации + 226 + + <key>ru</key> + <value>Неудачная синхронизация файла</value> + + true + true + + true + + + ru + Последняя синхронизация файла не удалась из-за возможных проблем с облачным сервисом, подключением к интернету или других проблем. Подробнее см. Журнал регистрации. + + + ДекорацияКартинкаСтатусСинхронизацииРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + + ДекорацияКартинкаСтатусСинхронизацииКонтекстноеМеню + 227 + true + + true + true + + + CommonPicture.Предупреждение + + + + + ДекорацияДатаСинхронизации + 223 + + <key>ru</key> + <value>Синхронизирован: %2</value> + + true + true + + true + + + ДекорацияДатаСинхронизацииРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + + ДекорацияДатаСинхронизацииКонтекстноеМеню + 224 + true + + true + Label + true + true + + + URLProcessing + ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Пояснение облачного сервиса</value> + + true + + ГруппаПояснениеОблачногоСервисаРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + UsualGroup + + Center + Auto + true + true + + Style.ToolTipBackColor + + Auto + Auto + + ГруппаОбщаяИнформация 29 @@ -94,6 +278,10 @@ true true Normal + + ru + Краткое пояснение. Для редактирования содержимого файла нажмите кнопку Редактировать. + true @@ -2435,6 +2623,32 @@ Auto InAdditionalSubmenu
    + + ФормаЗанять + 229 + true + true + + true + + + ФормаЗанятьРасширеннаяПодсказка + 230 + Label + true + true + + Left + + + Form.Command.Занять + Normal + Auto + true + true + UserCmds + Auto + ФормаОсвободить 16 @@ -2558,6 +2772,7 @@ Form.Command.Отправить Normal + Auto true true UserCmds @@ -3624,6 +3839,40 @@ true + + УчетнаяЗапись + + <key>ru</key> + <value>Учетная запись</value> + + 20 + + CatalogRef.УчетныеЗаписиСинхронизацииФайлов + + + true + + + true + + + + ВладелецФайла + + <key>ru</key> + <value>Владелец файла</value> + + 21 + + DefinedType.ВладелецПрисоединенныхФайлов + + + true + + + true + + СтандартнаяЗаписатьИЗакрыть @@ -4241,11 +4490,15 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.Print</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>Печать</name> </handler> </action> + <representation>TextPicture</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -4297,6 +4550,33 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>Занять</name> + <title> + <key>ru</key> + <value>Занять</value> + + 29 + + ru + Пометить файл как занятый для редактирования + + + true + + + CommonPicture.ЗанятьФайл + + + + Занять + + + TextPicture + true + DontUse + Auto + Ключ diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl index 3814328bd..a0c806fde 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl @@ -1,10 +1,3 @@ -#Область ОписаниеПеременных - -&НаКлиенте -Перем ПараметрыФормыЭлементаСправочникаФайлы; - -#КонецОбласти - #Область ОбработчикиСобытийФормы &НаСервере @@ -14,7 +7,7 @@ Возврат; КонецЕсли; - ТипВладельца = ТипЗнч(Параметры.ВладелецФайла); + ТипВладельца = ТипЗнч(Параметры.ВладелецФайла); Если ЗначениеЗаполнено(Параметры.ПрисоединенныйФайл) Тогда ПрисоединенныйФайл = Параметры.ПрисоединенныйФайл; @@ -22,11 +15,6 @@ ПрисоединенныйФайл = Параметры.Ключ; КонецЕсли; - Если ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.Файлы") Тогда - ОткрытьФормуЭлементаСправочникаФайлы = Истина; - Возврат; - КонецЕсли; - ДоступнаЭлектроннаяПодпись = РаботаСФайламиСлужебный.ДоступнаЭлектроннаяПодпись(ТипЗнч(ПрисоединенныйФайл)); ТекущийПользователь = Пользователи.АвторизованныйПользователь(); @@ -38,48 +26,16 @@ РаботаСФайламиСлужебный.ФормаЭлементаПриСозданииНаСервере( ЭтотОбъект, Отказ, СтандартнаяОбработка, Параметры, ТолькоПросмотр, Истина); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); - + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); ЗапрещенныеРасширения = РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений(); - ОбновитьЗаголовок(); - - ДоступнаПечатьСоШтампом = ДоступнаЭлектроннаяПодпись - И (ЭтотОбъект.Объект.Расширение = "mxl") - И ЭтотОбъект.Объект.ПодписанЭП; - - Элементы.ПечатьСоШтампом.Видимость = ДоступнаПечатьСоШтампом; - - Если Не ДоступнаПечатьСоШтампом Тогда - Элементы.ПодменюПечать.Вид = ВидГруппыФормы.ГруппаКнопок; - Элементы.Печать.Заголовок = НСтр("ru='Печать'"); - КонецЕсли; - - Элементы.ФормаГруппаКомандЭлектроннаяПодписьИШифрование.Видимость = ДоступнаЭлектроннаяПодпись; - Элементы.ГруппаЭлектронныеПодписи.Видимость = ДоступнаЭлектроннаяПодпись; - Элементы.ГруппаСертификатыШифрования.Видимость = ДоступнаЭлектроннаяПодпись; - - Если НЕ ДоступнаЭлектроннаяПодпись Тогда - Элементы.ГруппаДополнительныеДанныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - КонецЕсли; + ОбновитьПояснениеОблачногоСервиса(ПрисоединенныйФайл); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - Если ОткрытьФормуЭлементаСправочникаФайлы Тогда - Отказ = Истина; - ПараметрыФормыЭлементаСправочникаФайлы = Новый Структура( - "ЗначениеКопирования, Ключ, ТолькоПросмотр, ПрисоединенныйФайл, - |ВладелецФайла, ПараметрыОтправки, РежимСоздания, ЭтоНовый"); - - ЗаполнитьЗначенияСвойств(ПараметрыФормыЭлементаСправочникаФайлы, Параметры); - СтандартныеПодсистемыКлиент.УстановитьХранениеФормы(ЭтотОбъект, Истина); - ПодключитьОбработчикОжидания("ОткрытьФормуЭлементаСправочникаФайлаОбработчикОжидания", 0.1, Истина); - Возврат; - КонецЕсли; - НаименованиеДоЗаписи = ЭтотОбъект.Объект.Наименование; ДатаМодификации = МестноеВремя(ЭтотОбъект.Объект.ДатаМодификацииУниверсальная); @@ -129,6 +85,23 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + Если НавигационнаяСсылкаФорматированнойСтроки = "OpenJournal" Тогда + + СтандартнаяОбработка = Ложь; + ПараметрыОтбора = ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись); + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ПараметрыОтбора, ЭтотОбъект); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыЭлектронныеПодписи &НаКлиенте @@ -318,8 +291,9 @@ КонецЕсли; Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) Тогда - Файлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭтотОбъект.Объект.Ссылка); - РаботаСФайламиКлиент.НапечататьФайлы(Файлы, ЭтотОбъект.УникальныйИдентификатор); + ПечатьФайла(); + Иначе + ПоказатьПредупреждение(, НСтр("ru = 'Для печати файла необходимо записать данные. Записать?'")); КонецЕсли; КонецПроцедуры @@ -342,7 +316,6 @@ КонецПроцедуры - // СтандартныеПодсистемы.Свойства &НаКлиенте @@ -375,11 +348,9 @@ КонецЕсли; КонецЕсли; - МассивФайлов = Новый Массив; - МассивФайлов.Добавить(ЭтотОбъект.Объект.Ссылка); - - РаботаСФайламиСлужебныйКлиент.ПодписатьФайлы(МассивФайлов, УникальныйИдентификатор, - Новый ОписаниеОповещения("ПриПолученииПодписи", ЭтотОбъект)); + ОписаниеОповещения = Новый ОписаниеОповещения("ПриПолученииПодписи", ЭтотОбъект); + ДополнительныеПараметры = Новый Структура("ОбработкаРезультата", ОписаниеОповещения); + РаботаСФайламиКлиент.ПодписатьФайл(ЭтотОбъект.Объект.Ссылка, УникальныйИдентификатор, ДополнительныеПараметры); КонецПроцедуры @@ -633,6 +604,18 @@ /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд для поддержки совместной работы с файлами. +&НаКлиенте +Процедура Занять(Команда) + + Если Модифицированность И Не ОбработатьКомандуЗаписиФайла() Тогда + Возврат; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ПрочитатьИУстановитьДоступностьЭлементовФормы", ЭтотОбъект); + РаботаСФайламиСлужебныйКлиент.ЗанятьСОповещением(Обработчик, ЭтотОбъект.Объект.Ссылка, УникальныйИдентификатор); + +КонецПроцедуры + &НаКлиенте Процедура Редактировать(Команда) @@ -697,7 +680,7 @@ ОповеститьОбИзменении(ЭтотОбъект.Объект.Ссылка); Оповестить("Запись_Файл", Новый Структура, ЭтотОбъект.Объект.Ссылка); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); КонецПроцедуры @@ -766,15 +749,6 @@ #Область СлужебныеПроцедурыИФункции -// Продолжение обработчика события ПриОткрытии. -&НаКлиенте -Процедура ОткрытьФормуЭлементаСправочникаФайлаОбработчикОжидания() - - СтандартныеПодсистемыКлиент.УстановитьХранениеФормы(ЭтотОбъект, Ложь); - ОткрытьФорму("Справочник.Файлы.Форма.ФормаЭлемента", ПараметрыФормыЭлементаСправочникаФайлы); - -КонецПроцедуры - &НаСервере Процедура ОбновитьЗаголовок() @@ -881,28 +855,18 @@ ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); РаботаСФайламиСлужебный.ЗаполнитьСписокПодписей(ЭтотОбъект); - - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура УстановитьДоступностьКнопок(Форма, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке) +Процедура УстановитьДоступностьКнопок(Форма, Элементы) - ФайлРедактируется = ЗначениеЗаполнено(Форма["Объект"].Редактирует) Или ФайлРедактируетсяВОблаке; - ФайлРедактируетТекущийПользователь = Форма["Объект"].Редактирует = ТекущийПользователь; - - ИменаВсехКоманд = ПолучитьИменаКомандФормы(); - ИменаКоманд = ПолучитьДоступныеКоманды( - ФайлРедактируется, - ФайлРедактируетТекущийПользователь, - Форма["Объект"].ПодписанЭП, - Форма["Объект"].Зашифрован, - Форма["Объект"].Ссылка.Пустая(), - ФайлРедактируетсяВОблаке); + ИменаВсехКоманд = ИменаВсехКомандФормы(); + ИменаКоманд = ДоступныеКомандыФормы(Форма); Если Форма.ЭлектронныеПодписи.Количество() = 0 Тогда - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьПодпись"); + СделатьКомандуНедоступной(ИменаКоманд, "ОткрытьПодпись"); КонецЕсли; Для Каждого ЭлементФормы Из Элементы Цикл @@ -923,23 +887,31 @@ КонецЕсли; КонецЦикла; + ДоступнаПечатьСоШтампом = Форма["Объект"].Расширение = "mxl" И Форма["Объект"].ПодписанЭП; + + Элементы.ПечатьСоШтампом.Видимость = ДоступнаПечатьСоШтампом; + + Если Не ДоступнаПечатьСоШтампом Тогда + Элементы.ПодменюПечать.Вид = ВидГруппыФормы.ГруппаКнопок; + Элементы.Печать.Заголовок = НСтр("ru='Печать'"); + Иначе + Элементы.ПодменюПечать.Вид = ВидГруппыФормы.Подменю; + Элементы.Печать.Заголовок = НСтр("ru='Сразу на принтер'"); + КонецЕсли; + КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьИменаКомандФормы() - - ИменаКоманд = ПолучитьИменаКомандИзмененияОбъекта(); - - Для Каждого ИмяКоманды Из ПолучитьИменаПростыхКомандОбъектов() Цикл - ИменаКоманд.Добавить(ИмяКоманды); - КонецЦикла; +Функция ИменаВсехКомандФормы() + ИменаКоманд = ИменаКомандИзмененияФайла(); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаКоманд, ИменаПрочихКоманд()); Возврат ИменаКоманд; КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьИменаПростыхКомандОбъектов() +Функция ИменаПрочихКоманд() ИменаКоманд = Новый Массив; @@ -961,7 +933,7 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьИменаКомандИзмененияОбъекта() +Функция ИменаКомандИзмененияФайла() ИменаКоманд = Новый Массив; @@ -971,6 +943,7 @@ ИменаКоманд.Добавить("УдалитьЭП"); ИменаКоманд.Добавить("Редактировать"); + ИменаКоманд.Добавить("Занять"); ИменаКоманд.Добавить("ЗакончитьРедактирование"); ИменаКоманд.Добавить("Освободить"); ИменаКоманд.Добавить("СохранитьИзменения"); @@ -990,12 +963,10 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьДоступныеКоманды(ФайлРедактируется, - ФайлРедактируетТекущийПользователь, - ФайлПодписан, - ФайлЗашифрован, - ЭтоНовыйФайл, - ФайлРедактируетсяВОблаке) +Функция ДоступныеКомандыФормы(Форма) + + ФормаОбъект = Форма["Объект"]; + ЭтоНовыйФайл = ФормаОбъект.Ссылка.Пустая(); Если ЭтоНовыйФайл Тогда ИменаКоманд = Новый Массив; @@ -1004,66 +975,78 @@ Возврат ИменаКоманд; КонецЕсли; - ИменаКоманд = ПолучитьИменаКомандФормы(); + ИменаКоманд = ИменаВсехКомандФормы(); + + ФайлРедактируетсяВОблаке = Форма.ФайлРедактируетсяВОблаке; + ФайлРедактируется = ЗначениеЗаполнено(ФормаОбъект.Редактирует) Или ФайлРедактируетсяВОблаке; + ФайлРедактируетТекущийПользователь = ФормаОбъект.Редактирует = Форма.ТекущийПользователь; + ФайлПодписан = ФормаОбъект.ПодписанЭП; + ФайлЗашифрован = ФормаОбъект.Зашифрован; Если ФайлРедактируется Тогда Если ФайлРедактируетТекущийПользователь Тогда - УдалитьКомандуИзМассива(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); + СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); Иначе - УдалитьКомандуИзМассива(ИменаКоманд, "ЗакончитьРедактирование"); - УдалитьКомандуИзМассива(ИменаКоманд, "Освободить"); - УдалитьКомандуИзМассива(ИменаКоманд, "Редактировать"); + СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + СделатьКомандуНедоступной(ИменаКоманд, "Редактировать"); КонецЕсли; - УдалитьКомандыЭП(ИменаКоманд); + СделатьКомандуНедоступной(ИменаКоманд, "Занять"); - УдалитьКомандуИзМассива(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьКак"); + СделатьКомандыЭПНедоступными(ИменаКоманд); - УдалитьКомандуИзМассива(ИменаКоманд, "Зашифровать"); - УдалитьКомандуИзМассива(ИменаКоманд, "Расшифровать"); + СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьКак"); + + СделатьКомандуНедоступной(ИменаКоманд, "Зашифровать"); + СделатьКомандуНедоступной(ИменаКоманд, "Расшифровать"); Иначе - УдалитьКомандуИзМассива(ИменаКоманд, "ЗакончитьРедактирование"); - УдалитьКомандуИзМассива(ИменаКоманд, "Освободить"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьИзменения"); + СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьИзменения"); КонецЕсли; Если ФайлПодписан Тогда - УдалитьКомандуИзМассива(ИменаКоманд, "ЗакончитьРедактирование"); - УдалитьКомандуИзМассива(ИменаКоманд, "Освободить"); - УдалитьКомандуИзМассива(ИменаКоманд, "Редактировать"); - УдалитьКомандуИзМассива(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); + СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + СделатьКомандуНедоступной(ИменаКоманд, "Редактировать"); + СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); Иначе - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьСертификат"); - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьПодпись"); - УдалитьКомандуИзМассива(ИменаКоманд, "ПроверитьЭП"); - УдалитьКомандуИзМассива(ИменаКоманд, "ПроверитьВсе"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьПодпись"); - УдалитьКомандуИзМассива(ИменаКоманд, "УдалитьЭП"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьВместеСЭП"); + СделатьКомандуНедоступной(ИменаКоманд, "ОткрытьСертификат"); + СделатьКомандуНедоступной(ИменаКоманд, "ОткрытьПодпись"); + СделатьКомандуНедоступной(ИменаКоманд, "ПроверитьЭП"); + СделатьКомандуНедоступной(ИменаКоманд, "ПроверитьВсе"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьПодпись"); + СделатьКомандуНедоступной(ИменаКоманд, "УдалитьЭП"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьВместеСЭП"); КонецЕсли; Если ФайлЗашифрован Тогда - УдалитьКомандыЭП(ИменаКоманд); - УдалитьКомандуИзМассива(ИменаКоманд, "ЗакончитьРедактирование"); - УдалитьКомандуИзМассива(ИменаКоманд, "Освободить"); - УдалитьКомандуИзМассива(ИменаКоманд, "Редактировать"); + СделатьКомандыЭПНедоступными(ИменаКоманд); + СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + СделатьКомандуНедоступной(ИменаКоманд, "Редактировать"); - УдалитьКомандуИзМассива(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); + СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); - УдалитьКомандуИзМассива(ИменаКоманд, "Зашифровать"); + СделатьКомандуНедоступной(ИменаКоманд, "Зашифровать"); - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьКаталогФайла"); - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьФайлДляПросмотра"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьКак"); + СделатьКомандуНедоступной(ИменаКоманд, "ОткрытьКаталогФайла"); + СделатьКомандуНедоступной(ИменаКоманд, "ОткрытьФайлДляПросмотра"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьКак"); - УдалитьКомандуИзМассива(ИменаКоманд, "Подписать"); + СделатьКомандуНедоступной(ИменаКоманд, "Подписать"); Иначе - УдалитьКомандуИзМассива(ИменаКоманд, "Расшифровать"); + СделатьКомандуНедоступной(ИменаКоманд, "Расшифровать"); КонецЕсли; Если ФайлРедактируетсяВОблаке Тогда - УдалитьКомандуИзМассива(ИменаКоманд, "СтандартныеСкопировать"); - УдалитьКомандуИзМассива(ИменаКоманд, "СтандартныеУстановитьПометкуУдаления"); + СделатьКомандуНедоступной(ИменаКоманд, "СтандартныеСкопировать"); + СделатьКомандуНедоступной(ИменаКоманд, "СтандартныеУстановитьПометкуУдаления"); + СделатьКомандуНедоступной(ИменаКоманд, "СтандартнаяЗаписать"); + СделатьКомандуНедоступной(ИменаКоманд, "СтандартнаяЗаписатьИЗакрыть"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьИзменения"); + КонецЕсли; Возврат ИменаКоманд; @@ -1071,24 +1054,18 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Процедура УдалитьКомандыЭП(Знач ИменаКоманд) +Процедура СделатьКомандыЭПНедоступными(Знач ИменаКоманд) - УдалитьКомандуИзМассива(ИменаКоманд, "Подписать"); - УдалитьКомандуИзМассива(ИменаКоманд, "ДобавитьЭПИзФайла"); - УдалитьКомандуИзМассива(ИменаКоманд, "СохранитьВместеСЭП"); + СделатьКомандуНедоступной(ИменаКоманд, "Подписать"); + СделатьКомандуНедоступной(ИменаКоманд, "ДобавитьЭПИзФайла"); + СделатьКомандуНедоступной(ИменаКоманд, "СохранитьВместеСЭП"); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура УдалитьКомандуИзМассива(Массив, ИмяКоманды) +Процедура СделатьКомандуНедоступной(ИменаКоманд, ИмяКоманды) - Позиция = Массив.Найти(ИмяКоманды); - - Если Позиция = Неопределено Тогда - Возврат; - КонецЕсли; - - Массив.Удалить(Позиция); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ИменаКоманд, ИмяКоманды); КонецПроцедуры @@ -1100,7 +1077,7 @@ Зашифровать = Истина; - РаботаСФайламиСлужебныйВызовСервера.ЗанестиИнформациюОШифровании( + РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании( ЭтотОбъект.Объект.Ссылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, @@ -1113,14 +1090,14 @@ КонецПроцедуры -Процедура РасшифроватьСервер(МассивДанныхДляЗанесенияВБазу, - ИмяРабочегоКаталога) +&НаСервере +Процедура РасшифроватьСервер(МассивДанныхДляЗанесенияВБазу, ИмяРабочегоКаталога) Зашифровать = Ложь; МассивОтпечатков = Новый Массив; МассивФайловВРабочемКаталогеДляУдаления = Новый Массив; - РаботаСФайламиСлужебныйВызовСервера.ЗанестиИнформациюОШифровании( + РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании( ЭтотОбъект.Объект.Ссылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, @@ -1137,8 +1114,7 @@ Процедура ОбновитьОбъект() ЗначениеВРеквизитФормы(ЭтотОбъект.Объект.Ссылка.ПолучитьОбъект(), "Объект"); - - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); КонецПроцедуры @@ -1272,8 +1248,7 @@ КонецЕсли; ЗначениеКопирования = Справочники[ИмяСправочника].ПустаяСсылка(); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); - + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); ОбновитьЗаголовок(); Возврат Истина; @@ -1287,6 +1262,16 @@ КонецПроцедуры +// Печать + +&НаКлиенте +Процедура ПечатьФайла() + + Файлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭтотОбъект.Объект.Ссылка); + РаботаСФайламиКлиент.НапечататьФайлы(Файлы, ЭтотОбъект.УникальныйИдентификатор); + +КонецПроцедуры + // Продолжение процедуры ПодписатьФайлЭП. // Вызывается из подсистемы ЭлектроннаяПодпись после подписания данных для нестандартного // способа добавления подписи в объект. @@ -1317,7 +1302,7 @@ ФайлОбъект = ЭтотОбъект.Объект.Ссылка.ПолучитьОбъект(); ЗначениеВРеквизитФормы(ФайлОбъект, "Объект"); РаботаСФайламиСлужебный.ЗаполнитьСписокПодписей(ЭтотОбъект); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); КонецПроцедуры @@ -1327,16 +1312,23 @@ ФайлОбъект = ЭтотОбъект.Объект.Ссылка.ПолучитьОбъект(); ЗначениеВРеквизитФормы(ФайлОбъект, "Объект"); РаботаСФайламиСлужебный.ЗаполнитьСписокШифрования(ЭтотОбъект); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрочитатьИУстановитьДоступностьЭлементовФормы(Результат, ДополнительныеПараметры) Экспорт + + ПрочитатьИУстановитьДоступностьНаСервере(); КонецПроцедуры &НаСервере -Процедура ПрочитатьИУстановитьДоступностьЭлементовФормы(Результат, ДополнительныеПараметры) Экспорт +Процедура ПрочитатьИУстановитьДоступностьНаСервере() ФайлОбъект = ЭтотОбъект.Объект.Ссылка.ПолучитьОбъект(); ЗначениеВРеквизитФормы(ФайлОбъект, "Объект"); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); КонецПроцедуры @@ -1526,4 +1518,51 @@ КонецПроцедуры +&НаСервере +Процедура ОбновитьПояснениеОблачногоСервиса(ПрисоединенныйФайл) + + ВидимостьПояснения = Ложь; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда + + СведенияОСинхронизации = РаботаСФайламиСлужебный.СведенияОСинхронизации(ЭтотОбъект.Объект.ВладелецФайла); + + Если СведенияОСинхронизации.Количество() > 0 Тогда + + УчетнаяЗапись = СведенияОСинхронизации.УчетнаяЗапись; + ФайлыРедактируютсяВОблачномСервисе = Истина; + ВидимостьПояснения = Истина; + + АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( + СведенияОСинхронизации.Сервис, СведенияОСинхронизации.Href); + + ЧастиСтроки = Новый Массив; + ЧастиСтроки.Добавить(НСтр("ru = 'Файл доступен только для просмотра, работа с ним ведется в облачном сервисе'")); + ЧастиСтроки.Добавить(" "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(СведенияОСинхронизации.УчетнаяЗаписьНаименование,,,, АдресПапкиВОблачномСервисе)); + ЧастиСтроки.Добавить(". "); + Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + + Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; + Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки =?(СведенияОСинхронизации.Синхронизирован, ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); + + ЧастиСтроки.Очистить(); + ЧастиСтроки.Добавить(НСтр("ru = 'Синхронизирован'")); + ЧастиСтроки.Добавить(": "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD"),,,, "OpenJournal")); + Элементы.ДекорацияДатаСинхронизации.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + + КонецЕсли; + + КонецЕсли; + + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = ВидимостьПояснения; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись) + Возврат РаботаСФайламиСлужебный.ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись); +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl index f2c3b80eb..803241100 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl @@ -191,7 +191,7 @@ Процедура ВнешнийРедактор(Команда) ЗаписатьТекст(); - РаботаСФайламиСлужебныйКлиент.ВыполнитьЗапускПриложения(ИмяОткрываемогоФайла); + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ИмяОткрываемогоФайла); Закрыть(); КонецПроцедуры @@ -208,6 +208,11 @@ ЗаписатьТекст(); + Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект); + ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, УникальныйИдентификатор); + ПараметрыОбновленияФайла.Кодировка = КодировкаТекстаФайла; + РаботаСФайламиСлужебныйКлиент.СохранитьИзмененияФайлаСОповещением(Обработчик, Файл, УникальныйИдентификатор); + КонецПроцедуры &НаКлиенте @@ -216,7 +221,7 @@ ЗаписатьТекст(); ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("Сценарий", 1); + ПараметрыОбработчика.Вставить("Сценарий", "ЗакончитьРедактирование"); Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект, ПараметрыОбработчика); ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, УникальныйИдентификатор); @@ -227,35 +232,32 @@ &НаКлиенте Процедура ПоказатьОтличия(Команда) - #Если ВебКлиент Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Сравнение версий в веб-клиенте не поддерживается.'")); - #Иначе - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ТекущийШаг", 1); - ПараметрыВыполнения.Вставить("СпособСравненияВерсийФайлов", Неопределено); - ПараметрыВыполнения.Вставить("ПолноеИмяФайлаСлева", ПолучитьИмяВременногоФайла(ДанныеФайла.Расширение)); - СравнениеВерсийАвтомат(-1, ПараметрыВыполнения); - #КонецЕсли + +#Если ВебКлиент Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Сравнение версий файлов в веб-клиенте недоступно.'")); + Возврат; +#Иначе + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ТекущийШаг", 1); + ПараметрыВыполнения.Вставить("СпособСравненияВерсийФайлов", Неопределено); + ПараметрыВыполнения.Вставить("ПолноеИмяФайлаСлева", ПолучитьИмяВременногоФайла(ДанныеФайла.Расширение)); + ВыполнитьСравнениеФайлов(-1, ПараметрыВыполнения); +#КонецЕсли + КонецПроцедуры &НаКлиенте Процедура ЗаписатьИЗакрыть(Команда) - Если Модифицированность Тогда - ЗаписатьТекст(); - - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("Сценарий", 2); - Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект, ПараметрыОбработчика); - - ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, УникальныйИдентификатор); - ПараметрыОбновленияФайла.Кодировка = КодировкаТекстаФайла; - РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); - - Возврат; - КонецЕсли; + ЗаписатьТекст(); - Закрыть(); + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Сценарий", "ЗаписатьИЗакрыть"); + Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект, ПараметрыОбработчика); + + ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, УникальныйИдентификатор); + ПараметрыОбновленияФайла.Кодировка = КодировкаТекстаФайла; + РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); КонецПроцедуры @@ -278,7 +280,7 @@ ЗаписатьТекст(); ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("Сценарий", 3); + ПараметрыОбработчика.Вставить("Сценарий", "Закрыть"); Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект, ПараметрыОбработчика); ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, УникальныйИдентификатор); ПараметрыОбновленияФайла.Кодировка = КодировкаТекстаФайла; @@ -312,14 +314,18 @@ &НаКлиенте Процедура ЗакончитьРедактированиеЗавершение(Результат, ПараметрыВыполнения) Экспорт - Если ПараметрыВыполнения.Сценарий = 1 Тогда + Если Результат <> Истина Тогда + Возврат; + КонецЕсли; + + Если ПараметрыВыполнения.Сценарий = "ЗакончитьРедактирование" Тогда РежимРедактирования = Ложь; УстановитьДоступностьКоманд(); - ИначеЕсли ПараметрыВыполнения.Сценарий = 2 Тогда + ИначеЕсли ПараметрыВыполнения.Сценарий = "ЗаписатьИЗакрыть" Тогда РежимРедактирования = Ложь; УстановитьДоступностьКоманд(); Закрыть(); - ИначеЕсли ПараметрыВыполнения.Сценарий = 3 Тогда + ИначеЕсли ПараметрыВыполнения.Сценарий = "Закрыть" Тогда Модифицированность = Ложь; Закрыть(); КонецЕсли; @@ -328,18 +334,18 @@ &НаКлиенте Процедура ЗаписатьТекст() - Если Модифицированность Тогда - - КодировкаТекстаДляЗаписи = КодировкаТекстаФайла; - Если Не ЗначениеЗаполнено(КодировкаТекстаДляЗаписи) Тогда - КодировкаТекстаДляЗаписи = Неопределено; - КонецЕсли; - - Текст.Записать(ИмяОткрываемогоФайла, КодировкаТекстаДляЗаписи); - Модифицированность = Ложь; + Если Не Модифицированность Тогда + Возврат; + КонецЕсли; + КодировкаТекстаДляЗаписи = КодировкаТекстаФайла; + Если Не ЗначениеЗаполнено(КодировкаТекстаДляЗаписи) Тогда + КодировкаТекстаДляЗаписи = Неопределено; КонецЕсли; + Текст.Записать(ИмяОткрываемогоФайла, КодировкаТекстаДляЗаписи); + Модифицированность = Ложь; + КонецПроцедуры &НаКлиенте @@ -370,13 +376,13 @@ КонецПроцедуры &НаКлиенте -Процедура СравнениеВерсийАвтомат(Результат, ПараметрыВыполнения) Экспорт +Процедура ВыполнитьСравнениеФайлов(Результат, ПараметрыВыполнения) Экспорт Если ПараметрыВыполнения.ТекущийШаг = 1 Тогда ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); ПараметрыВыполнения.СпособСравненияВерсийФайлов = ПерсональныеНастройки.СпособСравненияВерсийФайлов; // Первый вызов - еще не инициализирована настройка. Если ПараметрыВыполнения.СпособСравненияВерсийФайлов = Неопределено Тогда - Обработчик = Новый ОписаниеОповещения("СравнениеВерсийАвтомат", ЭтотОбъект, ПараметрыВыполнения); + Обработчик = Новый ОписаниеОповещения("ВыполнитьСравнениеФайлов", ЭтотОбъект, ПараметрыВыполнения); ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ВыборСпособаСравненияВерсий", , ЭтотОбъект, , , , Обработчик); ПараметрыВыполнения.ТекущийШаг = 1.1; Возврат; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Help/ru.html index d9396f89b..4ef535988 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Help/ru.html @@ -1,6 +1,6 @@

    В этом списке отображаются только файлы, занятые Вами для редактирования. Редактировать файлы можно в списке файлов или в списке присоединенных файлов объектов программы.

    -

    Открывается по команде Редактируемые файлы раздела Органайзер.

    +

    Открывается по команде Редактируемые файлы.

    В списке выводятся сведения:

    • Файл - наименование файла;
    • Размещение - папка, в которой находится файл или объект, к которому присоединен файл; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl index 9804343a5..b49b956c7 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl @@ -49,8 +49,7 @@ &НаСервере Процедура ПриЗакрытииНаСервере() - КоличествоЗанятыхФайлов = РаботаСФайламиСлужебныйВызовСервера.ПолучитьКоличествоЗанятыхФайлов(, - ПользователиКлиентСервер.АвторизованныйПользователь()); + КоличествоЗанятыхФайлов = РаботаСФайламиСлужебный.КоличествоЗанятыхФайлов(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl index 95956f75e..3e34382bf 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl @@ -43,7 +43,7 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "Запись_Файл" И Параметр.Событие = "ЗаконченоРедактирование" Тогда + Если ИмяСобытия = "Запись_Файл" Тогда Элементы.Список.Обновить(); КонецЕсли; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl index 7319e75ba..e5f795ae0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl @@ -18,7 +18,7 @@ Иначе СоздатьНовуюВерсию = Ложь; Элементы.СоздатьНовуюВерсию.Доступность = Ложь; - КонецЕсли; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl index 061327418..0fe1c1db3 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl @@ -21,6 +21,7 @@ Если БольшеНеСпрашивать = Истина Тогда ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( "НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", Ложь,,, Истина); + ОбновитьПовторноИспользуемыеЗначения(); КонецЕсли; РезультатВыбора = Новый Структура; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form index 332981d36..f1b82a5e7 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form @@ -106,19 +106,14 @@ 33 true - InputField + LabelField Auto true Left true - + true true - true - true - true - true - Normal true @@ -246,13 +241,13 @@ true true - true 50 true true 6 true MultiRow + Row 1 1 AutoUse diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl index b843657ac..3b70e6b6d 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl @@ -1,4 +1,3 @@ - #Область ОбработчикиСобытийФормы &НаСервере @@ -59,6 +58,7 @@ ПараметрыОбновленияФайлов.Вставить("ИдентификаторФормы", УникальныйИдентификатор); ПараметрыОбновленияФайлов.Вставить("Редактирует", Редактирует); ПараметрыОбновленияФайлов.Вставить("КомментарийКВерсии", Комментарий); + ПараметрыОбновленияФайлов.Вставить("ПоказыватьОповещение", Ложь); РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеПоСсылкамСОповещением(ПараметрыОбновленияФайлов); Закрыть(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form index 0ada3f90d..609a08aaf 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form @@ -46,6 +46,7 @@ StartChoice ВыбранныйКаталогНачалоВыбора + 40 true true true @@ -73,7 +74,7 @@ true - ПапкаДляДобавления + ПапкаДляДобавленияСтрокой ПапкаExtendedTooltip @@ -90,26 +91,15 @@ 15 true - InputField - true + LabelField Enter true Left true Left - + true true - false - true - true - true - true - true - - Style.BorderColor - - Normal @@ -470,10 +460,6 @@ ChoiceProcessing ОбработкаВыбора - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -597,7 +583,7 @@ 2 - CatalogRef + DefinedType.ВладелецПрисоединенныхФайлов true @@ -650,7 +636,7 @@ 10 - CatalogRef + DefinedType.ПрисоединенныйФайл true @@ -677,6 +663,24 @@ true + + ПапкаДляДобавленияСтрокой + + <key>ru</key> + <value>Папка для добавления</value> + + 12 + + String + + + + true + + + true + + ЗагрузитьПапку @@ -727,19 +731,19 @@ <types>CatalogRef</types> </valueType> </parameters> - <parameters> - <name>ИмяСправочникаХранилищаФайлов</name> - <valueType> - <types>String</types> - <stringQualifiers/> - </valueType> - </parameters> <parameters> <name>ПапкаДляДобавления</name> <valueType> <types>CatalogRef</types> </valueType> </parameters> + <parameters> + <name>КаталогНаДиске</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl index 7ffb330b2..9435db766 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl @@ -8,30 +8,17 @@ Возврат; КонецЕсли; + Если Не ЗначениеЗаполнено(Параметры.КаталогНаДиске) Тогда + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + КонецЕсли; + ГруппаФайлов = Параметры.ГруппаФайлов; - ИмяСправочникаХранилищаФайлов = Параметры.ИмяСправочникаХранилищаФайлов; - Если НЕ Параметры.Свойство("КаталогНаДиске") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Данная обработка вызывается из других процедур конфигурации. - |Вручную ее вызывать запрещено.'")); - Отказ = Истина; - Возврат; - КонецЕсли; - - Если Параметры.КаталогНаДиске <> Неопределено Тогда - Каталог = Параметры.КаталогНаДиске; - КонецЕсли; - - Если ЗначениеЗаполнено(Параметры.ПапкаДляДобавления) Тогда - ПапкаДляДобавления = Параметры.ПапкаДляДобавления; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - + Каталог = Параметры.КаталогНаДиске; + ПапкаДляДобавления = Параметры.ПапкаДляДобавления; + ПапкаДляДобавленияСтрокой = ОбщегоНазначения.ПредметСтрокой(ПапкаДляДобавления); ВыборКаталогов = Истина; - ХранитьВерсии = Истина; + ХранитьВерсии = РаботаСФайламиСлужебныйВызовСервера.ЭтоСправочникФайлы(ПапкаДляДобавления); + Элементы.ХранитьВерсии.Видимость = ХранитьВерсии; КонецПроцедуры @@ -53,29 +40,28 @@ &НаКлиенте Процедура ВыбранныйКаталогНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - #Если НЕ ВебКлиент Тогда - Режим = РежимДиалогаВыбораФайла.ВыборКаталога; + // Код вызывается только из IE или тонкого клиента, проверка на веб-клиент не требуется. + Режим = РежимДиалогаВыбораФайла.ВыборКаталога; + + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); + + ДиалогОткрытияФайла.Каталог = Каталог; + ДиалогОткрытияФайла.ПолноеИмяФайла = ""; + Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); + ДиалогОткрытияФайла.Фильтр = Фильтр; + ДиалогОткрытияФайла.МножественныйВыбор = Ложь; + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'"); + Если ДиалогОткрытияФайла.Выбрать() Тогда - ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); - - ДиалогОткрытияФайла.Каталог = Каталог; - ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); - ДиалогОткрытияФайла.Фильтр = Фильтр; - ДиалогОткрытияФайла.МножественныйВыбор = Ложь; - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'"); - Если ДиалогОткрытияФайла.Выбрать() Тогда + Если ВыборКаталогов = Истина Тогда - Если ВыборКаталогов = Истина Тогда - - Каталог = ДиалогОткрытияФайла.Каталог; - - КонецЕсли; + Каталог = ДиалогОткрытияФайла.Каталог; КонецЕсли; - - СтандартнаяОбработка = Ложь; - #КонецЕсли + + КонецЕсли; + + СтандартнаяОбработка = Ложь; КонецПроцедуры #КонецОбласти @@ -115,7 +101,6 @@ ПараметрыВыполнения.ИдентификаторФормы = УникальныйИдентификатор; ПараметрыВыполнения.Кодировка = КодировкаТекстаФайла; ПараметрыВыполнения.ГруппаФайлов = ГруппаФайлов; - ПараметрыВыполнения.ИмяСправочникаХранилищаФайлов = ИмяСправочникаХранилищаФайлов; РаботаСФайламиСлужебныйКлиент.ВыполнитьИмпортФайлов(ПараметрыВыполнения); КонецПроцедуры @@ -127,7 +112,7 @@ КонецЕсли; Закрыть(); - Оповестить("ИмпортКаталоговЗавершен", Новый Структура, Результат.ПапкаДляДобавленияТекущая); + Оповестить("Запись_ПапкиФайлов", Новый Структура, Результат.ПапкаДляДобавленияТекущая); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form index d0eb89d27..6c8e8f568 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form @@ -421,7 +421,7 @@ <id>14</id> <title> <key>ru</key> - <value>Папка</value> + <value>Размещение</value> true true @@ -429,7 +429,7 @@ true - ПапкаДляДобавления + ПапкаДляДобавленияСтрокой ПапкаДляДобавленияExtendedTooltip @@ -446,24 +446,15 @@ 15 true - InputField - true + LabelField Enter true Left true Left - - 50 + + true true - true - true - true - true - - Style.BorderColor - - Normal @@ -789,10 +780,6 @@ ChoiceProcessing ОбработкаВыбора - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -972,7 +959,7 @@ 6 - CatalogRef.ПапкиФайлов + DefinedType.ВладелецПрисоединенныхФайлов true @@ -981,21 +968,6 @@ true - - ВладелецФайлов - - <key>ru</key> - <value>Владелец файлов</value> - - 9 - - - true - - - true - - КодировкаПредставление @@ -1040,7 +1012,25 @@ 12 - CatalogRef + DefinedType.ПрисоединенныйФайл + + + true + + + true + + + + ПапкаДляДобавленияСтрокой + + <key>ru</key> + <value>Папка для добавления</value> + + 13 + + String + true @@ -1125,6 +1115,12 @@ МассивИменФайлов + + ПапкаДляДобавления + + CatalogRef + + diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl index 61027ca71..c6d333646 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl @@ -8,24 +8,15 @@ Возврат; КонецЕсли; + Если Параметры.ПапкаДляДобавления = Неопределено Тогда + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + КонецЕсли; + ГруппаФайлов = Параметры.ГруппаФайлов; - - Если НЕ Параметры.Свойство("ПапкаДляДобавления") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Данная обработка вызывается из других процедур конфигурации. - |Вручную ее вызывать запрещено.'")); - Отказ = Истина; - Возврат; - КонецЕсли; - - Если Параметры.ПапкаДляДобавления <> Неопределено Тогда - ВладелецФайлов = Параметры.ПапкаДляДобавления; - Если ТипЗнч(ВладелецФайлов) = Тип("СправочникСсылка.ПапкиФайлов") Тогда - ПапкаДляДобавления = ВладелецФайлов; - Иначе - Элементы.ПапкаДляДобавления.Видимость = Ложь; - КонецЕсли; - КонецЕсли; + ПапкаДляДобавления = Параметры.ПапкаДляДобавления; + ПапкаДляДобавленияСтрокой = ОбщегоНазначения.ПредметСтрокой(ПапкаДляДобавления); + ХранитьВерсии = РаботаСФайламиСлужебныйВызовСервера.ЭтоСправочникФайлы(ПапкаДляДобавления); + Элементы.ХранитьВерсии.Видимость = ХранитьВерсии; Если ТипЗнч(Параметры.МассивИменФайлов) = Тип("Массив") Тогда Для Каждого ПутьФайла Из Параметры.МассивИменФайлов Цикл @@ -38,11 +29,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) - ХранитьВерсии = Истина; -КонецПроцедуры - &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.РаботаСФайлами.Форма.ВыборКодировки") Тогда @@ -81,17 +67,6 @@ ПоляНеЗаполнены = Истина; КонецЕсли; - ВладелецФайловДляДобавления = ВладелецФайлов; - Если ТипЗнч(ВладелецФайлов) = Тип("СправочникСсылка.ПапкиФайлов") Тогда - ВладелецФайловДляДобавления = ПапкаДляДобавления; - КонецЕсли; - - Если ВладелецФайловДляДобавления.Пустая() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Укажите папку.'"), , "ПапкаДляДобавления"); - ПоляНеЗаполнены = Истина; - КонецЕсли; - Если ПоляНеЗаполнены = Истина Тогда Возврат; КонецЕсли; @@ -101,32 +76,32 @@ ВыбранныеФайлыСписокЗначений.Добавить(СтрокаСписка.Путь); КонецЦикла; - #Если ВебКлиент Тогда +#Если ВебКлиент Тогда + + МассивОпераций = Новый Массив; + + Для Каждого СтрокаСписка Из ВыбранныеФайлы Цикл + ОписаниеВызова = Новый Массив; + ОписаниеВызова.Добавить("ПоместитьФайлы"); - МассивОпераций = Новый Массив; + ПомещаемыеФайлы = Новый Массив; + Описание = Новый ОписаниеПередаваемогоФайла(СтрокаСписка.Путь, ""); + ПомещаемыеФайлы.Добавить(Описание); + ОписаниеВызова.Добавить(ПомещаемыеФайлы); - Для Каждого СтрокаСписка Из ВыбранныеФайлы Цикл - ОписаниеВызова = Новый Массив; - ОписаниеВызова.Добавить("ПоместитьФайлы"); - - ПомещаемыеФайлы = Новый Массив; - Описание = Новый ОписаниеПередаваемогоФайла(СтрокаСписка.Путь, ""); - ПомещаемыеФайлы.Добавить(Описание); - ОписаниеВызова.Добавить(ПомещаемыеФайлы); - - ОписаниеВызова.Добавить(Неопределено); // не используется - ОписаниеВызова.Добавить(Неопределено); // не используется - ОписаниеВызова.Добавить(Ложь); // Интерактивно = Ложь - - МассивОпераций.Добавить(ОписаниеВызова); - КонецЦикла; + ОписаниеВызова.Добавить(Неопределено); // не используется + ОписаниеВызова.Добавить(Неопределено); // не используется + ОписаниеВызова.Добавить(Ложь); // Интерактивно = Ложь - Если НЕ ЗапроситьРазрешениеПользователя(МассивОпераций) Тогда - // Пользователь не дал разрешения. - Закрыть(); - Возврат; - КонецЕсли; - #КонецЕсли + МассивОпераций.Добавить(ОписаниеВызова); + КонецЦикла; + + Если НЕ ЗапроситьРазрешениеПользователя(МассивОпераций) Тогда + // Пользователь не дал разрешения. + Закрыть(); + Возврат; + КонецЕсли; +#КонецЕсли ДобавленныеФайлы = Новый Массив; @@ -136,7 +111,7 @@ ПараметрыВыполнения = РаботаСФайламиСлужебныйКлиент.ПараметрыИмпортаФайлов(); ПараметрыВыполнения.ОбработчикРезультата = Обработчик; - ПараметрыВыполнения.Владелец = ВладелецФайловДляДобавления; + ПараметрыВыполнения.Владелец = ПапкаДляДобавления; ПараметрыВыполнения.ВыбранныеФайлы = ВыбранныеФайлыСписокЗначений; ПараметрыВыполнения.Комментарий = Комментарий; ПараметрыВыполнения.ХранитьВерсии = ХранитьВерсии; @@ -180,12 +155,12 @@ Процедура ДобавитьВыполнитьЗавершение(Результат, ПараметрыВыполнения) Экспорт Закрыть(); - ОповещениеПараметр = Неопределено; - Если ПараметрыВыполнения.ДобавленныеФайлы.Количество() > 0 Тогда - Индекс = ПараметрыВыполнения.ДобавленныеФайлы.Количество() - 1; - ОповещениеПараметр = ПараметрыВыполнения.ДобавленныеФайлы[Индекс].ФайлСсылка; + Источник = Неопределено; + КоличествоДобавленныхФайлов = Результат.ДобавленныеФайлы.Количество(); + Если КоличествоДобавленныхФайлов > 0 Тогда + Источник = Результат.ДобавленныеФайлы[КоличествоДобавленныхФайлов - 1].ФайлСсылка; КонецЕсли; - Оповестить("ИмпортФайловЗавершен", ОповещениеПараметр); + Оповестить("Запись_Файл", Новый Структура("ЭтоНовый", Истина), Источник); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl index faf3993a2..dae90ef27 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl @@ -44,13 +44,7 @@ СтандартнаяОбработка = Ложь; Если Не ПустаяСтрока(Элемент.ТекстРедактирования) Тогда - Файл = Новый Файл(Элемент.ТекстРедактирования); - Если Не Файл.Существует() Тогда - ТекстПредупреждения = НСтр("ru = 'Невозможно открыть папку, так как она не существует.'"); - ПоказатьПредупреждение(, ТекстПредупреждения); - Возврат; - КонецЕсли; - ЗапуститьПриложение(Элемент.ТекстРедактирования); + ОбщегоНазначенияКлиент.ОткрытьПроводник(Элемент.ТекстРедактирования); КонецЕсли; КонецПроцедуры @@ -76,6 +70,10 @@ &НаКлиенте Процедура СохранитьПапку() + Если НЕ СтрЗаканчиваетсяНа(ПапкаДляЭкспорта, ПолучитьРазделительПути()) Тогда + ПапкаДляЭкспорта = ПапкаДляЭкспорта + ПолучитьРазделительПути(); + КонецЕсли; + // Проверим - каталог выгрузки существует? если нет - создадим. КаталогВыгрузки = Новый Файл(ПапкаДляЭкспорта); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/ManagerModule.bsl b/SSL/src/DataProcessors/РаботаСФайлами/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo index 286d638ea..d31465f50 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo @@ -332,4 +332,13 @@ PersonalComputer MobileDevice + + ВыборГруппы + + ru + Выбор группы + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index 7b61b5d42..93365885e 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -1102,10 +1102,14 @@ true ShowInDropList true - true - true + OnActivate true + true Normal + + ru + Другое + diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html index d4c8c5e79..ba068fab1 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html @@ -9,7 +9,7 @@
    • Поле Город, населенный пункт предназначено для ввода региона, города и т.п. При необходимости можно ввести части адреса детально, нажав  Выбрать. В открывшемся шаблоне введите данные населенного пункта.
    • Поле Улица предназначено для выбора (нажмите кнопку  Выбрать, в списке улиц найдите нужную) или ввода улицы адреса.
    • Поля Дом, Корпус, Квартира позволяют ввести соответствующие части адреса. Можно изменить эти варианты, выбрав дополнительные значения из выпадающего списка. -
    • Также можно  Добавить дополнительные поля для ввода других предопределенных частей адреса, таких как Строение, Литера, Сооружение, Участок, Офис, Бокс, Помещение, Комната.  +
    • Также можно  Добавить дополнительные поля для ввода других предопределенных частей адреса, таких как Строение, Литера, Сооружение, Участок, Офис, Бокс, Помещение, Комната, А/я. 
    • При начале ввода номера дома или строения программа автоматически подсказывает варианты домов, расположенных на данной улице или в населенном пункте. Для того чтобы точно определить наличие дома и строения на введенной улице или в населенном пункте, нажмите кнопку , в окне Выбор дома выводится список всех возможных домов и строений для введенного адреса. 
    • Поле Представление адреса при заполнении адреса по шаблону недоступно, заполняется программой автоматически по мере заполнения полей адреса.
    • Поле Комментарий позволяет указать произвольный комментарий к адресу, который не будет включаться в его представление и выводится на печать.

    Примеры заполнения адреса

    diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 5397bf804..641a506b2 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -45,7 +45,7 @@ ЦветФонаУправляющегоПоля = ЦветаСтиля.ФонУправляющегоПоля; ЦветФонаФормы = ЦветаСтиля.ЦветФонаФормы; АвтоЦвет = Новый Цвет; - ОсновнаяСтрана = РаботаСАдресами.ОсновнаяСтрана(); + ОсновнаяСтрана = РаботаСАдресами.ОсновнаяСтрана(); ВидКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); @@ -56,7 +56,7 @@ ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКИ); КонецЦикла; Иначе - Элементы.ИсторияИзменений.Видимость = Ложь; + Элементы.ИсторияИзменений.Видимость = Ложь; Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; КонецЕсли; Элементы.ИсторияИзмененийГиперссылка.Видимость = НЕ Параметры.Свойство("ИзФормыИстории"); @@ -68,16 +68,14 @@ КонецЕсли; ОтобразитьИнформациюОДатахДействияАдреса(ДействуетС); Иначе - Элементы.ИсторияИзменений.Видимость = Ложь; + Элементы.ИсторияИзменений.Видимость = Ложь; Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; - Элементы.ГруппаИсторическийАдрес.Видимость = Ложь; + Элементы.ГруппаИсторическийАдрес.Видимость = Ложь; КонецЕсли; - Если ВидКонтактнойИнформации.ПроверятьПоФИАС Тогда - Команды.ПроверитьЗаполнениеАдреса.Подсказка = НСтр("ru = 'Проверить заполнение адреса в формате ФИАС'"); - Иначе - Команды.ПроверитьЗаполнениеАдреса.Подсказка = НСтр("ru = 'Проверить заполнение адреса в формате КЛАДР'"); - КонецЕсли; + Команды.ПроверитьЗаполнениеАдреса.Подсказка = ?(ВидКонтактнойИнформации.ПроверятьПоФИАС, + НСтр("ru = 'Проверить заполнение адреса в формате ФИАС'"), + НСтр("ru = 'Проверить заполнение адреса в формате КЛАДР'")); ВидКонтактнойИнформации.Вставить("ФорматАдреса", "ФИАС"); // Всегда используем разрезы ФИАС. Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), ВидКонтактнойИнформации.Наименование, Параметры.Заголовок); @@ -96,8 +94,8 @@ Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда // Распознали с ошибками, сообщим при открытии. ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; - XDTOКонтактная.Представление = Параметры.Представление; - XDTOКонтактная.Состав.Страна = Строка(ОсновнаяСтрана); + XDTOКонтактная.Представление = Параметры.Представление; + XDTOКонтактная.Состав.Страна = Строка(ОсновнаяСтрана); КонецЕсли; Иначе XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(Параметры.ЗначенияПолей, Параметры.Представление, ); @@ -456,10 +454,13 @@ КонецПроцедуры - &НаКлиенте Процедура ТипПомещенияПриИзменении(Элемент) + Если Элемент.ВыделенныйТекст = НаименованиеПриДобавлениеПроизвольногоПомещения() Тогда + ЭтотОбъект[Элемент.Имя] = ""; + КонецЕсли; + Контекст = КонтекстФормыКлиент(); ЗаполнитьПредставлениеАдреса(Контекст); КонтекстФормыКлиент(Контекст); @@ -1025,7 +1026,7 @@ КонецЦикла; КоличествоВариантов = Варианты.Количество(); - Если КоличествоВариантов>0 Тогда + Если КоличествоВариантов > 0 Тогда ДополнительныеПараметры = Новый Структура("КоличествоВариантов", КоличествоВариантов); Оповещение = Новый ОписаниеОповещения("ДобавитьОбъектЗавершение", ЭтотОбъект, ДополнительныеПараметры); ПоказатьВыборИзМеню(Оповещение, Варианты, Элементы.ДобавитьОбъект); @@ -1248,11 +1249,11 @@ Отбор = Новый Структура("Вид", Результат.Вид); СтрокаДействующегоАдреса = Неопределено; - ДатаБылаИзменена = Истина; - ТекущаяДатаАдреса = ОбщегоНазначенияКлиент.ДатаСеанса(); - Дельта = АдресНаДату - ТекущаяДатаАдреса; - МинимальнаяДельта = ?(Дельта > 0, Дельта, -Дельта); - НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + ДатаБылаИзменена = Истина; + ТекущаяДатаАдреса = ОбщегоНазначенияКлиент.ДатаСеанса(); + Дельта = АдресНаДату - ТекущаяДатаАдреса; + МинимальнаяДельта = ?(Дельта > 0, Дельта, -Дельта); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл Если ЗначениеЗаполнено(НайденнаяСтрока.ИмяРеквизита) Тогда ИмяРеквизита = НайденнаяСтрока.ИмяРеквизита; @@ -1280,8 +1281,8 @@ Если СтрСравнить(Результат.Представление, ПредставлениеРедактируемогоАдреса) <> 0 Тогда НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, Результат); - НоваяКонтактнаяИнформация.ЗначенияПолей = Результат.КонтактнаяИнформация; - НоваяКонтактнаяИнформация.ДействуетС = АдресНаДату; + НоваяКонтактнаяИнформация.ЗначенияПолей = Результат.КонтактнаяИнформация; + НоваяКонтактнаяИнформация.ДействуетС = АдресНаДату; НоваяКонтактнаяИнформация.ХранитьИсториюИзменений = Истина; Если СтрокаДействующегоАдреса = Неопределено Тогда Отбор = Новый Структура("ЭтоИсторическаяКонтактнаяИнформация, Вид", Ложь, Результат.Вид); @@ -1294,16 +1295,20 @@ НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Ложь; Иначе НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Истина; - Результат.Представление = СтрокаДействующегоАдреса.Представление; + Результат.Представление = СтрокаДействующегоАдреса.Представление; Результат.КонтактнаяИнформация = СтрокаДействующегоАдреса.ЗначенияПолей; КонецЕсли; + ИначеЕсли СтрСравнить(Результат.Комментарий, СтрокаДействующегоАдреса.Комментарий) <> 0 И СтрокиСАдресом.Количество() > 0 Тогда + // Поменяли только комментарий. + СтрокиСАдресом[0].Комментарий = Результат.Комментарий; КонецЕсли; Иначе - Если СтрСравнить(Результат.Представление, СтрокаДействующегоАдреса.Представление) <> 0 Тогда - ЗаполнитьЗначенияСвойств(СтрокаДействующегоАдреса, Результат); - СтрокаДействующегоАдреса.ЗначенияПолей = Результат.КонтактнаяИнформация; - СтрокаДействующегоАдреса.ИмяРеквизита = ИмяРеквизита; - СтрокаДействующегоАдреса.ЭтоИсторическаяКонтактнаяИнформация = Ложь; + Если СтрСравнить(Результат.Представление, СтрокаДействующегоАдреса.Представление) <> 0 + ИЛИ СтрСравнить(Результат.Комментарий, СтрокаДействующегоАдреса.Комментарий) <> 0 Тогда + ЗаполнитьЗначенияСвойств(СтрокаДействующегоАдреса, Результат); + СтрокаДействующегоАдреса.ЗначенияПолей = Результат.КонтактнаяИнформация; + СтрокаДействующегоАдреса.ИмяРеквизита = ИмяРеквизита; + СтрокаДействующегоАдреса.ЭтоИсторическаяКонтактнаяИнформация = Ложь; КонецЕсли; КонецЕсли; @@ -1370,7 +1375,8 @@ &НаКлиенте Процедура ДобавитьОбъектЗавершение(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт - Если ВыбранныйЭлемент=Неопределено Тогда + + Если ВыбранныйЭлемент = Неопределено Тогда // Отказ от выбора Возврат; КонецЕсли; @@ -1386,13 +1392,16 @@ Строка.Тип = ВыбранныйЭлемент.Представление; Строка.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); - ИмяТекущего = ОтобразитьДополнительныеПомещения(); + ИмяТекущего = ОтобразитьДополнительныеПомещения(ВыбранныйЭлемент.Представление = НаименованиеПриДобавлениеПроизвольногоПомещения()); КонецЕсли; // Запрещаем добавлять больше чем есть вариантов. Элементы.ДобавитьОбъект.Доступность = ДополнительныеПараметры.КоличествоВариантов > 1; - Если ИмяТекущего<>Неопределено Тогда + Если ИмяТекущего <> Неопределено Тогда + Если ВыбранныйЭлемент.Представление = НаименованиеПриДобавлениеПроизвольногоПомещения() Тогда + ЭтотОбъект[ИмяТекущего] = ""; + КонецЕсли; ТекущийЭлемент = Элементы[ИмяТекущего]; КонецЕсли; @@ -1412,8 +1421,7 @@ КонецЕсли; РазрешитьВводАдресаВСвободнойФорме = Не РазрешитьВводАдресаВСвободнойФорме; - СписокСтран = СтраныПоддерживающиеСтруктурированныйВвод(); - Если ЗначениеЗаполнено(СписокСтран[ВРег(Страна)]) Тогда + Если ЭтоСтранаУчастникЕАЭС(Страна) Тогда // ЕАЭС Контекст = КонтекстФормыКлиент(); ЗначениеРеквизитовПоКонтактнойИнформацииАдресИностранныйАдрес(ПредставлениеАдреса, Контекст); @@ -1545,7 +1553,7 @@ СписокКонтактнойИнформации = Новый Массив; Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл - КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС"); + КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС, Комментарий"); ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); КонецЦикла; @@ -1695,7 +1703,7 @@ Элементы.ТипАдреса.ТекущаяСтраница = ?(ЭтоНациональныйАдрес, Элементы.НациональныйАдрес, Элементы.ИностранныйАдрес); // Проверять, вводить в свободной форме и искать по индексу можем только российские адреса. - Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоНациональныйАдрес; + Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоНациональныйАдрес; Элементы.ЗаполнитьПоПочтовомуИндексу.Доступность = ЭтоНациональныйАдрес; Элементы.ЗаполнитьПоПочтовомуИндексуВсеДействия.Доступность = ЭтоНациональныйАдрес; @@ -1708,43 +1716,48 @@ Если Страна = ОсновнаяСтрана Тогда // Загружать можем только национальные адреса. - Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина; + Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина; Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина; + Элементы.ГруппаИндекса.Видимость = Истина; Если ЕстьПравоЗагружатьКлассификатор Тогда КнопкаПанели = Элементы.Найти("ЗагрузитьКлассификатор"); Если КнопкаПанели <> Неопределено Тогда - Элементы.ЗагрузитьКлассификатор.Доступность = Истина; + Элементы.ЗагрузитьКлассификатор.Доступность = Истина; КонецЕсли; КонецЕсли; Иначе - СписокСтран = СтраныПоддерживающиеСтруктурированныйВвод(); - Если СписокСтран[ВРег(Страна)] <> Истина Тогда + Если НЕ ЭтоСтранаУчастникЕАЭС(Страна) Тогда // Прочие страны - Элементы.ВвестиАдресВСвободнойФорме.Доступность = Ложь; - Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Ложь; - Элементы.СтруктураИностранныйАдреса.Видимость = Ложь; - Элементы.ГруппаИндекса.Видимость = Ложь; - РазрешитьВводАдресаВСвободнойФорме = Истина; + Элементы.ВвестиАдресВСвободнойФорме.Доступность = Ложь; + Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Ложь; + Элементы.СтруктураИностранныйАдреса.Видимость = Ложь; + Элементы.ГруппаИндекса.Видимость = Ложь; + РазрешитьВводАдресаВСвободнойФорме = Истина; Иначе // Страны ЕАЭС - Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина; - Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина; + Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина; + Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина; Если РазрешитьВводАдресаВСвободнойФорме Тогда Элементы.СтруктураИностранныйАдреса.Видимость = Ложь; - Элементы.ГруппаИндекса.Видимость = Ложь; + Элементы.ГруппаИндекса.Видимость = Ложь; Иначе Элементы.СтруктураИностранныйАдреса.Видимость = Истина; - Элементы.ГруппаИндекса.Видимость = Истина; - КонецЕсли; - КонецЕсли; - Если ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда - ПозицияСтрана = СтрНайти(ПредставлениеАдреса, ","); - Если ПозицияСтрана > 0 Тогда - ПредставлениеАдреса = ВРег(Страна) + Сред(ПредставлениеАдреса, ПозицияСтрана); + Элементы.ГруппаИндекса.Видимость = Истина; КонецЕсли; КонецЕсли; КонецЕсли; + + Если ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда + ПозицияСтрана = СтрНайти(ПредставлениеАдреса, ","); + Если ПозицияСтрана > 0 Тогда + ПредставлениеАдреса = ВРег(Страна) + Сред(ПредставлениеАдреса, ПозицияСтрана); + Иначе + ПредставлениеАдреса = ВРег(Страна); + КонецЕсли; + КонецЕсли; + СостояниеВводаПредставленияАдреса(РазрешитьВводАдресаВСвободнойФорме); + КонецПроцедуры &НаСервере @@ -1756,10 +1769,12 @@ Если Не ЕстьКлассификатор Тогда Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь; Элементы.ЗаполнитьПоПочтовомуИндексуВсеДействия.Видимость = Ложь; - Элементы.Улица.КнопкаВыбора = Ложь; - Элементы.Дом.КнопкаВыбора = Ложь; - Элементы.Строение.КнопкаВыбора = Ложь; - Элементы.СообщениеОбОбращенииВФНС.Видимость = Ложь; + Элементы.Улица.КнопкаВыбора = Ложь; + Элементы.Дом.КнопкаВыбора = Ложь; + Элементы.Строение.КнопкаВыбора = Ложь; + Элементы.СообщениеОбОбращенииВФНС.Видимость = Ложь; + Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru='Введите название населенного пункта'"); + Элементы.Улица.ПодсказкаВвода = НСтр("ru='Введите название улицы'"); КонецЕсли; // По умолчанию выводим представление. @@ -1849,7 +1864,7 @@ Если Контекст.РазрешитьВводАдресаВСвободнойФорме И Контекст.ПредставлениеАдресаИзменено Тогда Возврат; КонецЕсли; - + Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); Контекст.ПредставлениеАдреса = Инфо.Представление; @@ -1922,8 +1937,11 @@ Иначе Контекст.РазрешитьВводАдресаВСвободнойФорме = Истина; КонецЕсли; - Контекст.ПредставлениеАдреса = ВычисленноеПредставление; - + + Если ЗначениеЗаполнено(ВычисленноеПредставление) И ПустаяСтрока(Контекст.ПредставлениеАдреса) Тогда + Контекст.ПредставлениеАдреса = ВычисленноеПредставление; + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -2076,14 +2094,27 @@ Адрес.Страна = Строка(Контекст.Страна); Если ВРег(Контекст.Страна) <> ВРег(Контекст.ОсновнаяСтрана.Наименование) Тогда Если Контекст.РазрешитьВводАдресаВСвободнойФорме Тогда - Результат.Представление = Контекст.ПредставлениеАдреса; - Если Контекст.ВидКонтактнойИнформации.ВключатьСтрануВПредставление - И СтрНачинаетсяС(ВРЕГ(Контекст.ПредставлениеАдреса), ВРег(Контекст.Страна)) Тогда - Адрес.Состав = Сред(Контекст.ПредставлениеАдреса, СтрДлина(Контекст.Страна) + 2); + + Если Контекст.ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда + + Если СтрНачинаетсяС(ВРЕГ(Контекст.ПредставлениеАдреса), ВРег(Контекст.Страна)) Тогда + Позиция = СтрДлина(Контекст.Страна) + 1; + Если Сред(Контекст.ПредставлениеАдреса, Позиция, 1) = "," Тогда + Позиция = Позиция + 1; + КонецЕсли; + Адрес.Состав = СокрЛП(Сред(Контекст.ПредставлениеАдреса, Позиция)); + Иначе + Адрес.Состав = СокрЛП(Контекст.ПредставлениеАдреса); + КонецЕсли; + + Результат.Представление = Адрес.Страна + ?(ЗначениеЗаполнено(Адрес.Состав), ", " + Адрес.Состав, "");; Иначе - Адрес.Состав = Контекст.ПредставлениеАдреса; + Адрес.Состав = Контекст.ПредставлениеАдреса; + Результат.Представление = Контекст.ПредставлениеАдреса; КонецЕсли; + Иначе + НаселенныйПункт = Строка(Контекст.НаселенныйПунктДетально.Регион.Представление) + "," + Строка(Контекст.НаселенныйПунктДетально.Район.Представление) + "," + Строка(Контекст.НаселенныйПунктДетально.Город.Представление) + "," + Строка(Контекст.НаселенныйПунктДетально.НаселенныйПункт.Представление); Строка9Запятых = Контекст.Страна.Наименование + "," + Контекст.Индекс + "," + НаселенныйПункт + "," + Контекст.Улица + ","; @@ -2092,7 +2123,9 @@ Строка9Запятых = Строка9Запятых + ?(ЗначениеЗаполнено(Контекст.Помещение), Контекст.ТипПомещения + " " + Контекст.Помещение, ""); Адрес.Состав = Строка9Запятых; Результат.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); + КонецЕсли; + Возврат Результат; КонецЕсли; @@ -2483,10 +2516,10 @@ КонецПроцедуры &НаСервере -Функция ОтобразитьДополнительныеПомещения() +Функция ОтобразитьДополнительныеПомещения(ФокусНаТип = Ложь) Удалять = Новый Массив; - Пока Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы.Количество()>0 Цикл + Пока Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы.Количество() > 0 Цикл Группа = Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы[0]; Если ТипЗнч(Группа)=Тип("ГруппаФормы") Тогда Идентификатор = Сред(Группа.Имя, 1 + СтрДлина("ГруппаПомещение")); @@ -2505,11 +2538,11 @@ КонецЦикла; ИзменитьРеквизиты(,Удалять); - КоличествоПомещений = ДополнительныеПомещения.Количество()-1; - КоличествоТипов = Элементы.ТипПомещения.СписокВыбора.Количество()-2; + КоличествоПомещений = ДополнительныеПомещения.Количество() - 1; + КоличествоТипов = Элементы.ТипПомещения.СписокВыбора.Количество() - 2; Результат = Неопределено; - Для НомерСтроки=0 По КоличествоПомещений Цикл + Для НомерСтроки = 0 По КоличествоПомещений Цикл Строка = ДополнительныеПомещения[НомерСтроки]; Идентификатор = Формат(НомерСтроки, "ЧН=; ЧГ="); @@ -2526,8 +2559,8 @@ НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Помещение.СписокВыбора.ВыгрузитьЗначения()); НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПомещениеПриИзменении"); - Если НомерСтроки=КоличествоПомещений Тогда - Результат = НовыйЭлемент.Имя; + Если НомерСтроки = КоличествоПомещений Тогда + Результат = ?(ФокусНаТип, НовыйТип.Имя, НовыйЭлемент.Имя); КонецЕсли; Добавлять = Новый Массив; @@ -2972,9 +3005,6 @@ &НаКлиенте Процедура ПослеПроверкиДоступностиКлассификатораВФоне(Задание, ДополнительныеПараметры) Экспорт - Если Задание = Неопределено Тогда - Возврат; - КонецЕсли; Если Задание.Статус = "Выполнено" Тогда ДоступностьКлассификатора = ПолучитьИзВременногоХранилища(Задание.АдресРезультата); Если ДоступностьКлассификатора <> Неопределено Тогда @@ -3127,11 +3157,12 @@ КонецЕсли; ОбновитьИндексИПредставление(); + КонецПроцедуры &НаКлиенте Функция ПерваяБукваЗаглавная(Строка) - Возврат ВРег(Лев(Строка, 1)) + НРег(Сред(Строка, 2)); + Возврат ВРег(Лев(Строка, 1)) + Сред(НРег(Строка), 2); // Использовать ТРег нельзя. КонецФункции &НаКлиенте @@ -3202,6 +3233,8 @@ ВариантыДанныхПомещение = Обработки.РасширенныйВводКонтактнойИнформации.ВариантыДанныхПомещение(); УстановитьСписокВыбораЭлемента(Элементы.ТипПомещения, Элементы.Помещение, ВариантыДанныхПомещение); УстановитьСписокВыбораЭлемента(Элементы.ТипПомещенияИностранныйАдреса, Элементы.ПомещениеИностранныйАдреса, ВариантыДанныхПомещение); + Элементы.ТипПомещения.СписокВыбора.НайтиПоЗначению("").Значение = НаименованиеПриДобавлениеПроизвольногоПомещения(); + Элементы.ТипПомещенияИностранныйАдреса.СписокВыбора.НайтиПоЗначению("").Значение = НаименованиеПриДобавлениеПроизвольногоПомещения(); // Возможно пустые значения, чтобы не смущали. Если ПустаяСтрока(Дом) И ПустаяСтрока(ТипДома) Тогда @@ -3446,17 +3479,14 @@ // Страны ЕАЭС поддерживающие структурированный ввод. // -// Возвращаемое значение: -// Соответствие - Список стран. -// -&НаКлиенте -Функция СтраныПоддерживающиеСтруктурированныйВвод() - СписокСтран = Новый Соответствие; - СписокСтран.Вставить("БЕЛАРУСЬ", Истина); - СписокСтран.Вставить("КАЗАХСТАН", Истина); - СписокСтран.Вставить("АРМЕНИЯ", Истина); - СписокСтран.Вставить("КИРГИЗИЯ", Истина); - Возврат СписокСтран; +&НаСервереБезКонтекста +Функция ЭтоСтранаУчастникЕАЭС(Страна) + Возврат УправлениеКонтактнойИнформацией.ЭтоСтранаУчастникЕАЭС(Страна); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НаименованиеПриДобавлениеПроизвольногоПомещения() + Возврат НСтр("ru='Другое'"); КонецФункции #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl index 40844b8c7..400dfd289 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl @@ -111,9 +111,19 @@ КонецЕсли; Если НЕ ПустаяСтрока(Текст) Тогда - ЗаполнитьПорциюВариантовПоПервойБукве(Текст); + + РезультатПодбора = ЗаполнитьПорциюВариантовПоПервойБукве(Текст, Родитель); + ВариантыАдреса.Очистить(); + + Для каждого Адрес Из РезультатПодбора Цикл + СтрокаАдреса = ВариантыАдреса.Добавить(); + СтрокаАдреса.Представление = Адрес.Значение.Значение.Представление; + СтрокаАдреса.Идентификатор = Адрес.Значение.Значение.Идентификатор; + СтрокаАдреса.Неактуален = Адрес.Пометка; + КонецЦикла; + Иначе - ПерейтиВНачалоСписка(); + ПодключитьОбработчикОжидания("ПерейтиВНачалоСписка", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -503,15 +513,17 @@ ВариантыАдреса.Очистить(); ВариантыАдреса.Загрузить(ДанныеКлассификатора.Данные); КонецЕсли; + КонецПроцедуры -&НаСервере -Процедура ЗаполнитьПорциюВариантовПоПервойБукве(Текст) +&НаСервереБезКонтекста +Функция ЗаполнитьПорциюВариантовПоПервойБукве(Текст, Родитель) + ДанныеВыбора = Новый СписокЗначений; Если СтрДлина(Текст) < 1 Или Не ЗначениеЗаполнено(Родитель)Тогда // Нет вариантов, список пуст, стандартную обработку не надо трогать. - Возврат; + Возврат ДанныеВыбора; КонецЕсли; ДополнительныеПараметры = Новый Структура; @@ -520,24 +532,14 @@ ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораУлицы(Родитель, Текст, ДополнительныеПараметры); Если ДанныеКлассификатора.Отказ Тогда - Возврат; + Возврат ДанныеВыбора; КонецЕсли; ДанныеВыбора = ДанныеКлассификатора.Данные; - // Стандартную обработку отключаем, только если есть наши варианты. - Если ДанныеВыбора.Количество() > 0 Тогда - СтандартнаяОбработка = Ложь; - ВариантыАдреса.Очистить(); - Для каждого Адрес Из ДанныеВыбора Цикл - СтрокаАдреса = ВариантыАдреса.Добавить(); - СтрокаАдреса.Представление = Адрес.Значение.Значение.Представление; - СтрокаАдреса.Идентификатор = Адрес.Значение.Значение.Идентификатор; - СтрокаАдреса.Неактуален = Адрес.Пометка; - КонецЦикла; - КонецЕсли; + Возврат ДанныеВыбора; -КонецПроцедуры +КонецФункции &НаСервере Процедура УстановитьДанныеПоПредставлениюУлицы(Представление, ИдентификаторРодителя) diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl index 90cbd1bd6..65b9b494b 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl @@ -214,8 +214,6 @@ ТипВыбранного = ТипЗнч(ВыбранноеЗначение); Если ТипВыбранного = Тип("Структура") Тогда - // Выбрано или кнопкой или из автоподбора. - ВыбранноеЗначение.Свойство("Отказ", СервисКлассификатораНедоступен); Если СервисКлассификатораНедоступен Тогда СтандартнаяОбработка = Ложь; diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl index 579f601af..49e1ae07c 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl @@ -98,7 +98,7 @@ КонецЕсли; НаименованиеСтраны = ""; - Результат = Новый Структура; + Результат = СтруктураАдреса(); Формат9Запятых = Ложь; ЭлементыАдреса = Новый Соответствие; @@ -124,7 +124,7 @@ Состав = XDTOАдрес.Состав; Если Состав = Неопределено Тогда - Возврат Неопределено; + Возврат Результат; КонецЕсли; XDTOТип = Состав.Тип(); @@ -150,7 +150,9 @@ Возврат Результат; КонецЕсли; - Если ТипЗнч(АдресРФ) = Тип("Строка") Тогда + Если АдресРФ = Неопределено Тогда + Возврат Результат; + ИначеЕсли ТипЗнч(АдресРФ) = Тип("Строка") Тогда Если СтрЧислоВхождений(АдресРФ, ",") = 9 Тогда ЭлементыАдреса = СтруктураАдресаПоФормату9Запятых(АдресРФ); Формат9Запятых = Истина; @@ -186,7 +188,7 @@ ЭлементыАдреса.Вставить("Квартира", ""); ЭлементыАдреса.Вставить("ДополнительнаяТерритория", НайтиДополнительныйЭлементАдреса(АдресРФ).Значение); ЭлементыАдреса.Вставить("ЭлементДополнительнойТерритории", - ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91))); + ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91))); КонецЕсли; КонецЕсли; @@ -1218,7 +1220,6 @@ КонецФункции - Функция СтруктураАдресаПоФормату9Запятых(АдресВФормате9Запятых) Результат = Новый Соответствие; АдресМассив = СтрРазделить(АдресВФормате9Запятых, ",", Истина); @@ -1260,7 +1261,10 @@ Страна = СокрЛП(МассивАдрес[0]); КонецЕсли; Если ЭлементовВМассиве > 1 Тогда - Индекс = СокрЛП(МассивАдрес[1]); + ИндексСтрокой = СокрЛП(МассивАдрес[1]); + Если СтрДлина(ИндексСтрокой) = 6 И СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ИндексСтрокой) Тогда + Индекс = ИндексСтрокой; + КонецЕсли; КонецЕсли; Если ЭлементовВМассиве > 2 Тогда Регион = СокрЛП(МассивАдрес[2]); @@ -1495,10 +1499,47 @@ КонецФункции - //====================================================================================================================== // Структура и поля адреса. +Функция СтруктураАдреса() + + ЭлементыАдреса = Новый Структура; + + ЭлементыАдреса.Вставить("Страна", ""); + ЭлементыАдреса.Вставить("КодСтраны", ""); + ЭлементыАдреса.Вставить("Индекс", ""); + ЭлементыАдреса.Вставить("Регион", ""); + ЭлементыАдреса.Вставить("РегионСокращение", ""); + ЭлементыАдреса.Вставить("Округ", ""); + ЭлементыАдреса.Вставить("ОкругСокращение", ""); + ЭлементыАдреса.Вставить("Район", ""); + ЭлементыАдреса.Вставить("РайонСокращение", ""); + ЭлементыАдреса.Вставить("Город", ""); + ЭлементыАдреса.Вставить("ГородСокращение", ""); + ЭлементыАдреса.Вставить("ВнутригРайон", ""); + ЭлементыАдреса.Вставить("ВнутригородскойРайонСокращение", ""); + ЭлементыАдреса.Вставить("НаселенныйПункт", ""); + ЭлементыАдреса.Вставить("НаселенныйПунктСокращение", ""); + ЭлементыАдреса.Вставить("Улица", ""); + ЭлементыАдреса.Вставить("УлицаСокращение", ""); + ЭлементыАдреса.Вставить("Дом",""); + ЭлементыАдреса.Вставить("Корпус", ""); + ЭлементыАдреса.Вставить("Квартира", ""); + ЭлементыАдреса.Вставить("ДополнительнаяТерритория", ""); + ЭлементыАдреса.Вставить("ДополнительнаяТерриторияСокращение", ""); + ЭлементыАдреса.Вставить("ЭлементДополнительнойТерритории", ""); + ЭлементыАдреса.Вставить("ЭлементДополнительнойТерриторииСокращение", ""); + ЭлементыАдреса.Вставить("Здание", Новый Структура("ТипЗдания, Номер")); + ЭлементыАдреса.Вставить("Корпуса", Новый Массив); + ЭлементыАдреса.Вставить("Помещения", Новый Массив); + ЭлементыАдреса.Вставить("КодыКЛАДР", Новый Структура); + ЭлементыАдреса.Вставить("ДополнительныеКоды", Новый Структура); + + Возврат ЭлементыАдреса; + +КонецФункции + // Возвращает флаг того, что переданный адрес - российский. // // Параметры: @@ -1865,6 +1906,13 @@ НоваяСтрока.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(НоваяСтрока.Тип); НоваяСтрока.Вид = Вид; КонецЕсли; + Иначе + НоваяСтрока = Результат.Помещения.Добавить(); + НоваяСтрока.Тип = ДопЭлемент.Номер.Тип; + НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; + НоваяСтрока.Сокращение = ДопЭлемент.Номер.Тип; + НоваяСтрока.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации("2000"); + НоваяСтрока.Вид = 3; КонецЕсли; КонецЕсли; КонецЦикла; @@ -1895,9 +1943,9 @@ Возврат; КонецЕсли; - Запись = XDTOАдрес.Получить(РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Тип) ); + Запись = XDTOАдрес.Получить(РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Тип)); Если Запись = Неопределено Тогда - Запись = XDTOАдрес.ДопАдрЭл.Добавить( ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип) ); + Запись = XDTOАдрес.ДопАдрЭл.Добавить( ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); Запись.Номер = ФабрикаXDTO.Создать(Запись.Свойства().Получить("Номер").Тип); Запись.Номер.Значение = Значение; @@ -1906,7 +1954,7 @@ КодТипа = Тип; КонецЕсли; Запись.Номер.Тип = КодТипа - Иначе + Иначе Запись.Значение = Значение; КонецЕсли; @@ -2634,9 +2682,9 @@ КонецЕсли; КонецЦикла; Для Каждого ДанныеПомещения Из ЗданияПомещения.Помещения Цикл - Если СтрДлина(ДанныеПомещения.Значение) > 12 Тогда + Если СтрДлина(ДанныеПомещения.Значение) > 50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, ДанныеПомещения.ПутьXPath, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение поля ""%1"" должно быть короче 12 символов.'"), ДанныеПомещения.Тип), ДанныеПомещения.Тип); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение поля ""%1"" должно быть короче 50 символов.'"), ДанныеПомещения.Тип), ДанныеПомещения.Тип); КонецЕсли; КонецЦикла; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl index c048fd717..403154797 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -883,16 +883,16 @@ Если Не ВсеИзмерения Тогда // Что-то регистрируемое - НеУчитывать = "НомерСообщения,Узел,"; + НеУчитывать = "#НомерСообщения#Узел#"; Для Каждого МетаОбщий Из Метаданные.ОбщиеРеквизиты Цикл - НеУчитывать = НеУчитывать + МетаОбщий.Имя + "," ; + НеУчитывать = НеУчитывать + "#" + МетаОбщий.Имя + "#" ; КонецЦикла; Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ " + Мета.ПолноеИмя() + ".Изменения ГДЕ ЛОЖЬ"); ПустойРезультат = Запрос.Выполнить(); Для Каждого КолонкаРезультата Из ПустойРезультат.Колонки Цикл ИмяКолонки = КолонкаРезультата.Имя; - Если СтрНайти(НеУчитывать, ИмяКолонки + ",") = 0 Тогда + Если СтрНайти(НеУчитывать, "#" + ИмяКолонки + "#") = 0 Тогда Строка = Измерения.Добавить(); Строка.Имя = ИмяКолонки; Строка.ТипЗначения = КолонкаРезультата.ТипЗначения; diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html index e754360fd..1b73a3541 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html @@ -1,7 +1,7 @@

    Предназначен для администрирования регламентных и фоновых заданий.

    Ряд действий в программе может выполняться автоматически в фоновом режиме, по определенному расписанию. Такие действия называются регламентными заданиями, например, это ежедневная загрузка курсов валют, регулярная рассылка отчетов, отложенное проведение документов и т.п. Регламентные задания облегчают работу в программе, позволяя перенести выполнение рутинных задач в саму программу, и в то же время они снижают человеческий фактор (например, можно забыть загрузить курсы валют в один из перегруженных другими задачами дней).

    -

    Открывается по команде Регламентные и фоновые задания в разделе Администрирование - Поддержка и обслуживание.

    +

    Открывается по команде Регламентные и фоновые задания в разделе Администрирование - Обслуживание - Регламентные операции.

    Список предоставляет следующие возможности: 

    • Регламентные задания;
    • Фоновые задания; @@ -69,5 +69,5 @@
    • Детальный контроль - это анализ списка фоновых заданий (на вкладке Фоновые задания), которые были созданы и выполнены для выполнения регламентного задания.
    • Детальный контроль производится отбором фоновых заданий по интересующему регламентному заданию, и анализом реквизитов фоновых заданий. Следует учитывать, что сведения о выполнении регламентного задания получаются выборкой части сведений о выполнении последнего фонового задания.
    • Отбор фоновых заданий производится только по команде Обновить, поэтому после изменения настройки отбора нужно выполнить эту команду. -
    • Для детального анализа хода выполнения регламентных заданий в клиент-серверном режиме см. отчет Продолжительность работы регламентных заданий из группы отчетов Анализ журнала регистрации, который открывается по соответствующей команде в разделе Администрирование - Поддержка и обслуживание - Отчеты администратора.

    См. также

    +
  • Для детального анализа хода выполнения регламентных заданий в клиент-серверном режиме см. отчет Продолжительность работы регламентных заданий из группы отчетов Анализ журнала регистрации, который открывается по соответствующей команде в разделе Администрирование - Обслуживание - Отчеты администратора.
  • См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html index 616acb6b4..4786cf3d5 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html @@ -1,6 +1,6 @@

    Предназначена для восстановления данных из резервной копии.

    -

    Открывается командой Восстановление из резервной копии раздела Администрирование - Поддержка и обслуживание - Резервное копирование и восстановление.

    +

    Открывается командой Восстановление из резервной копии раздела Администрирование - Обслуживание - Резервное копирование и восстановление.

    В любой момент времени можно восстановить данные из созданной ранее резервной копии. Необходимо учитывать, что все данные в восстановленной информационно базе будут актуальны на момент создания копии. Данные, введенные в программу после создания резервной копии, будут отсутствовать в восстановленной ИБ.

    Восстановление данных

    • С помощью кнопки  Выбрать укажите путь к файлу с резервной копией, из которого будет восстановлена информационная база (поле обязательно для заполнения).  diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index 687ccd290..a38297acc 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -326,7 +326,7 @@ СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, ПутьКПрограммеЗапуска, ИмяГлавногоФайлаСкрипта, РезервноеКопированиеИБКлиент.СтрокаUnicode(ПарольАдминистратораИБ)); - ЗапуститьПриложение(СтрокаЗапуска); + ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаЗапуска); ЗавершитьРаботуСистемы(Ложь); diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html index 3a6b1c86c..af27028ab 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html @@ -1,7 +1,7 @@

      Предназначена для создания резервной копии информационной базы.

      Рекомендуется создавать резервные копии перед любой операцией в программе, которая может необратимо изменить большие объемы данных, например, перед групповым изменением реквизитов объектов программы. В этом случае необходимо выполнить резервное копирование в ручном режиме.

      -

      Открывается по команде Создание резервной копии из раздела Администрирование - Поддержка и обслуживание - Резервное копирование.

      +

      Открывается по команде Создание резервной копии из раздела Администрирование - Обслуживание - Резервное копирование и восстановление.

      Создание резервной копии

      • В верхней части окна выводится информация о том, когда последний раз выполнялось резервное копирование.
      • С помощью кнопки  Выбрать в поле Каталог для сохранения резервной копии (обязательное поле для заполнения) укажите папку, в которую программа сохранит резервную копию информационной базы. Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель. @@ -14,5 +14,5 @@
      • Если программе не удалось принудительно отключить сеансы, и администратором также не были предприняты какие-либо действия, то резервное копирование может не состояться. В этом случае программа выводит предупреждение, что резервное копирование не было проведено, и список сеансов, которые не удалось завершить (например, Конфигуратор).

      Запуск программы в случае ошибок во время резервного копирования

      • Перед началом резервного копирования программа выводит сообщение с рекомендациями по немедленному запуску. -
      • Для того, чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /CРазрешитьРаботуПользователей /UC РезервноеКопирование.

      См. также:

      +
    • Для того, чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /CРазрешитьРаботуПользователей /UC РезервноеКопирование.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl index 6d0ae92f0..b31041e02 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl @@ -189,7 +189,7 @@ Процедура ИмяФайлаРезервнойКопииОткрытие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ЗапуститьПриложение(ИмяФайлаРезервнойКопии); + ОбщегоНазначенияКлиент.ОткрытьПроводник(ИмяФайлаРезервнойКопии); КонецПроцедуры @@ -549,7 +549,7 @@ СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, ПутьКПрограммеЗапуска, ИмяГлавногоФайлаСкрипта, РезервноеКопированиеИБКлиент.СтрокаUnicode(ПарольАдминистратораИБ)); - ЗапуститьПриложение(СтрокаЗапуска); + ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаЗапуска); ЗавершитьРаботуСистемы(Ложь); diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl index 4022bbb78..c0d4185e1 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl @@ -511,7 +511,7 @@ ЗаполнитьЗначенияСвойств(РезультатВыполненияОбновления, СостояниеРегистрации); ВыполнитьОбработкуОповещения(ОбработкаЗавершения, РезультатВыполненияОбновления); Иначе - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗаданий", 5); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьПроцедурыЗаполненияОтложенныхОбработчиков", 5); КонецЕсли; КонецПроцедуры @@ -597,25 +597,25 @@ // Снятие блокировки информационной базы и выполнение регистрации на плане обмена. ОбновлениеИнформационнойБазыСлужебный.РазблокироватьИБ(БлокировкаИБ); - Возврат ПроверкаЗапускФоновыхЗаданий(); + Возврат ЗапуститьПроцедурыЗаполненияОтложенныхОбработчиков(); КонецФункции &НаКлиенте -Процедура Подключаемый_ПроверитьВыполнениеЗаданий() +Процедура Подключаемый_ПроверитьПроцедурыЗаполненияОтложенныхОбработчиков() - Результат = ПроверкаЗапускФоновыхЗаданий(); + Результат = ПроверитьПроцедурыЗаполненияОтложенныхОбработчиков(); Если Результат.Статус <> "Выполняется" Тогда ЗаполнитьЗначенияСвойств(РезультатВыполненияОбновления, Результат); ВыполнитьОбработкуОповещения(ОбработкаЗавершения, РезультатВыполненияОбновления); - ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗаданий"); + ОтключитьОбработчикОжидания("Подключаемый_ПроверитьПроцедурыЗаполненияОтложенныхОбработчиков"); КонецЕсли; КонецПроцедуры &НаСервере -Функция ПроверкаЗапускФоновыхЗаданий() +Функция ЗапуститьПроцедурыЗаполненияОтложенныхОбработчиков() РезультатПроверки = Новый Структура; РезультатПроверки.Вставить("Статус", ""); @@ -623,40 +623,48 @@ РезультатПроверки.Вставить("ПодробноеПредставлениеОшибки", ""); ЕстьАктивныеПотоки = Ложь; - Если ОписаниеПотоков.Количество() = 0 Тогда // первый запуск - // Корректировка количества потоков - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - КоличествоПроцедурЗаполнения = СведенияОбОбновлении.ОписаниеПроцедурЗаполнения.Количество(); - Если КоличествоПроцедурЗаполнения < МаксимальноПотоков Тогда - МаксимальноПотоков = КоличествоПроцедурЗаполнения; - КонецЕсли; + // Корректировка количества потоков + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + КоличествоПроцедурЗаполнения = СведенияОбОбновлении.ОписаниеПроцедурЗаполнения.Количество(); + Если КоличествоПроцедурЗаполнения < МаксимальноПотоков Тогда + МаксимальноПотоков = КоличествоПроцедурЗаполнения; + КонецЕсли; + + Для ТекущийПоток = 1 По МаксимальноПотоков Цикл + Результат = ЗапускЗадания(); - Для ТекущийПоток = 1 По МаксимальноПотоков Цикл - Результат = ЗапускЗадания(); - - ЗаполнитьЗначенияСвойств(РезультатПроверки, Результат); - Если Результат.Статус = "Ошибка" Тогда - ОтменитьЗаданияПриОшибке(); - Возврат РезультатПроверки; - ИначеЕсли Результат.Статус = "Выполняется" Тогда - ЕстьАктивныеПотоки = Истина; - КонецЕсли; - - ОписаниеПотока = Новый Структура; - ОписаниеПотока.Вставить("ИдентификаторЗадания", Результат.ИдентификаторЗадания); - ОписаниеПотока.Вставить("Статус", Результат.Статус); - ОписаниеПотоков.Добавить(ОписаниеПотока); - КонецЦикла; - - Если ЕстьАктивныеПотоки Тогда - РезультатПроверки.Статус = "Выполняется"; - Иначе - РезультатПроверки.Статус = "Выполнено"; - ОбновлениеИнформационнойБазыСлужебный.ОтметитьРегистрациюОтложенныхОбработчиковОбновления(); + ЗаполнитьЗначенияСвойств(РезультатПроверки, Результат); + Если Результат.Статус = "Ошибка" Тогда + ОтменитьЗаданияПриОшибке(); + Возврат РезультатПроверки; + ИначеЕсли Результат.Статус = "Выполняется" Тогда + ЕстьАктивныеПотоки = Истина; КонецЕсли; - Возврат РезультатПроверки; + + ОписаниеПотока = Новый Структура; + ОписаниеПотока.Вставить("ИдентификаторЗадания", Результат.ИдентификаторЗадания); + ОписаниеПотока.Вставить("Статус", Результат.Статус); + ОписаниеПотоков.Добавить(ОписаниеПотока); + КонецЦикла; + + Если ЕстьАктивныеПотоки Тогда + РезультатПроверки.Статус = "Выполняется"; + Иначе + РезультатПроверки.Статус = "Выполнено"; + ОбновлениеИнформационнойБазыСлужебный.ОтметитьРегистрациюОтложенныхОбработчиковОбновления(); КонецЕсли; + Возврат РезультатПроверки; + +КонецФункции + +&НаСервере +Функция ПроверитьПроцедурыЗаполненияОтложенныхОбработчиков() + + РезультатПроверки = Новый Структура; + РезультатПроверки.Вставить("Статус", ""); + РезультатПроверки.Вставить("КраткоеПредставлениеОшибки", ""); + РезультатПроверки.Вставить("ПодробноеПредставлениеОшибки", ""); ЗаполнениеДанныхЗавершено = Истина; Для Каждого ЭлементОписаниеПотока Из ОписаниеПотоков Цикл @@ -666,7 +674,7 @@ КонецЕсли; ЗаполнениеДанныхЗавершено = Ложь; - Результат = ПроверкаЗадания(ОписаниеПотока); + Результат = ПроверитьПроцедуруЗаполнения(ОписаниеПотока); Если Результат.Статус = "Ошибка" Тогда ОтменитьЗаданияПриОшибке(); @@ -705,7 +713,7 @@ КонецФункции &НаСервере -Функция ПроверкаЗадания(ОписаниеПотока) +Функция ПроверитьПроцедуруЗаполнения(ОписаниеПотока) Результат = ДлительныеОперации.ОперацияВыполнена(ОписаниеПотока.ИдентификаторЗадания); diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form index 17cf6ca19..364952834 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form @@ -530,9 +530,6 @@ Page auto - - Style.ФонУправляющегоПоля - false
    @@ -694,9 +691,6 @@ Page - - Style.ФонУправляющегоПоля - false @@ -1158,9 +1152,6 @@ Page Vertical - - Style.ФонУправляющегоПоля - false diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html index 3a1d64b6e..45db561a3 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html @@ -2,7 +2,7 @@

    Предназначена для индикации хода и просмотра результатов отложенного обновления ИБ.

    При обновлении версии ИБ в программе предусмотрена возможность часть данных обрабатывать отложенно, во время работы программы, в фоновом режиме. В этом случае документы, которые еще не были обработаны, будут недоступны. При попытке открыть такой документ программа выдает сообщение, что действия с документом временно запрещены, так как не завершен переход на новую версию программы. Некоторые отчеты также могут быть недоступны. Программа при попытке сформировать отчет выдает сообщение, что отчет может содержать некорректные данные, так как не завершен переход на новую версию программы.

    Открывается автоматически при входе в программу после обновления ИБ одновременно с открытием окна Описание изменений программы (Что нового в конфигурации).

    -

    Сведения о результатах отложенного обновления версии программы также открыть из раздела Администрирование - Поддержка и обслуживание - Результаты обновления программы по команде Результаты обновления и дополнительная обработка данных, а также из окна Что нового в конфигурации, перейдя по ссылке Необходимо выполнить дополнительные процедуры обработки данных. После начала выполнения ссылка меняет значение на Выполняются дополнительные процедуры обработки данных.

    +

    Сведения о результатах отложенного обновления версии программы также открыть из раздела Администрирование - Обслуживание - Результаты обновления программы по команде Результаты обновления и дополнительная обработка данных, а также из окна Что нового в конфигурации, перейдя по ссылке Необходимо выполнить дополнительные процедуры обработки данных. После начала выполнения ссылка меняет значение на Выполняются дополнительные процедуры обработки данных.

    Информация о проведенном обновлении ИБ

    • Указывается, на какую версию проведено обновление, дата и время обновления, длительность процесса обновления.

    Просмотр журнала регистрации

    • Перейдите по ссылке Техническая информация о результатах обновления, для того чтобы просмотреть события обновления ИБ в журнале регистрации.

    Выполнение процедур обработки данных

    diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl index abc08d710..4ca24d008 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl @@ -524,7 +524,6 @@ Элементы.СтатусОбновления.Видимость = Ложь; Элементы.ПодсказкаГдеНайтиЭтуФорму.Видимость = Ложь; КонецЕсли; - КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html index f9a14dbb5..6a5f492a7 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html @@ -1,6 +1,6 @@

    Предназначен для просмотра дополнительных процедур обработки данных, которые проходят после обновления версии отложенно, в фоновом режиме.

    -

    Список можно открыть, перейдя по соответствующей ссылке из окна Результаты обновления программы, в которое можно перейти по команде Результаты обновления и дополнительная обработка данных раздела Администрирование - Поддержка и обслуживание.

    +

    Список можно открыть, перейдя по соответствующей ссылке из окна Результаты обновления программы, в которое можно перейти по команде Результаты обновления и дополнительная обработка данных раздела Администрирование - Обслуживание - Результаты обновления программы.

    В списке выводится:

    • Процедура обработки данных - наименование процедуры дополнительной обработки данных и ее подробное описание.
      diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl index f7f78bd90..f0c1b25a4 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl @@ -318,12 +318,17 @@ КонецПроцедуры -&НаСервере +&НаКлиенте Процедура ПриостановитьВыполнениеОтложенногоОбработчика(Результат, ПроцедураОбновления) Экспорт Если Результат = "Нет" Тогда Возврат; КонецЕсли; + ПриостановитьВыполнениеОтложенногоОбработчикаНаСервере(ПроцедураОбновления); +КонецПроцедуры + +&НаСервере +Процедура ПриостановитьВыполнениеОтложенногоОбработчикаНаСервере(ПроцедураОбновления) НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html index c428c74d1..ec0153f6f 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html @@ -25,4 +25,4 @@
      • После успешного завершения обновления версии программы можно просмотреть описание изменений и улучшений в новой версии (окно Что нового в конфигурации), перейти к журналу регистрации, чтобы ознакомиться с техническими событиями, возникшими в ходе процесса обновления, а также запустить, а затем проконтролировать ход отложенной обработки данных (если она предусмотрена в этой версии программы). В дальнейшем окно Что нового можно также открыть в разделе Главное.

      Особенности и преимущества отложенного обновления ИБ

      • В клиент-серверном варианте работы переход на новую версию программы может предусматривать дополнительную обработку данных, которая в целях сокращения времени простоя выполняется в фоновом режиме. При этом пользователи могут начинать свою работу в программе, не дожидаясь завершения этой обработки. В период ее выполнения часть функций программы может быть временно недоступна, так как еще не полностью завершен переход на новую версию.
      • В этом случае документы, которые еще не были обработаны, будут недоступны. При попытке открыть такой документ программа выдает сообщение, что действия с документами временно запрещены, так как не завершен переход на новую версию программы. Некоторые отчеты также могут быть недоступны. Программа при попытке сформировать отчет выдает сообщение, что отчет может содержать некорректные данные, так как не завершен переход на новую версию программы.

      Контроль процесса отложенного обновления

      -
      • В тех случаях, когда переход на новую версию программы предусматривает фоновую отложенную обработку данных, с ходом выполнения отложенных процедур обновления версии программы администратор может ознакомиться выполнив команду Результаты обновления и дополнительная обработка данных раздела Администрирование - Поддержка и обслуживание или по ссылке Выполняются дополнительные процедуры обработки данных в окне Что нового в конфигурации.
      \ No newline at end of file +
      • В тех случаях, когда переход на новую версию программы предусматривает фоновую отложенную обработку данных, с ходом выполнения отложенных процедур обновления версии программы администратор может ознакомиться, выполнив команду Результаты обновления и дополнительная обработка данных раздела Администрирование - Обслуживание - Результаты обновления программы, а также по ссылке Выполняются дополнительные процедуры обработки данных в окне Что нового в конфигурации.
      \ No newline at end of file diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl index b04575265..99378f66d 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl @@ -264,10 +264,6 @@ Результат = РезультатСканирования(); - Если ТаблицаФайлов.Количество() = 0 Тогда - Возврат; - КонецЕсли; - Для Каждого Строка Из ТаблицаФайлов Цикл ПараметрыВыполнения.МассивФайловКопия.Добавить(Новый Структура("ПутьКФайлу", Строка.ПутьКФайлу)); КонецЦикла; @@ -868,11 +864,13 @@ СтрокаТаблицы.АдресКартинки = АдресКартинки; КонецЕсли; - Если ТаблицаФайлов.Количество() > 1 И Элементы.ТаблицаФайлов.Видимость = Ложь Тогда + Если ТолькоОдинФайл Тогда + Элементы.ФормаСканироватьЕще.Видимость = (ТаблицаФайлов.Количество() = 0); + ИначеЕсли ТаблицаФайлов.Количество() > 1 И Элементы.ТаблицаФайлов.Видимость = Ложь Тогда Элементы.ТаблицаФайлов.Видимость = Истина; Элементы.ФормаПринятьВсеКакОдинФайл.Видимость = Истина; Элементы.ФормаПринятьВсеКакОдинФайл.КнопкаПоУмолчанию = Истина; - Элементы.ФормаПринятьВсеКакОтдельныеФайлы.Видимость = НЕ ТолькоОдинФайл; + Элементы.ФормаПринятьВсеКакОтдельныеФайлы.Видимость = Истина; Элементы.Сохранить.Видимость = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index d0aad2290..e58095e18 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -182,11 +182,9 @@ &НаКлиенте Процедура ПередЗакрытиемЗавершение(Знач РезультатВопроса = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт - // Процедура вызывается при положительном ответе на вопрос. // Закрываем форму с сохранением данных. ЗаписатьИЗакрыть(Неопределено); - КонецПроцедуры &НаКлиенте @@ -838,7 +836,7 @@ &НаСервере Процедура ОтменитьУтвержденноеСопоставлениеНаСервере(Отбор) - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(Объект.УзелИнформационнойБазы) Тогда + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(Объект.УзелИнформационнойБазы) Тогда ОтборПубличныеИдентификаторы = Новый Структура("УзелИнформационнойБазы, Идентификатор, Ссылка", Объект.УзелИнформационнойБазы, Отбор.УникальныйИдентификаторПриемника, diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index 23c6c7568..3ba829161 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -89,7 +89,7 @@ Для Каждого СтрокаТаблицы Из ТаблицаНеутвержденныхСвязей Цикл - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда Если Строка(СтрокаТаблицы.УникальныйИдентификаторИсточника.УникальныйИдентификатор()) = СтрокаТаблицы.УникальныйИдентификаторПриемника ИЛИ Не ЗначениеЗаполнено(СтрокаТаблицы.УникальныйИдентификаторПриемника) Тогда @@ -553,7 +553,7 @@ |; |"; - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда ТекстЗапроса = ТекстЗапроса + " |//////////////////////////////////////////////////////////////////////////////// {ТаблицаРегистраСоответствияОбъектовИнформационныхБаз} |ВЫБРАТЬ @@ -613,7 +613,7 @@ |; |"; - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда ТекстЗапроса = ТекстЗапроса + " |//////////////////////////////////////////////////////////////////////////////// {ТаблицаСопоставленныхОбъектовИсточникаПоРегистру} |ВЫБРАТЬ @@ -1207,7 +1207,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ИсточникПолеNN, ПриемникПолеNN,")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоСсылке_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаПриемника.# КАК ПриемникПолеNN, ТаблицаИсточника.# КАК ИсточникПолеNN,")); - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ВЫРАЗИТЬ(ЕСТЬNULL(СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника, ТаблицаПриемника.Ссылка) КАК [ИмяТаблицыПриемника]).# КАК ПриемникПолеNN, ТаблицаИсточника.# КАК ИсточникПолеNN,")); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ВЫРАЗИТЬ(СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника КАК [ИмяТаблицыПриемника]).# КАК ПриемникПолеNN, ТаблицаИсточника.# КАК ИсточникПолеNN,")); diff --git a/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html b/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html index dd983c84f..d28eaf49b 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html +++ b/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html @@ -1,5 +1,5 @@ - -

      Предназначена для вывода списка текущих дел пользователя на рабочий стол.

      + +

      Предназначена для вывода списка текущих дел пользователя на рабочий стол.

      Программа позволяет выводить список текущих дел пользователя на рабочем столе: новые письма, задачи, заявки, несогласованные заказы и т.п. Список дел может включать в себя важные и обычные дела, однострочные и многострочные, с количественными показателями и без. Список дел сгруппирован по разделам командного интерфейса, предусмотрена возможность настраивать видимость и порядок отображения, автоматическое обновление через заданный интервал. Важные дела выделяются цветом.

      Дела отображаются в виде ссылок, перейдя по которым, можно открыть соответствующие списки, документы или другие объекты программы.

      С помощью кнопки Настроить в нижней части списка текущих дел можно управлять списком дел и разделов.

      diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index 07b3fd544..ca3f73167 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -340,11 +340,14 @@ ДополнитьСообщениеОбОшибке(ТекстОшибки); Возврат Ложь; КонецПопытки; - + ПодстрокаТемыДляПоиска = ВРег(СтрЗаменить(СокрЛП(ШаблонИмениФайлаСообщения),"Message_","")); Для Каждого ПочтовоеСообщение Из НаборСообщений Цикл Если ВРег(СокрЛП(ПочтовоеСообщение.Тема)) <> ВРег(СокрЛП(ТемаСообщения)) Тогда - Продолжить; + // Возможно, имя сообщения в формате Message_[префикс]_УИД1_УИД2 + Если СтрНайти(ВРег(СокрЛП(ПочтовоеСообщение.Тема)), ПодстрокаТемыДляПоиска) = 0 Тогда + Продолжить; + КонецЕсли; КонецЕсли; НоваяСтрока = ТаблицаСообщенийОбмена.Добавить(); @@ -390,6 +393,22 @@ ДвоичныеДанные = НаборСообщений[0].Вложения.Получить(ШаблонИмениФайлаСообщения+".xml"); ФайлЗапакован = Ложь; КонецЕсли; + + // Возможно, имя сообщения в формате Message_[префикс]_УИД1_УИД2 + ФайлЗапакован = Ложь; + ШаблонПоиска = СтрЗаменить(ШаблонИмениФайлаСообщения, "Message_",""); + Для Каждого ТекВложение Из НаборСообщений[0].Вложения Цикл + Если СтрНайти(ТекВложение.Ключ, ШаблонПоиска) > 0 Тогда + ДвоичныеДанные = ТекВложение.Значение; + Если СтрЗаканчиваетсяНа(ТекВложение.Ключ,".zip") > 0 Тогда + ФайлЗапакован = Истина; + КонецЕсли; + // Перепишем точный шаблон имени файла как имя вложения без расширения. + СтруктураИмениВложенногоФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ТекВложение.Ключ,Ложь); + ШаблонИмениФайлаСообщения = СтруктураИмениВложенногоФайла.ИмяБезРасширения; + Прервать; + КонецЕсли; + КонецЦикла; Если ДвоичныеДанные = Неопределено Тогда ПолучитьСообщениеОбОшибке(109); @@ -422,9 +441,22 @@ Файл = Новый Файл(ИмяФайлаСообщенияОбмена()); Если Не Файл.Существует() Тогда - - ПолучитьСообщениеОбОшибке(5); - Возврат Ложь; + // Возможно, имя архива не соответствует имени файла внутри. + СтруктураИмениФайлаСообщения = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаСообщенияОбмена(),Ложь); + + Если ШаблонИмениФайлаСообщения <> СтруктураИмениФайлаСообщения.ИмяБезРасширения Тогда + МассивРаспакованныхФайлов = НайтиФайлы(ИмяКаталогаСообщенияОбмена(), "*.xml", Ложь); + Если МассивРаспакованныхФайлов.Количество() > 0 Тогда + РаспакованныйФайл = МассивРаспакованныхФайлов[0]; + ПереместитьФайл(РаспакованныйФайл.ПолноеИмя,ИмяФайлаСообщенияОбмена()); + Иначе + ПолучитьСообщениеОбОшибке(5); + Возврат Ложь; + КонецЕсли; + Иначе + ПолучитьСообщениеОбОшибке(5); + Возврат Ложь; + КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index e0fb392a0..a91f0e6b8 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -343,8 +343,9 @@ ТаблицаФайловСообщенийОбмена = Новый ТаблицаЗначений; ТаблицаФайловСообщенийОбмена.Колонки.Добавить("Файл", Новый ОписаниеТипов("Файл")); ТаблицаФайловСообщенийОбмена.Колонки.Добавить("ВремяИзменения"); + ШаблонИмениФайлаСообщенияДляПоиска = СтрЗаменить(ШаблонИмениФайлаСообщения, "Message", "Message*"); - МассивНайденныхФайлов = НайтиФайлы(ИмяКаталогаОбменаИнформацией(), ШаблонИмениФайлаСообщения + ".*", Ложь); + МассивНайденныхФайлов = НайтиФайлы(ИмяКаталогаОбменаИнформацией(), ШаблонИмениФайлаСообщенияДляПоиска + ".*", Ложь); Для Каждого ТекущийФайл Из МассивНайденныхФайлов Цикл @@ -370,7 +371,6 @@ СтрокаТаблицы = ТаблицаФайловСообщенийОбмена.Добавить(); СтрокаТаблицы.Файл = ТекущийФайл; СтрокаТаблицы.ВремяИзменения = ТекущийФайл.ПолучитьВремяИзменения(); - КонецЦикла; Если ТаблицаФайловСообщенийОбмена.Количество() = 0 Тогда @@ -382,7 +382,7 @@ ДополнитьСообщениеОбОшибке(СтрокаСообщения); СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1"" или ""%2""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщения + ".xml", ШаблонИмениФайлаСообщения + ".zip"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщенияДляПоиска + ".xml", ШаблонИмениФайлаСообщенияДляПоиска + ".zip"); ДополнитьСообщениеОбОшибке(СтрокаСообщения); Возврат Ложь; @@ -393,8 +393,13 @@ // Получаем из таблицы самый "свежий" файл сообщения обмена. ФайлВходящегоСообщения = ТаблицаФайловСообщенийОбмена[0].Файл; - ФайлЗапакован = (ВРег(ФайлВходящегоСообщения.Расширение) = ".ZIP"); + Если НЕ СтрНачинаетсяС(ФайлВходящегоСообщения.Имя, ШаблонИмениФайлаСообщения) Тогда + // Файл не полностью соответствует шаблону. Надо переназначить шаблон для корректной работы. + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлВходящегоСообщения.Имя,Ложь); + ШаблонИмениФайлаСообщения = СтруктураИмениФайла.ИмяБезРасширения; + КонецЕсли; + Если ФайлЗапакован Тогда @@ -418,9 +423,23 @@ Файл = Новый Файл(ИмяФайлаСообщенияОбмена()); Если Не Файл.Существует() Тогда - - ПолучитьСообщениеОбОшибке(7); - Возврат Ложь; + // Возможно, имя архива не соответствует имени файла внутри. + СтруктураИмениФайлаАрхива = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлВходящегоСообщения.Имя,Ложь); + СтруктураИмениФайлаСообщения = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаСообщенияОбмена(),Ложь); + + Если СтруктураИмениФайлаАрхива.ИмяБезРасширения <> СтруктураИмениФайлаСообщения.ИмяБезРасширения Тогда + МассивРаспакованныхФайлов = НайтиФайлы(ИмяКаталогаСообщенияОбмена(), "*.xml", Ложь); + Если МассивРаспакованныхФайлов.Количество() > 0 Тогда + РаспакованныйФайл = МассивРаспакованныхФайлов[0]; + ПереместитьФайл(РаспакованныйФайл.ПолноеИмя,ИмяФайлаСообщенияОбмена()); + Иначе + ПолучитьСообщениеОбОшибке(7); + Возврат Ложь; + КонецЕсли; + Иначе + ПолучитьСообщениеОбОшибке(7); + Возврат Ложь; + КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index ed9c24643..3aa8c11ef 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -350,9 +350,10 @@ ДополнитьСообщениеОбОшибке(ТекстОшибки); Возврат Ложь; КонецПопытки; - + ШаблонИмениФайлаСообщенияДляПоиска = СтрЗаменить(ШаблонИмениФайлаСообщения, "Message", "Message*"); + Попытка - МассивНайденныхФайлов = FTPСоединение.НайтиФайлы(КаталогНаFTPСервере, ШаблонИмениФайлаСообщения + ".*", Ложь); + МассивНайденныхФайлов = FTPСоединение.НайтиФайлы(КаталогНаFTPСервере, ШаблонИмениФайлаСообщенияДляПоиска + ".*", Ложь); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ПолучитьСообщениеОбОшибке(104); @@ -436,9 +437,23 @@ Файл = Новый Файл(ИмяФайлаСообщенияОбмена()); Если Не Файл.Существует() Тогда + // Возможно, имя архива не соответствует имени файла внутри. + СтруктураИмениФайлаАрхива = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлВходящегоСообщения.Имя,Ложь); + СтруктураИмениФайлаСообщения = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаСообщенияОбмена(),Ложь); - ПолучитьСообщениеОбОшибке(5); - Возврат Ложь; + Если СтруктураИмениФайлаАрхива.ИмяБезРасширения <> СтруктураИмениФайлаСообщения.ИмяБезРасширения Тогда + МассивРаспакованныхФайлов = НайтиФайлы(ИмяКаталогаСообщенияОбмена(), "*.xml", Ложь); + Если МассивРаспакованныхФайлов.Количество() > 0 Тогда + РаспакованныйФайл = МассивРаспакованныхФайлов[0]; + ПереместитьФайл(РаспакованныйФайл.ПолноеИмя,ИмяФайлаСообщенияОбмена()); + Иначе + ПолучитьСообщениеОбОшибке(7); + Возврат Ложь; + КонецЕсли; + Иначе + ПолучитьСообщениеОбОшибке(7); + Возврат Ложь; + КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html index 83f4bb065..56154cf4f 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html @@ -1,7 +1,7 @@

      Предназначена для окончательного удаления помеченных объектов.

      В процессе работы с программой можно помечать на удаление объекты (например, ошибочно введенные). Помеченные на удаление объекты могут быть безвозвратно удалены пользователем с административными правами.

      -

      Команда Удаление помеченных объектов находится в разделе Администрирование - Поддержка и обслуживание.

      +

      Команда Удаление помеченных объектов находится в разделе Администрирование - Обслуживание.

      Удаление выполняется с контролем ссылочной целостности. Это значит, что если на тот или иной объект программы (документ, элемент справочника и т.д.) ссылаются другие объекты, то удаление объекта не будет выполнено. Тем не менее, следует помнить, что удаление помеченных объектов - необратимая операция.

      Удаление ранее помеченных объектов можно выполнить двумя способами, которые можно выбрать с помощью переключателя:

      • Автоматическое удаление всех объектов - производится попытка автоматического удаления всех объектов, помеченных на удаление. @@ -22,5 +22,10 @@
      •  Пометить на удаление все связанные с удаляемым элементом объекты (в правой части списка - Места использования),
      •  Снять пометку на удаление с объекта, помеченного на удаление.
    • После этого нажмите Повторить удаление, для того чтобы попытаться удалить объекты еще раз.
    • Нажмите В начало, для того чтобы выбрать другой способ удаления. -
    • Нажмите Закрыть, для того чтобы вернуться в программу без продолжения попыток удаления.

    См. также:

    +
  • Нажмите Закрыть, для того чтобы вернуться в программу без продолжения попыток удаления.
  • Ускорение удаления помеченных объектов

    +
    • Удаление помеченных объектов может занимать длительное время. В это время может наблюдаться существенное замедление работы пользователей. +
    • Рекомендуется выполнять удаление в период наименьшей активности пользователей. +
    • Предусмотрена возможность Заблокировать всю работу в программе и ускорить удаление с помощью соответствующего флажка.

    Настройка расписания автоматического удаления

    +
    • Включите флажок, для того чтобы Автоматически удалять помеченные объекты по расписанию. +
    • После этого становится доступной ссылка Настроить расписание. После того, как расписание настроено, оно отображается под флажком.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index 9a9048015..118fe2768 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -529,7 +529,7 @@ // Возвращает объект ОписаниеТипов, содержащий указанный тип. // // Параметры: -// ЗначениеТипа - Строка или Тип - Содержит имя типа или значение типа Тип. +// ЗначениеТипа - Строка, Тип - Содержит имя типа или значение типа Тип. // // Возвращаемое значение: // ОписаниеТипов - объект Описание типов. @@ -559,7 +559,7 @@ // Возвращает пустое (дефолтное) значение указанного типа. // // Параметры: -// Тип - Строка или Тип - имя типа или значение типа Тип. +// Тип - Строка, Тип - имя типа или значение типа Тип. // // Возвращаемое значение: // Произвольный - Пустое значение указанного типа. @@ -582,15 +582,15 @@ // Осуществляет простой поиск объекта информационной базы по указанному свойству. // // Параметры: -// Менеджер - СправочникМенеджер, ДокументМенеджер и т.д. Менеджер искомого объекта; +// Менеджер - СправочникМенеджер, ДокументМенеджер - Менеджер искомого объекта; // Свойство - Строка - свойство, по которому осуществляем поиск: Имя, Код, // Наименование или Имя индексируемого реквизита. -// Значение - Строка, Число, Дата и т.п. Значение свойства, по которому ищем объект. -// НайденныйОбъектПоУникальномуИдентификатору - СправочникОбъект, ДокументОбъект и т.д. Объект информационной базы, +// Значение - Строка, Число, Дата - Значение свойства, по которому ищем объект. +// НайденныйОбъектПоУникальномуИдентификатору - СправочникОбъект, ДокументОбъект - Объект информационной базы, // который был найден по уникальному идентификатору в ходе выполнения функции. -// ОбщаяСтруктураСвойств - структура, содержащая свойства искомого объекта. -// ОбщиеСвойстваПоиска - Структура, содержащая общие свойства поиска. -// СтрокаЗапросаПоискаПоУникальномуИдентификатору - Строка. +// ОбщаяСтруктураСвойств - структура - свойства искомого объекта. +// ОбщиеСвойстваПоиска - Структура - общие свойства поиска. +// СтрокаЗапросаПоискаПоУникальномуИдентификатору - Строка - текст запроса для поиска по уникальному идентификатору. // // Возвращаемое значение: // Произвольный - найденный объект информационной базы. @@ -2038,21 +2038,7 @@ ЗаписатьВФайл(Приемник); - ВременныйФайл = Новый ЧтениеТекста; - Для каждого ИмяВременногоФайла Из СписокВременныхФайлов Цикл - - ВременныйФайл.Открыть(ИмяВременногоФайла, КодировкаТекста.UTF8); - - СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); - Пока СтрокаВременногоФайла <> Неопределено Цикл - ЗаписатьВФайл(СтрокаВременногоФайла); - СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); - КонецЦикла; - - ВременныйФайл.Закрыть(); - - УдалитьФайлы(ИмяВременногоФайла); - КонецЦикла; + ПеренестиДанныеИзВременныхФайлов(СписокВременныхФайлов); ЗаписатьВФайл(""); @@ -2892,6 +2878,81 @@ #КонецОбласти +#Область ПроцедурыИФункцииРаботыСВременнымиФайлами + +Функция ЗаписьТекстаВоВременныйФайл(СписокВременныхФайлов) + + ИмяФайлаЗаписей = ПолучитьИмяВременногоФайла(); + + ВременныйФайлЗаписей = Новый ЗаписьТекста; + + Если БезопасныйРежим() <> Ложь Тогда + УстановитьОтключениеБезопасногоРежима(Истина); + КонецЕсли; + + Попытка + ВременныйФайлЗаписей.Открыть(ИмяФайлаЗаписей, КодировкаТекста.UTF8); + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, + ОписаниеОшибки(), + НСтр("ru = 'Ошибка при создании временного файла для выгрузки данных'")); + ВызватьИсключение; + КонецПопытки; + + // Удаление временных файлов происходит не по месту, + // с помощью УдалитьФайлы(ИмяФайлаЗаписей), а централизованно. + СписокВременныхФайлов.Добавить(ИмяФайлаЗаписей); + + Возврат ВременныйФайлЗаписей; + +КонецФункции + +Функция ЧтениеТекстаИзВременногоФайла(ИмяВременногоФайла) + + ВременныйФайл = Новый ЧтениеТекста; + + Если БезопасныйРежим() <> Ложь Тогда + УстановитьОтключениеБезопасногоРежима(Истина); + КонецЕсли; + + Попытка + ВременныйФайл.Открыть(ИмяВременногоФайла, КодировкаТекста.UTF8); + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, + ОписаниеОшибки(), + НСтр("ru = 'Ошибка при открытии временного файла для переноса данных в файл обмена'")); + ВызватьИсключение; + КонецПопытки; + + Возврат ВременныйФайл; +КонецФункции + +Процедура ПеренестиДанныеИзВременныхФайлов(СписокВременныхФайлов) + + Для Каждого ИмяВременногоФайла Из СписокВременныхФайлов Цикл + ВременныйФайл = ЧтениеТекстаИзВременногоФайла(ИмяВременногоФайла); + + СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); + Пока СтрокаВременногоФайла <> Неопределено Цикл + ЗаписатьВФайл(СтрокаВременногоФайла); + СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); + КонецЦикла; + + ВременныйФайл.Закрыть(); + КонецЦикла; + + Если БезопасныйРежим() <> Ложь Тогда + УстановитьОтключениеБезопасногоРежима(Истина); + КонецЕсли; + + Для Каждого ИмяВременногоФайла Из СписокВременныхФайлов Цикл + УдалитьФайлы(ИмяВременногоФайла); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + #Область ПроцедурыИФункцииРаботыСПротоколомОбмена // Выполняет инициализацию файла для записи событий загрузки/выгрузки данных. @@ -9298,7 +9359,7 @@ КонецЕсли; - ВыгружатьГруппуЧерезФайл = ВыгружатьГруппуЧерезФайл ИЛИ (КоллекцияОбъектов.Количество() > 1000); + ВыгружатьГруппуЧерезФайл = ВыгружатьГруппуЧерезФайл Или (КоллекцияОбъектов.Количество() > 1000); ВыгружатьГруппуЧерезФайл = ВыгружатьГруппуЧерезФайл И (НепосредственноеЧтениеВИБПриемнике = Ложь); Если ВыгружатьГруппуЧерезФайл Тогда @@ -9306,26 +9367,13 @@ ПКГС.НуженУзелXMLПриВыгрузке = Ложь; Если СписокВременныхФайлов = Неопределено Тогда - СписокВременныхФайлов = Новый СписокЗначений(); + СписокВременныхФайлов = Новый Массив; КонецЕсли; - ИмяФайлаЗаписей = ПолучитьИмяВременногоФайла(); - // Удаление временных файлов происходит не по месту, с помощью УдалитьФайлы(ИмяФайлаЗаписей), а централизованно. - СписокВременныхФайлов.Добавить(ИмяФайлаЗаписей); - - ВременныйФайЗаписей = Новый ЗаписьТекста; - Попытка - - ВременныйФайЗаписей.Открыть(ИмяФайлаЗаписей, КодировкаТекста.UTF8); - - Исключение - - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, ОписаниеОшибки(), НСтр("ru = 'Ошибка при создании временного файла для выгрузки данных'")); - - КонецПопытки; + ВременныйФайлЗаписей = ЗаписьТекстаВоВременныйФайл(СписокВременныхФайлов); ИнформацияДляЗаписиВФайл = УзелКоллекцииОбъектов.Закрыть(); - ВременныйФайЗаписей.ЗаписатьСтроку(ИнформацияДляЗаписиВФайл); + ВременныйФайлЗаписей.ЗаписатьСтроку(ИнформацияДляЗаписиВФайл); КонецЕсли; @@ -9457,7 +9505,7 @@ УзелОбъектаКоллекции.ЗаписатьКонецЭлемента(); ИнформацияДляЗаписиВФайл = УзелОбъектаКоллекции.Закрыть(); - ВременныйФайЗаписей.ЗаписатьСтроку(ИнформацияДляЗаписиВФайл); + ВременныйФайлЗаписей.ЗаписатьСтроку(ИнформацияДляЗаписиВФайл); Иначе @@ -9506,8 +9554,8 @@ КонецЕсли; Если ВыгружатьГруппуЧерезФайл Тогда - ВременныйФайЗаписей.ЗаписатьСтроку(""); // закрыть узел - ВременныйФайЗаписей.Закрыть(); // закрыть файл явно + ВременныйФайлЗаписей.ЗаписатьСтроку(""); // закрыть узел + ВременныйФайлЗаписей.Закрыть(); // закрыть файл явно Иначе ПроизвестиЗаписьДанныхВГоловнойУзел(УзелКоллекцииСвойств, СтруктураУзлаСвойств, УзелКоллекцииОбъектов); КонецЕсли; @@ -11181,11 +11229,6 @@ // Считаем количество записанных объектов. КоличествоНайденныхДляЗаписиОбъектов = 0; - // начинаем транзакцию - Если ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена Тогда - НачатьТранзакцию(); - КонецЕсли; - ПоследнийОбъектМетаданных = Неопределено; ПоследняяСтрокаПравилаВыгрузки = Неопределено; @@ -11202,6 +11245,10 @@ ОбъектДляПравилВыгрузки = Неопределено; КонстантыБылиВыгружены = Ложь; + // начинаем транзакцию + Если ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена Тогда + НачатьТранзакцию(); + КонецЕсли; Попытка @@ -11402,7 +11449,6 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПоследняяСтрокаПравилаВыгрузки.Имя, "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; @@ -12945,119 +12991,132 @@ НачатьТранзакцию(); КонецЕсли; + Отказ = Ложь; + Попытка // Включаем правила обмена в файл. ФайлОбмена.ЗаписатьСтроку(мXMLПравила); - РаботаВозможна = ВыполнитьПередачуИнформацииОНачалеОбменаВПриемник(ТекущаяСтрокаДляЗаписи); + Отказ = Не ВыполнитьПередачуИнформацииОНачалеОбменаВПриемник(ТекущаяСтрокаДляЗаписи); - Если Не РаботаВозможна Тогда - ФайлОбмена = Неопределено; - ЗавершитьВедениеПротоколаОбмена(); - мОбработкаДляЗагрузкиДанных = Неопределено; - ДеструкторВнешнейОбработкиОбработчиковСобытий(); - Возврат; - КонецЕсли; - - Если БезопасныйРежим Тогда - УстановитьБезопасныйРежим(Истина); - Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл - УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); - КонецЦикла; - КонецЕсли; - - // Обработчик ПередВыгрузкойДанных - Отказ = Ложь; - Попытка + Если Не Отказ Тогда - Если ФлагРежимОтладкиОбработчиков Тогда + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + + // Обработчик ПередВыгрузкойДанных + Попытка - Если Не ПустаяСтрока(Конвертация.ПередВыгрузкойДанных) Тогда + Если ФлагРежимОтладкиОбработчиков Тогда - Выполнить(ПолучитьСтрокуВызоваОбработчика(Конвертация, "ПередВыгрузкойДанных")); + Если Не ПустаяСтрока(Конвертация.ПередВыгрузкойДанных) Тогда + + Выполнить(ПолучитьСтрокуВызоваОбработчика(Конвертация, "ПередВыгрузкойДанных")); + + КонецЕсли; + + Иначе + + Выполнить(Конвертация.ПередВыгрузкойДанных); КонецЕсли; - Иначе + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОписаниеОшибки(), НСтр("ru = 'ПередВыгрузкойДанных (конвертация)'")); + Отказ = Истина; + КонецПопытки; + + Если Не Отказ Тогда - Выполнить(Конвертация.ПередВыгрузкойДанных); + Если ВыполнитьОбменДаннымиВОптимизированномФормате Тогда + ПередатьИнформациюОТипахВПриемник(); + КонецЕсли; - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОписаниеОшибки(), НСтр("ru = 'ПередВыгрузкойДанных (конвертация)'")); - Отказ = Истина; - КонецПопытки; - - Если Отказ Тогда // Отказ от выгрузки данных - ФайлОбмена = Неопределено; - ЗавершитьВедениеПротоколаОбмена(); - мОбработкаДляЗагрузкиДанных = Неопределено; - ДеструкторВнешнейОбработкиОбработчиковСобытий(); - Возврат; - КонецЕсли; - - Если ВыполнитьОбменДаннымиВОптимизированномФормате Тогда - ПередатьИнформациюОТипахВПриемник(); - КонецЕсли; - - // Нужно параметры передать в приемник. - ПередатьДополнительныеПараметрыВПриемник(); - - ТекстСобытияПослеЗагрузкиПараметров = ""; - Если Конвертация.Свойство("ПослеЗагрузкиПараметров", ТекстСобытияПослеЗагрузкиПараметров) - И Не ПустаяСтрока(ТекстСобытияПослеЗагрузкиПараметров) Тогда - - ЗаписьСобытия = Новый ЗаписьXML; - ЗаписьСобытия.УстановитьСтроку(); - одЗаписатьЭлемент(ЗаписьСобытия, "АлгоритмПослеЗагрузкиПараметров", ТекстСобытияПослеЗагрузкиПараметров); - ЗаписатьВФайл(ЗаписьСобытия); - - КонецЕсли; - - СоответствиеУзловИПравилВыгрузки = Новый Соответствие(); - СтруктураДляУдаленияРегистрацииИзменений = Новый Соответствие(); - - ОбработатьПравилаВыгрузки(ТаблицаПравилВыгрузки.Строки, СоответствиеУзловИПравилВыгрузки); - - УдачноВыгруженоПоПланамОбмена = ОбработатьВыгрузкуДляПлановОбмена(СоответствиеУзловИПравилВыгрузки, СтруктураДляУдаленияРегистрацииИзменений); - - Если УдачноВыгруженоПоПланамОбмена Тогда - - ОбработатьИзменениеРегистрацииДляУзловОбмена(СтруктураДляУдаленияРегистрацииИзменений); - - КонецЕсли; - - // Обработчик ПослеВыгрузкиДанных - Попытка - - Если ФлагРежимОтладкиОбработчиков Тогда + // Нужно параметры передать в приемник. + ПередатьДополнительныеПараметрыВПриемник(); - Если Не ПустаяСтрока(Конвертация.ПослеВыгрузкиДанных) Тогда + ТекстСобытияПослеЗагрузкиПараметров = ""; + Если Конвертация.Свойство("ПослеЗагрузкиПараметров", ТекстСобытияПослеЗагрузкиПараметров) + И Не ПустаяСтрока(ТекстСобытияПослеЗагрузкиПараметров) Тогда - Выполнить(ПолучитьСтрокуВызоваОбработчика(Конвертация, "ПослеВыгрузкиДанных")); + ЗаписьСобытия = Новый ЗаписьXML; + ЗаписьСобытия.УстановитьСтроку(); + одЗаписатьЭлемент(ЗаписьСобытия, "АлгоритмПослеЗагрузкиПараметров", ТекстСобытияПослеЗагрузкиПараметров); + ЗаписатьВФайл(ЗаписьСобытия); КонецЕсли; - Иначе + СоответствиеУзловИПравилВыгрузки = Новый Соответствие(); + СтруктураДляУдаленияРегистрацииИзменений = Новый Соответствие(); - Выполнить(Конвертация.ПослеВыгрузкиДанных); + ОбработатьПравилаВыгрузки(ТаблицаПравилВыгрузки.Строки, СоответствиеУзловИПравилВыгрузки); - КонецЕсли; + УдачноВыгруженоПоПланамОбмена = ОбработатьВыгрузкуДляПлановОбмена(СоответствиеУзловИПравилВыгрузки, СтруктураДляУдаленияРегистрацииИзменений); + + Если УдачноВыгруженоПоПланамОбмена Тогда + + ОбработатьИзменениеРегистрацииДляУзловОбмена(СтруктураДляУдаленияРегистрацииИзменений); + + КонецЕсли; + + // Обработчик ПослеВыгрузкиДанных + Попытка + + Если ФлагРежимОтладкиОбработчиков Тогда + + Если Не ПустаяСтрока(Конвертация.ПослеВыгрузкиДанных) Тогда + + Выполнить(ПолучитьСтрокуВызоваОбработчика(Конвертация, "ПослеВыгрузкиДанных")); + + КонецЕсли; + + Иначе + + Выполнить(Конвертация.ПослеВыгрузкиДанных); + + КонецЕсли; - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОписаниеОшибки(), НСтр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); - КонецПопытки; + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОписаниеОшибки(), НСтр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); + КонецПопытки; + + ПровестиЗаписьНеЗаписанныхОбъектов(); + + Если ТранзакцияАктивна() Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; - ПровестиЗаписьНеЗаписанныхОбъектов(); - - Если ИспользоватьТранзакции Тогда - ЗафиксироватьТранзакцию(); + Если Отказ Тогда + + Если ТранзакцияАктивна() Тогда + ОтменитьТранзакцию(); + КонецЕсли; + + ВыполнитьПередачуИнформацииПриЗавершенииПередачиДанных(); + + ЗавершитьВедениеПротоколаОбмена(); + мОбработкаДляЗагрузкиДанных = Неопределено; + ФайлОбмена = Неопределено; + + ДеструкторВнешнейОбработкиОбработчиковСобытий(); + КонецЕсли; Исключение + Если ТранзакцияАктивна() Тогда + ОтменитьТранзакцию(); + КонецЕсли; + СтрокаОшибки = ОписаниеОшибки(); ЗаписатьВПротоколВыполнения(ПодставитьПараметрыВСтроку( @@ -13068,25 +13127,10 @@ ЗавершитьВедениеПротоколаОбмена(); ЗакрытьФайл(); мОбработкаДляЗагрузкиДанных = Неопределено; - - Если ИспользоватьТранзакции Тогда - ОтменитьТранзакцию(); - КонецЕсли; - - Возврат; - + КонецПопытки; - Если Отказ Тогда // Отказ от записи файла данных. - - ВыполнитьПередачуИнформацииПриЗавершенииПередачиДанных(); - - ЗавершитьВедениеПротоколаОбмена(); - мОбработкаДляЗагрузкиДанных = Неопределено; - ФайлОбмена = Неопределено; - - ДеструкторВнешнейОбработкиОбработчиковСобытий(); - + Если Отказ Тогда Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html index b1aca9c33..1e6d24244 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html @@ -2,7 +2,7 @@

    Предназначена для администрирования итогов регистров накопления и бухгалтерии, агрегатов оборотных регистров накопления.

    Регистры программы предназначены для хранения и обработки информации, отражающей деятельность предприятия. В регистрах обычно хранится информация об изменении состояний объектов предметной области (документов, справочников) или другая информация, не отражающаяся непосредственно в этих объектах. Например, в регистрах может храниться информация о курсах валют.

    Агрегаты - это специальный механизм, реализованный в оборотных регистрах накопления. Для любого регистра может быть создано несколько агрегатов. Каждый агрегат - это специализированное хранилище, содержащее агрегированные данные регистра в различных разрезах, удобных для формирования отчетов в конкретной информационной базе. Использование агрегатов позволяет значительно сократить время формирования отчетов, что важно для больших информационных баз.

    -

    Открывается по соответствующей команде в разделе Администрирование - Поддержка и обслуживание.

    +

    Открывается по соответствующей команде в разделе Администрирование - Обслуживание - Регламентные операции.

    Управление итогами и агрегатами включает в себя процедуры, связанные с итогами регистров накопления и бухгалтерии, а также агрегатами оборотных регистров накопления. Управление итогами разделяется на два режима:

    • Часто используемые возможности - режим предоставляет простые средства для выполнения наиболее часто используемых действий с итогами регистров. Позволяет "одним нажатием" выполнить наиболее частые действия, возникающие при обслуживании программы.
    • Полные возможности - предоставляет полный доступ к возможностям управления итогами и агрегатами программы. Режим позволяет выполнять все операции как с одним регистром, так и с произвольным списком регистров.

    Для переключения режимов служит ссылка в правом нижнем углу окна. Программа запоминает режим открытия окна.

    @@ -34,7 +34,7 @@

    В списке выводится:

    • Итоги - флажок установлен, если для регистра ведутся итоги, отсутствие флажка означает, что итоги по регистру не рассчитываются;
    • Регистр и режим использования - наименование регистра и, в виде подсказки, режим работы регистра: Просто итоговый регистр (когда у регистра есть остатки), Итоги или Агрегаты (когда у регистра есть только обороты); -
    • Период итогов - дата, по которую рассчитаны итоги регистра (для регистров накопления - на конец предыдущего месяца, для регистров бухгалтерии - на конец текущего месяца); +
    • Период - дата, по которую рассчитаны итоги регистра (для регистров накопления - на конец предыдущего месяца, для регистров бухгалтерии - на конец текущего месяца);
    • Текущие - наличие флажка означает, что для регистра рассчитываются не только общие итоги на указанную дату, но еще и оперативные итоги на дату последнего движения, отсутствие флажка - что оперативные итоги по регистру не рассчитываются. Этот режим имеет смысл применять для регистров, движения которых анализируются в оперативном учете перед проведением документов;
    • Разделение - наличие флажка означает, что для регистра задействован механизм разделителя итогов, который обеспечивает более высокую параллельность работы при записи в регистр.

    Серым цветом отмечены те режимы, которые невозможно изменить при текущем состоянии программы. Переключать режимы можно на вкладке Агрегаты.

    На данной вкладке можно выполнять следующие операции:

    @@ -50,10 +50,9 @@
    с помощью соответствующей кнопки Установить выбранный период рассчитанных итогов,
  • С помощью кнопки Пересчет - пересчитать итоги, пересчитать текущие итоги, пересчитать итоги за выбранный период.
  • Агрегаты

    -

    На вкладке в верхнем списке содержится перечень оборотных регистров накопления, для которых в Конфигураторе заданы агрегаты, а в нижнем списке - перечень этих агрегатов. В списке агрегатов содержится признак использования агрегата и статистическая информация о нем.

    -

    В колонке Регистр кроме наименования регистра выводится информация о режиме использования регистра: Используются данные итогов или Используются данные агрегатов.

    -

    В список попадают только те оборотные регистры накопления, у которых для текущего пользователя установлено право Управление итогами и в Конфигураторе заданы агрегаты.

    -

    На данной вкладке можно выполнять следующие операции:

    +
    • На вкладке в верхнем списке содержится перечень оборотных регистров накопления, для которых в Конфигураторе заданы агрегаты, а в нижнем списке - перечень этих агрегатов. В списке агрегатов содержится признак использования агрегата и статистическая информация о нем. +
    • В колонке Регистр кроме наименования регистра выводится информация о режиме использования регистра: Используются данные итогов или Используются данные агрегатов. +
    • В список попадают только те оборотные регистры накопления, у которых для текущего пользователя установлено право Управление итогами и в Конфигураторе заданы агрегаты.

    На данной вкладке можно выполнять следующие операции:

    • установка Режима использования регистра: итоги или агрегаты,
    • diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form index ed2c0f566..dc4242e01 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form @@ -1,5 +1,113 @@ + + ПанельИнформацииОбОшибках + 1166 + + КартинкаЕстьОшибки + 1168 + true + true + + true + + + КартинкаЕстьОшибкиРасширеннаяПодсказка + 1170 + Label + true + true + + Left + + + + КартинкаЕстьОшибкиКонтекстноеМеню + 1169 + true + + true + true + false + + + CommonPicture.Предупреждение32 + + + + + НадписьЕстьОшибки + 1175 + + <key>ru</key> + <value>В программе выявлены проблемы ведения учета, которые рекомендуется устранить до обновления. +<link Перейти к отчету по проблемам>Перейти к отчету по проблемам</></value> + + true + true + + true + + + НадписьЕстьОшибкиРасширеннаяПодсказка + 1177 + Label + true + true + + Left + + + + НадписьЕстьОшибкиКонтекстноеМеню + 1176 + true + + true + Label + true + false + + + URLProcessing + НадписьВыявленныеПроблемыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Панель информации об ошибках</value> + + true + + ПанельИнформацииОбОшибкахРасширеннаяПодсказка + 1167 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + + Style.ФонУправляющегоПоля + + Auto + Auto + + СтраницыПомощника 1 @@ -2830,11 +2938,13 @@ Form.Command.Далее - Auto true true true UserCmds + + CommonPicture.ЗначокЩита + Auto diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl index 1445dda0c..fd443491c 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl @@ -37,6 +37,8 @@ Элементы.ПанельПочта.Видимость = Ложь; КонецЕсли; + Элементы.ПанельИнформацииОбОшибках.Видимость = ВидимостьПанелиОшибок(); + // Проверяем каждый раз при открытии помощника. КонфигурацияИзменена = КонфигурацияИзменена(); НуженФайлОбновления = Не КонфигурацияИзменена; @@ -82,7 +84,7 @@ Возврат; КонецЕсли; - Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; + Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; ИмяСтраницы = Страницы.ФайлОбновления.Имя; Если Объект.КодЗадачиПланировщика <> 0 И Не ОбновлениеКонфигурацииКлиент.СуществуетЗадачаПланировщика(Объект.КодЗадачиПланировщика) Тогда @@ -245,6 +247,29 @@ КонецПроцедуры +&НаКлиенте +Процедура НадписьВыявленныеПроблемыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонтрольВеденияУчетаКлиент"); + МодульКонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзОбработкиОбновления(ЭтотОбъект, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ВидимостьПанелиОшибок() + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); + СводнаяИнформацияПоВидамПроверки = МодульКонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверки("СистемныеПроверки"); + Возврат СводнаяИнформацияПоВидамПроверки.Количество > 0; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + #КонецОбласти #Область ОбработчикиКомандФормы @@ -293,6 +318,8 @@ ФункцияКнопкиДалее = Истина; // Истина = "Далее", Ложь = "Готово" ФункцияКнопкиЗакрыть = Истина; // Истина = "Отмена", Ложь = "Закрыть" + Элементы.КнопкаДалее.Отображение = ОтображениеКнопки.Текст; + Если НоваяТекущаяСтраница = Страницы.ОбновленияНеОбнаружено Тогда ФункцияКнопкиДалее = Ложь; @@ -346,6 +373,10 @@ ДоступностьКнопкиНазад = Ложь; КонецЕсли; + Если Объект.РежимОбновления = 2 Тогда + Элементы.КнопкаДалее.Отображение = ОтображениеКнопки.КартинкаИТекст; + КонецЕсли; + ИначеЕсли НоваяТекущаяСтраница = Страницы.НеуспешноеОбновление Тогда ФункцияКнопкиДалее = Ложь; diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html b/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html index 4a3686b5c..b628acc49 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html @@ -1,6 +1,6 @@

      Установка обновлений позволяет автоматически устанавливать обновления конфигурации из файла.

      -

      Открывается по команде Установка обновлений раздела Администрирование - Поддержка и обслуживание - Результаты обновления программы.

      +

      Открывается по команде Установка обновлений раздела Администрирование - Обслуживание - Результаты обновления программы.

      Программа позволяет обновлять конфигурацию ИБ в режиме 1С:Предприятия. Обновление производится по требованию или в указанное время.

      Внимание! Помощник не следует использовать, если в программе включена возможность изменения объектов метаданных. В таких случаях рекомендуется выполнять обновление в режиме Конфигуратор.

      На первом шаге выбирается источник установки обновления. Если у Вас уже имеется файл обновления, то помощник позволяет провести обновление с использованием файла поставки обновления (.cfu) или файла поставки конфигурации (.cf) из локального или сетевого каталога. Если файл обновления уже загружен в основную конфигурацию, и она отличается от конфигурации информационной базы, то необходимо указать вариант обновления без использования файла обновления.

      diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt index d789c3027..8a8ed961a 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt @@ -337,7 +337,7 @@ function backupDB() { catch (e) { CollectGarbage(); // предотвращает исключение out of memory log(format("Исключение при создании резервной копии базы: {0}, {1}.", e.name, e.message), true); - log(format("Трассировка:\nКопировали из: {0}\nКопировали в:{1}", BaseFileName, backupFileName), true); + log(format("Трассировка:\nКопировали из: {0}\nКопировали в: {1}", BaseFileName, backupFileName), true); ret = 1; UseRestore = false; } diff --git a/SSL/src/DefinedTypes/КонтекстПроверокВеденияУчета/КонтекстПроверокВеденияУчета.mdo b/SSL/src/DefinedTypes/КонтекстПроверокВеденияУчета/КонтекстПроверокВеденияУчета.mdo new file mode 100644 index 000000000..cb1905f5c --- /dev/null +++ b/SSL/src/DefinedTypes/КонтекстПроверокВеденияУчета/КонтекстПроверокВеденияУчета.mdo @@ -0,0 +1,17 @@ + + + + + + КонтекстПроверокВеденияУчета + + ru + Контекст проверок ведения учета + + + String + + 128 + + + diff --git a/SSL/src/DefinedTypes/ПрисоединенныйФайлОбъект/ПрисоединенныйФайлОбъект.mdo b/SSL/src/DefinedTypes/ПрисоединенныйФайлОбъект/ПрисоединенныйФайлОбъект.mdo index e2c0e25dc..24b05605f 100644 --- a/SSL/src/DefinedTypes/ПрисоединенныйФайлОбъект/ПрисоединенныйФайлОбъект.mdo +++ b/SSL/src/DefinedTypes/ПрисоединенныйФайлОбъект/ПрисоединенныйФайлОбъект.mdo @@ -10,6 +10,7 @@ CatalogObject.СообщениеSMSПрисоединенныеФайлы + CatalogObject.ВерсииФайлов CatalogObject.ВстречаПрисоединенныеФайлы CatalogObject.ТелефонныйЗвонокПрисоединенныеФайлы CatalogObject.ШаблоныСообщенийПрисоединенныеФайлы @@ -17,6 +18,5 @@ CatalogObject.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы CatalogObject.ЗапланированноеВзаимодействиеПрисоединенныеФайлы CatalogObject.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы - CatalogObject.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/DefinedTypes/УточнениеКонтекстаПроверкиСостоянияСистемы/УточнениеКонтекстаПроверкиСостоянияСистемы.mdo b/SSL/src/DefinedTypes/УточнениеКонтекстаПроверкиСостоянияСистемы/УточнениеКонтекстаПроверкиСостоянияСистемы.mdo new file mode 100644 index 000000000..593069f70 --- /dev/null +++ b/SSL/src/DefinedTypes/УточнениеКонтекстаПроверкиСостоянияСистемы/УточнениеКонтекстаПроверкиСостоянияСистемы.mdo @@ -0,0 +1,17 @@ + + + + + + УточнениеКонтекстаПроверкиСостоянияСистемы + + ru + Уточнение контекста проверки состояния системы + + + String + + 128 + + + diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl index 2366e9b90..cc821fce6 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl @@ -189,7 +189,7 @@ ДвоичныеДанные = ПолучитьИзВременногоХранилища(ТекущиеДанные.АдресВоВременномХранилище); ДвоичныеДанные.Записать(ПутьКФайлу); КонецЕсли; - ЗапуститьПриложение("""" + ПутьКФайлу + """"); + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу); #Иначе ПутьКФайлу = ТекущиеДанные.ИмяФайлаНаКомпьютере; ПолучитьФайл(ПутьКФайлу, ТекущиеДанные.ИмяФайла, Истина); diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index 507a6f890..e555da168 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -109,7 +109,8 @@ ОбработатьАктивизациюСтрокиПанелиНавигации(); КонецЕсли; ИначеЕсли ВРег(ИмяСобытия) = ВРег("Запись_ПапкиЭлектронныхПисем") - ИЛИ ВРег(ИмяСобытия) = ВРег("ПримененыПравилаОбработкиПисем") Тогда + Или ВРег(ИмяСобытия) = ВРег("ПримененыПравилаОбработкиПисем") + Или ВРег(ИмяСобытия) = ВРег("ВыполненаОтправкаПолучениеПисем") Тогда Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда ОбновитьПанельНавигации(); ВосстановитьРаскрытыеУзлыДерева(); @@ -766,9 +767,7 @@ ОчиститьСообщения(); - УправлениеЭлектроннойПочтойКлиент.ОтправитьЗагрузитьПочтуПользователя(Элементы.Список); - ОбновитьПанельНавигации(); - ВосстановитьРаскрытыеУзлыДерева(); + УправлениеЭлектроннойПочтойКлиент.ОтправитьЗагрузитьПочтуПользователя(УникальныйИдентификатор, ЭтотОбъект, Элементы.Список); КонецПроцедуры @@ -787,7 +786,7 @@ Основание = Новый Структура("Основание,Команда",ТекущееВзаимодействие, "Ответить"); ПараметрыОткрытия = Новый Структура("Основание", Основание); - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыОткрытия); КонецПроцедуры @@ -806,7 +805,7 @@ Основание = Новый Структура("Основание,Команда",ТекущееВзаимодействие, "ОтветитьВсем"); ПараметрыОткрытия = Новый Структура("Основание", Основание); - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыОткрытия); КонецПроцедуры @@ -826,7 +825,7 @@ Основание = Новый Структура("Основание,Команда", ТекущееВзаимодействие, "Переслать"); ПараметрыОткрытия = Новый Структура("Основание", Основание); - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыОткрытия); КонецПроцедуры @@ -2441,25 +2440,30 @@ КонецЦикла; ТекстЗапросаДинамическийСписок = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | СостоянияКонтактовВзаимодействий.Контакт КАК Контакт, - | СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено КАК КоличествоНеРассмотрено, - | СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия КАК ДатаПоследнегоВзаимодействия, + "ВЫБРАТЬ + | СостоянияКонтактовВзаимодействий.Контакт, + | СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено, + | СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия, | 3 КАК НомерКартинки, | ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействий.Контакт) КАК ТипКонтакта |ИЗ | РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - | ПО СостоянияКонтактовВзаимодействий.Контакт = КонтактыВзаимодействий.Контакт - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия - | ПО (КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт) - | И (КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка) - | %ТекстУсловияЖурналДокументов% - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий - | ПО (КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт) - | И (КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие) - | %ТекстУсловияРегистрПапки%"; - + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия + | ПО + | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка + | %ТекстУсловияЖурналДокументов% + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий + | ПО + | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие + | %ТекстУсловияРегистрПапки%)"; ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияЖурналДокументов%", ТекстУсловийПоЖурналуДокументов); ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияРегистрПапки%", ТекстУсловийПоРегистру); @@ -2485,7 +2489,20 @@ | 3 КАК НомерКартинки, | ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействий.Контакт) КАК ТипКонтакта |ИЗ - | РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий"; + | РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия + | ПО КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий + | ПО + | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие)"; КонецЕсли; @@ -3336,6 +3353,7 @@ КонецФункции +&НаСервере Функция ПолучитьXML(Значение) Запись = Новый ЗаписьXML(); diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html index af98de580..e01229b62 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html @@ -2,7 +2,7 @@

      Предназначен для отражения взаимодействий по предмету или по контакту.

      В панели навигации различных документов и элементов некоторых списков, например, списка пользователей, доступна команда Взаимодействия, которая открывает списки взаимодействий по предмету или контакту.

      Например, если вызов произошел из карточки контактного лица партнера, то выводятся все взаимодействия с участием данного контактного лица. А если вызов произошел из какого-либо документа, то отображаются все взаимодействия по данному предмету.

      -

      Все Взаимодействия без исключения можно посмотреть в списке взаимодействий, который открывается по соответствующей команде раздела Органайзер.

      +

      Все Взаимодействия без исключения можно посмотреть в списке взаимодействий.

      Какие режимы просмотра доступны, и как изменить текущий режим просмотра?

      Какие отборы можно установить для взаимодействий в форме, помимо отбора по контакту или предмету наложенного при вызове формы?

      Как установить признак Рассмотрено для нескольких документов?

      diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form index 17958ea3e..cf7dba527 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form @@ -148,16 +148,17 @@ Auto
      - ФормаПеречитать - 217 + ФормаКоманднаяПанельЗаписать + 87 true true true + false - ФормаПеречитатьРасширеннаяПодсказка - 218 + ФормаКоманднаяПанельЗаписатьExtendedTooltip + 114 Label true true @@ -165,12 +166,15 @@ Left - Form.StandardCommand.Reread + Form.StandardCommand.Write Normal - Auto + Picture true true UserCmds + + StdPicture.Write + Auto @@ -200,7 +204,7 @@ Auto - ФормаУстановитьПометкуУдаления + ФормаПеречитать 219 true true @@ -208,7 +212,7 @@ true - ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка + ФормаПеречитатьРасширеннаяПодсказка 220 Label true @@ -217,6 +221,32 @@ Left + Form.StandardCommand.Reread + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьПометкуУдаления + 217 + true + true + + true + + + ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка + 218 + Label + true + true + + Left + + Form.StandardCommand.SetDeletionMark Normal Auto @@ -225,36 +255,6 @@ UserCmds Auto - - ФормаКоманднаяПанельЗаписать - 87 - true - true - - true - - false - - ФормаКоманднаяПанельЗаписатьExtendedTooltip - 114 - Label - true - true - - Left - - - Form.StandardCommand.Write - Normal - Picture - true - true - UserCmds - - StdPicture.Write - - Auto - ФормаГлобальныеКоманды 186 diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index 6ae4c2b44..6164e2b07 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -19,6 +19,8 @@ ЭтоСеансОбычногоПользователя = Истина; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); + ПозиционированиеНаРазделе = Ложь; Если Объект.РежимАнкетирования = Перечисления.РежимыАнкетирования.Интервью Тогда diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form index 6aed74e37..97173b089 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form @@ -51,44 +51,6 @@ None Copy Create - - Дата - 4 - true - true - - true - - - Список.Date - - true - - ДатаExtendedTooltip - 15 - Label - true - true - - Left - - - - ДатаКонтекстноеМеню - 5 - true - - LabelField - Enter - true - Left - true - - 9 - true - true - - Номер 6 @@ -127,6 +89,44 @@ false + + Дата + 4 + true + true + + true + + + Список.Date + + true + + ДатаExtendedTooltip + 15 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + 9 + true + true + + РежимАнкетирования 34 diff --git a/SSL/src/Documents/Анкета/ObjectModule.bsl b/SSL/src/Documents/Анкета/ObjectModule.bsl index 5be3bf46f..566211e39 100644 --- a/SSL/src/Documents/Анкета/ObjectModule.bsl +++ b/SSL/src/Documents/Анкета/ObjectModule.bsl @@ -2,6 +2,16 @@ #Область ОбработчикиСобытий +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + +КонецПроцедуры + Процедура ОбработкаПроведения(Отказ, РежимПроведения) УстановитьПривилегированныйРежим(Истина); @@ -42,7 +52,7 @@ КонецПроцедуры -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ДанныеЗаполнения <> Неопределено Тогда ЗаполнитьЗначенияСвойств(ЭтотОбъект,ДанныеЗаполнения); diff --git a/SSL/src/Documents/Встреча/ObjectModule.bsl b/SSL/src/Documents/Встреча/ObjectModule.bsl index 39161713a..e7133ba8f 100644 --- a/SSL/src/Documents/Встреча/ObjectModule.bsl +++ b/SSL/src/Documents/Встреча/ObjectModule.bsl @@ -36,7 +36,7 @@ #Область ОбработчикиСобытий -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) УстановитьДатыПоУмолчанию(); Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения); diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl index cf6f43417..9bfa4b6ea 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl @@ -36,7 +36,7 @@ #Область ОбработчикиСобытий -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения); diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl index 912bcf297..b81dc428d 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl @@ -2,7 +2,7 @@ #Область ОбработчикиСобытий -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных") Тогда ИменаРеквизитов = @@ -17,6 +17,19 @@ КонецПроцедуры +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + // Проверяем, что на указанную дату не было других записей о согласии. + Согласие = ЗащитаПерсональныхДанных.ДействующееСогласиеНаОбработкуПерсональныхДанных(Субъект, Организация, ДатаОтзыва, Ссылка); + Если Согласие <> Неопределено Тогда + Если ДатаОтзыва = Согласие.ДатаПолучения Тогда + ТекстСообщения = НСтр("ru = 'На указанную дату зарегистрировано согласие. Оформление отзыва согласия в тот же день не поддерживается.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Согласие.ДокументОснование, "Объект.ДатаОтзыва", , Отказ); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + Процедура ОбработкаПроведения(Отказ, РежимПроведения) ОписаниеРегистрации = ЗащитаПерсональныхДанных.ОписаниеРегистрацииСогласияНаОбработкуПерсональныхДанных(); diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form index 0330a3d7f..1a4f159ff 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form @@ -233,6 +233,40 @@ true + + Ссылка + 31 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -396,6 +430,9 @@ true + + Список.Ref +
      true
      Document.СогласиеНаОбработкуПерсональныхДанных diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo index 13858fd0f..78ae04db0 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo @@ -125,6 +125,10 @@ 150 + + ru + Юридический адрес организации, используемый в официальных документах + @@ -205,6 +209,10 @@ 150 + + ru + Адрес местонахождения субъекта + diff --git a/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl index e9c1504b3..48b45251d 100644 --- a/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl @@ -36,7 +36,7 @@ #Область ОбработчикиСобытий -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения); diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl index 995bfde6f..4ef6fabd1 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl @@ -51,7 +51,7 @@ #Область ОбработчикиСобытий -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения); diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index 6f6aabea8..c3e6b2b68 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -21,6 +21,8 @@ Возврат; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); + Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтотОбъект); ЗапрещенныеРасширения = РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений(); diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl index f355df733..057fc62d3 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl @@ -21,6 +21,23 @@ #Область ОбработчикиСобытий +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + + Если ЭтоНовый() Тогда + ДополнительныеСвойства.Вставить("ПометкаУдаления", Ложь); + Иначе + ДополнительныеСвойства.Вставить("ПометкаУдаления", + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления")); + КонецЕсли; + +КонецПроцедуры + Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда @@ -43,17 +60,6 @@ КонецПроцедуры -Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - ДополнительныеСвойства.Вставить("ПометкаУдаления", - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка,"ПометкаУдаления")); - -КонецПроцедуры - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index 3e4f520b1..e0a52cc89 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -17,6 +17,8 @@ Возврат; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); + Если Объект.Ссылка.Пустая() Тогда Рассмотрено = Истина; ПриСозданииИПриЧтенииНаСервере(); @@ -1268,10 +1270,10 @@ ЭтотОбъект); Исключение - ЗапуститьПриложение("""" + ПутьКФайлу + """"); + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу); КонецПопытки; Иначе - ЗапуститьПриложение("""" + ПутьКФайлу + """"); + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу); КонецЕсли; #Иначе @@ -1289,7 +1291,7 @@ ДвоичныеДанные = ПолучитьИзВременногоХранилища(ТекущиеДанные.ИмяФайлаНаКомпьютере); ДвоичныеДанные.Записать(ПутьКФайлу); КонецЕсли; - ЗапуститьПриложение("""" + ПутьКФайлу + """"); + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу); #Иначе ПолучитьФайл(ПутьКФайлу, ТекущиеДанные.ИмяФайла, Истина); #КонецЕсли @@ -2377,14 +2379,7 @@ Попытка ПараметрыПисьма = Неопределено; - - ИмяСервераИсходящейПочты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.УчетнаяЗапись, "СерверИсходящейПочты", Истина); - - Если УправлениеЭлектроннойПочтой.СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ИмяСервераИсходящейПочты) Тогда - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма); - Иначе - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма,"Все"); - КонецЕсли; + Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма,"Все"); Исключение @@ -2598,6 +2593,7 @@ КонецЕсли; Иначе + ТекстПисьмо = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(); Если ПустаяСтрока(ТекстПисьмо) Тогда @@ -2621,7 +2617,7 @@ Если ТипЗнч(ПараметрыНоваяУЗ.Подпись) = Тип("ФорматированныйДокумент") Тогда ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаФорматированныйДокумент, ПараметрыНоваяУЗ.Подпись); КонецЕсли; - + КонецЕсли; КонецЕсли; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index a0d80fd08..db4c323d8 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -129,15 +129,29 @@ // Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт - ТекстЗапроса = - "ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящее.Ссылка + ТекстЗапроса =" + |ВЫБРАТЬ + | ЭлектронноеПисьмоИсходящее.Ссылка КАК Ссылка |ИЗ | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее |ГДЕ - | ЭлектронноеПисьмоИсходящее.УдалитьИдентификаторСообщенияОтправкаIMAP <> """""; + | ЭлектронноеПисьмоИсходящее.УдалитьИдентификаторСообщенияОтправкаIMAP <> """" + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ТаблицаДокумента.Ссылка КАК Ссылка + |ИЗ + | ЖурналДокументов.Взаимодействия КАК Взаимодействия + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее КАК ТаблицаДокумента + | ПО Взаимодействия.ИдентификаторСообщения = ТаблицаДокумента.ИдентификаторОснования + | И Взаимодействия.УчетнаяЗапись = ТаблицаДокумента.УчетнаяЗапись + | И Взаимодействия.Ссылка <> ТаблицаДокумента.ВзаимодействиеОснование + | И (Взаимодействия.ИдентификаторСообщения <> """") + | И (ТаблицаДокумента.ВзаимодействиеОснование <> """")"; Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Дата", Дата(2016, 7, 1)); ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); @@ -151,9 +165,44 @@ ПолноеИмяОбъекта = "Документ.ЭлектронноеПисьмоИсходящее"; - ОбъектыДляОбработки = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяОбъекта); + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ТаблицаДокумента.Ссылка КАК Ссылка, + | Взаимодействия.Ссылка КАК ПисьмоОснование, + | ВЫБОР + | КОГДА Взаимодействия.Ссылка ЕСТЬ NULL + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК ТребуетсяУказаниеПисьмаОснования, + | ТаблицаДокумента.УдалитьИдентификаторСообщенияОтправкаIMAP КАК УдалитьИдентификаторСообщенияОтправкаIMAP + |ИЗ + | &ВТДокументыДляОбработки КАК СсылкиДляОбработки + | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее КАК ТаблицаДокумента + | ПО (ТаблицаДокумента.Ссылка = СсылкиДляОбработки.Ссылка) + | ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия + | ПО (Взаимодействия.ИдентификаторСообщения = ТаблицаДокумента.ИдентификаторОснования) + | И (Взаимодействия.УчетнаяЗапись = ТаблицаДокумента.УчетнаяЗапись) + | И (Взаимодействия.Ссылка <> ТаблицаДокумента.ВзаимодействиеОснование) + | И (Взаимодействия.ИдентификаторСообщения <> """") + | И (ТаблицаДокумента.ВзаимодействиеОснование <> """")"; - Пока ОбъектыДляОбработки.Следующий() Цикл + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Результат = ОбновлениеИнформационнойБазы.СоздатьВременнуюТаблицуСсылокДляОбработки(Параметры.Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц); + Если НЕ Результат.ЕстьДанныеДляОбработки Тогда + Параметры.ОбработкаЗавершена = Истина; + Возврат; + КонецЕсли; + Если НЕ Результат.ЕстьЗаписиВоВременнойТаблице Тогда + Параметры.ОбработкаЗавершена = Ложь; + Возврат; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВТДокументыДляОбработки", Результат.ИмяВременнойТаблицы); + + ОбъектыДляОбработки = Запрос.Выполнить().Выбрать(); + + Пока ОбъектыДляОбработки.Следующий() Цикл НачатьТранзакцию(); @@ -170,16 +219,23 @@ Объект = ОбъектыДляОбработки.Ссылка.ПолучитьОбъект(); Если Объект = Неопределено Тогда - ОтменитьТранзакцию(); ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ОбъектыДляОбработки.Ссылка); - Продолжить; + Иначе + + Если ЗначениеЗаполнено(ОбъектыДляОбработки.УдалитьИдентификаторСообщенияОтправкаIMAP) Тогда + Объект.ИдентификаторСообщенияОтправкаIMAP = Объект.УдалитьИдентификаторСообщенияОтправкаIMAP; + Объект.УдалитьИдентификаторСообщенияОтправкаIMAP = ""; + КонецЕсли; + + Если ОбъектыДляОбработки.ТребуетсяУказаниеПисьмаОснования Тогда + + Объект.ВзаимодействиеОснование = ОбъектыДляОбработки.ПисьмоОснование; + + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЕсли; - Объект.ИдентификаторСообщенияОтправкаIMAP = Объект.УдалитьИдентификаторСообщенияОтправкаIMAP; - Объект.УдалитьИдентификаторСообщенияОтправкаIMAP = ""; - - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - ЗафиксироватьТранзакцию(); Исключение @@ -207,228 +263,6 @@ КонецПроцедуры -// Регистрирует к обработке электронные письма у которых возможно заполнить ВзаимодействиеОснование. -// -Процедура ЗаполнитьВзаимодействияОснованияУПодчиненныхПисемКОбработке(Параметры) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = Взаимодействия.ТекстЗапросаОтметкиКОбработкиЗаполненияПисемОснований("Документ.ЭлектронноеПисьмоИсходящее"); - - ОбновлениеИнформационнойБазы.ОтметитьКОбработке( - Параметры, - Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); - -КонецПроцедуры - -// Выполняет дозаполнение реквизита ВзаимодействиеОснование у электронных писем. -// -Процедура ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем(Параметры) Экспорт - - ПолноеИмяДокумента = "Документ.ЭлектронноеПисьмоИсходящее"; - МетаданныеДокумента = Метаданные.Документы.ЭлектронноеПисьмоИсходящее; - - Взаимодействия.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем(Параметры, ПолноеИмяДокумента, МетаданныеДокумента); - -КонецПроцедуры - -// Регистрирует к обработке электронные письма у которых необходимо заполнить контакт у получателей письма. -// -Процедура ОпределитьНезаполненныеКонтактыВИсходящихЭлектронныхПисьмах(Параметры) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка КАК Ссылка - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоИсходящееПолучателиПисьма - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка.Дата >= &Дата - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиСкрытыхКопий КАК ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка.Дата >= &Дата - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиКопий КАК ЭлектронноеПисьмоИсходящееПолучателиКопий - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка.Дата >= &Дата"; - - Запрос.УстановитьПараметр("Дата", Дата(2016, 7, 1)); - - ТаблицаДокументов = Запрос.Выполнить().Выгрузить(); - ТаблицаДокументов.Свернуть("Ссылка"); - - ОбновлениеИнформационнойБазы.ОтметитьКОбработке( - Параметры, - ТаблицаДокументов.ВыгрузитьКолонку("Ссылка")); - -КонецПроцедуры - -// Выполняет дозаполнение контакта у получателей электронных писем. -// -Процедура ЗаполнитьСписокКонтактовИсходящихЭлектронныхПисем(Параметры) Экспорт - - ТекстЗапроса = "ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка КАК Ссылка, - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Адрес КАК Адрес, - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Представление КАК Представление, - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт КАК Контакт, - | ""КОМУ"" КАК ВидОтправки - |ПОМЕСТИТЬ СписокПочты - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоИсходящееПолучателиПисьма - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка = &Ссылка - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка, - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Адрес, - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Представление, - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Контакт, - | ""СКРЫТЫЕКОПИИ"" КАК ВидОтправки - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиСкрытыхКопий КАК ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка = &Ссылка - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка, - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Адрес, - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Представление, - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Контакт, - | ""КОПИИ"" КАК ВидОтправки - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиКопий КАК ЭлектронноеПисьмоИсходящееПолучателиКопий - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка = &Ссылка - |; - |"; - - ШаблонЗапроса = " ВЫБРАТЬ - | МАКСИМУМ(%1.Ссылка) КАК Ссылка, - | %1.Представление КАК Представление, - | СписокПочты.ВидОтправки - |ИЗ - | СписокПочты КАК СписокПочты - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.%2.КонтактнаяИнформация КАК %1 - | ПО (СписокПочты.Адрес = %1.Представление) - |ГДЕ - | %1.Тип = &Тип - | - |СГРУППИРОВАТЬ ПО - | СписокПочты.ВидОтправки, - | %1.Представление - |ИМЕЮЩИЕ - | КОЛИЧЕСТВО(%1.Ссылка) = 1"; - - ОБЪЕДИНИТЬВСЕ = ""; - Для каждого ТипКонтактВзаимодействия Из Метаданные.ОпределяемыеТипы.КонтактВзаимодействия.Тип.Типы() Цикл - КонтактВзаимодействия = Метаданные.НайтиПоТипу(ТипКонтактВзаимодействия); - Если СтрНачинаетсяС(КонтактВзаимодействия.ПолноеИмя(), "Справочник") Тогда - Если КонтактВзаимодействия.ТабличныеЧасти.Найти("КонтактнаяИнформация") <> Неопределено Тогда - - ТекстЗапроса = ТекстЗапроса + ОБЪЕДИНИТЬВСЕ + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, - КонтактВзаимодействия.Имя + "КонтактнаяИнформация", КонтактВзаимодействия.Имя); - ОБЪЕДИНИТЬВСЕ = " ОБЪЕДИНИТЬ ВСЕ "; - - КонецЕсли; - КонецЕсли; - КонецЦикла; - - ПолноеИмяДокумента = "Документ.ЭлектронноеПисьмоИсходящее"; - МетаданныеДокумента = Метаданные.Документы.ЭлектронноеПисьмоИсходящее; - - ЭлектронноеПисьмоИсходящееСсылка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяДокумента); - - ПроблемныхОбъектов = 0; - ОбъектовОбработано = 0; - - Пока ЭлектронноеПисьмоИсходящееСсылка.Следующий() Цикл - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); - Запрос.УстановитьПараметр("Ссылка", ЭлектронноеПисьмоИсходящееСсылка.Ссылка); - - РезультатЗапроса = Запрос.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - НачатьТранзакцию(); - Попытка - ДокументОбъект = ЭлектронноеПисьмоИсходящееСсылка.Ссылка.ПолучитьОбъект(); - Почта = РезультатЗапроса.Выбрать(); - Пока Почта.Следующий() Цикл - Если Почта.ВидОтправки = "КОПИИ" Тогда - ИмяТаблицы = "ПолучателиКопий"; - ИначеЕсли Почта.ВидОтправки = "СКРЫТЫЕКОПИИ" Тогда - ИмяТаблицы = "ПолучателиСкрытыхКопий"; - Иначе - ИмяТаблицы = "ПолучателиПисьма"; - КонецЕсли; - СтрокаТаблицы = ДокументОбъект[ИмяТаблицы].Найти(Почта.Представление, "Адрес"); - Если СтрокаТаблицы <> Неопределено Тогда - СтрокаТаблицы.Контакт = Почта.Ссылка; - Если ПустаяСтрока(СтрокаТаблицы.Представление) Тогда - СтрокаТаблицы.Представление = Строка(Почта.Ссылка); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Взаимодействия.ПриЗаписиДокумента(ДокументОбъект); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект); - ОбъектовОбработано = ОбъектовОбработано + 1; - ЗафиксироватьТранзакцию(); - Исключение - // Если не удалось обработать какой-либо документ электронное исходящие письмо, повторяем попытку снова. - ОтменитьТранзакцию(); - ПроблемныхОбъектов = ПроблемныхОбъектов + 1; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обработать электронное исходящие письмо: %1 по причине: %2'"), - ЭлектронноеПисьмоИсходящееСсылка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, - Метаданные.Документы.ЭлектронноеПисьмоИсходящее, ЭлектронноеПисьмоИсходящееСсылка.Ссылка, ТекстСообщения); - КонецПопытки; - Иначе - ОбъектовОбработано = ОбъектовОбработано + 1; - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ЭлектронноеПисьмоИсходящееСсылка.Ссылка); - КонецЕсли; - - КонецЦикла; - - Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяДокумента); - - Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедуре ЗаполнитьСписокКонтактовИсходящихЭлектронныхПисем не удалось обработать некоторые документы электронного исходящего письма (пропущены): %1'"), - ПроблемныхОбъектов); - ВызватьИсключение ТекстСообщения; - Иначе - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, - МетаданныеДокумента,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Процедура ЗаполнитьСписокКонтактовИсходящихЭлектронныхПисем обработала очередную порцию документов электронных исходящих писем: %1'"), - ОбъектовОбработано)); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index d1c453cca..13f96349e 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -90,6 +90,23 @@ #Область ОбработчикиСобытий +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + + Если ЭтоНовый() Тогда + ДополнительныеСвойства.Вставить("ПометкаУдаления", Ложь); + Иначе + ДополнительныеСвойства.Вставить("ПометкаУдаления", + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления")); + КонецЕсли; + +КонецПроцедуры + Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда @@ -103,21 +120,6 @@ КонецПроцедуры -Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если ЭтоНовый() Тогда - ДополнительныеСвойства.Вставить("ПометкаУдаления", Ложь); - Иначе - ДополнительныеСвойства.Вставить("ПометкаУдаления", - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления")); - КонецЕсли; - -КонецПроцедуры - Процедура ПередУдалением(Отказ) Если ОбменДанными.Загрузка Тогда @@ -128,7 +130,7 @@ КонецПроцедуры -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если (ТипЗнч(ДанныеЗаполнения) = Тип("Структура")) И (ДанныеЗаполнения.Свойство("Основание")) И (ТипЗнч(ДанныеЗаполнения.Основание) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") diff --git a/SSL/src/Enums/ВажностьПроблемыУчета/ManagerModule.bsl b/SSL/src/Enums/ВажностьПроблемыУчета/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo b/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo new file mode 100644 index 000000000..66613fad2 --- /dev/null +++ b/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo @@ -0,0 +1,60 @@ + + + + + + + + ВажностьПроблемыУчета + + ru + Важность проблемы учета + + Определяет значимость проблемы, выявленной при проверке + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Информация + + ru + Информация + + + + Предупреждение + + ru + Предупреждение + + + + Ошибка + + ru + Ошибка + + + + ПолезныйСовет + + ru + Полезный совет + + + diff --git a/SSL/src/Enums/ВидыДнейПроизводственногоКалендаря/ВидыДнейПроизводственногоКалендаря.mdo b/SSL/src/Enums/ВидыДнейПроизводственногоКалендаря/ВидыДнейПроизводственногоКалендаря.mdo index bd2f8ad6f..b185f87e3 100644 --- a/SSL/src/Enums/ВидыДнейПроизводственногоКалендаря/ВидыДнейПроизводственногоКалендаря.mdo +++ b/SSL/src/Enums/ВидыДнейПроизводственногоКалендаря/ВидыДнейПроизводственногоКалендаря.mdo @@ -63,4 +63,11 @@ Праздник + + Нерабочий + + ru + Нерабочий + + diff --git a/SSL/src/Enums/ПровайдерыSMS/ПровайдерыSMS.mdo b/SSL/src/Enums/ПровайдерыSMS/ПровайдерыSMS.mdo index d02a6bca6..138dc4cef 100644 --- a/SSL/src/Enums/ПровайдерыSMS/ПровайдерыSMS.mdo +++ b/SSL/src/Enums/ПровайдерыSMS/ПровайдерыSMS.mdo @@ -35,6 +35,13 @@ GSM-INFORM + + SMS4B + + ru + SMS4B + + SMSRU diff --git a/SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo b/SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo new file mode 100644 index 000000000..406be11c4 --- /dev/null +++ b/SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo @@ -0,0 +1,52 @@ + + + + + + + + СпособВыполненияПроверки + + ru + Способ выполнения проверки + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + ПоОбщемуРасписанию + + ru + По общему расписанию + + + + ПоОтдельномуРасписанию + + ru + По отдельному расписанию + + + + Вручную + + ru + Вручную + + + diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo index 5ac8e2314..a60d79f12 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo @@ -18,6 +18,7 @@ InformationRegisterRecordSet.ВерсииПодсистем InformationRegisterRecordSet.ПричиныИзмененияАдресныхСведений InformationRegisterRecordSet.СообщенияОбменаДанными + InformationRegisterRecordSet.УдалитьЗамерыВремени3 InformationRegisterRecordSet.УдалитьЗамерыВремениТехнологические InformationRegisterRecordSet.БезопасноеХранилищеДанных InformationRegisterRecordSet.УдалитьАдресныйКлассификатор diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl index 3fe36800e..5a349a4c5 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl @@ -2,6 +2,48 @@ #Область ПрограммныйИнтерфейс +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ОбменДанными + +// Заполняет настройки, влияющие на использование плана обмена. +// +// Параметры: +// Настройки - Структура - настройки плана обмена по умолчанию, см. ОбменДаннымиСервер.НастройкиПланаОбменаПоУмолчанию, +// описание возвращаемого значения функции. +// +Процедура ПриПолученииНастроек(Настройки) Экспорт + + Настройки.Алгоритмы.ПриПолученииОписанияВариантаНастройки = Истина; + +КонецПроцедуры + +// Заполняет набор параметров, определяющих вариант настройки обмена. +// +// Параметры: +// ОписаниеВарианта - Структура - набор варианта настройки по умолчанию, +// см. ОбменДаннымиСервер.ОписаниеВариантаНастройкиОбменаПоУмолчанию, +// описание возвращаемого значения. +// ИдентификаторНастройки - Строка - идентификатор варианта настройки обмена. +// ПараметрыКонтекста - Структура - см. ОбменДаннымиСервер.ПараметрыКонтекстаПолученияОписанияВариантаНастройки, +// описание возвращаемого значения функции. +// +Процедура ПриПолученииОписанияВариантаНастройки(ОписаниеВарианта, ИдентификаторНастройки, ПараметрыКонтекста) Экспорт + + ОписаниеВарианта.ИспользоватьПомощникСозданияОбменаДанными = Ложь; + + ИспользуемыеТранспортыСообщенийОбмена = Новый Массив; + ИспользуемыеТранспортыСообщенийОбмена.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); + ИспользуемыеТранспортыСообщенийОбмена.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + ИспользуемыеТранспортыСообщенийОбмена.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + ИспользуемыеТранспортыСообщенийОбмена.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + ОписаниеВарианта.ИспользуемыеТранспортыСообщенийОбмена = ИспользуемыеТранспортыСообщенийОбмена; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, необходимые для совместимости с БСП2.4.1-2.4.3. + // Позволяет переопределить настройки плана обмена, заданные по умолчанию. // Значения настроек по умолчанию см. в ОбменДаннымиСервер.НастройкиПланаОбменаПоУмолчанию. // @@ -220,9 +262,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для работы через подключение к корреспонденту через внешнее соединение или веб-сервис. - // Возвращает имена реквизитов и табличных частей плана обмена, перечисленных через запятую, // которые являются общими для пары обменивающихся конфигураций. // @@ -344,9 +383,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий - // Обработчик события при подключении к корреспонденту. // Событие возникает при успешном подключении к корреспонденту и получении версии конфигурации корреспондента // при настройке обмена с использованием помощника через прямое подключение @@ -391,9 +427,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Константы и проверка параметров учета. - // Определяет текст пояснения для настройки параметров учета. // // Возвращаемое значение: @@ -416,7 +449,7 @@ КонецПроцедуры -#Область ДляВызоваИзДругихПодсистем +// Конец СтандартныеПодсистемы.ОбменДанными // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo index e1f5fde7e..37ad7c45b 100644 --- a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -136,6 +136,9 @@ InformationRegister.ЗамерыКомментарииСтатистики + + Catalog.ПрофилиКлючевыхОпераций + InformationRegister.СтатистикаКонфигурации @@ -151,6 +154,9 @@ Catalog.ВопросыШаблонаАнкеты + + InformationRegister.ЗамерыВремени + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения @@ -229,6 +235,9 @@ InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных + + Catalog.ВидыПроверок + Catalog.ВариантыОтветовАнкет @@ -310,6 +319,9 @@ Catalog.ШаблоныЗаданийОчереди + + Catalog.ПравилаПроверкиУчета + Document.Встреча @@ -455,7 +467,7 @@ Document.ЭлектронноеПисьмоИсходящее - InformationRegister.ЗамерыВремени + InformationRegister.УдалитьЗамерыВремени3 InformationRegister.НастройкиПравОбъектов @@ -523,6 +535,9 @@ ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач + + InformationRegister.ПсевдонимыПредопределенныхУзлов + InformationRegister.ПравилаДляОбменаДанными @@ -706,6 +721,9 @@ InformationRegister.УдалитьОчередьЗаданий + + InformationRegister.РезультатыПроверкиУчета + InformationRegister.СведенияОПользователях diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index 369d215ee..8e634a0bf 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -1943,13 +1943,15 @@ - Аутентификация + АутентификацияВыполнена <key>ru</key> - <value>Аутентификация</value> + <value>Аутентификация выполнена</value> 13 - + + Boolean + true diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index 5e951c099..4c9228e90 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -162,10 +162,10 @@ Элементы.АдресЗагрузки.КартинкаКнопкиВыбора = Новый Картинка; КонецЕсли; - ДанныеАутентификацииСайтаСохранены = ДанныеАутентификацииСайтаСохранены(); - Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = НЕ ДанныеАутентификацииСайтаСохранены; - Элементы.ИнформацияОбОбновление.Видимость = ДанныеАутентификацииСайтаСохранены; - + АутентификацияВыполнена = ДанныеАутентификацииСайтаСохранены(); + Элементы.ИнформацияОбОбновление.Видимость = АутентификацияВыполнена; + Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = НЕ Элементы.ИнформацияОбОбновление.Видимость; + // Автосохранение настроек СохраняемыеВНастройкахДанныеМодифицированы = Истина; КонецЕсли; @@ -297,10 +297,11 @@ КонтрольРасширенияРаботыСФайлами(Текст, КодИсточникаЗагрузки, АдресЗагрузки); ИначеЕсли КодИсточникаЗагрузки = "САЙТ" Тогда - ЗагрузитьКлассификаторССайта(Аутентификация); + ЗагрузитьКлассификаторССайта(); Иначе ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Не указан вариант загрузки классификатора.'") ); + КонецЕсли; КонецПроцедуры @@ -324,11 +325,10 @@ &НаКлиенте Процедура ПослеВводаЛогинИПароля(Результат, Параметр) Экспорт - Если ТипЗнч(Результат) = Тип("Структура") - И ЗначениеЗаполнено(Результат.Логин) Тогда - Аутентификация = Результат; - Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = Ложь; - Элементы.ИнформацияОбОбновление.Видимость = Истина; + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = Ложь; + Элементы.ИнформацияОбОбновление.Видимость = Истина; + АутентификацияВыполнена = Истина; КонецЕсли; КонецПроцедуры @@ -345,7 +345,7 @@ Процедура ОбновитьКлассификатор(Команда) Если КодИсточникаЗагрузки = "САЙТ" Тогда - ЗагрузитьКлассификаторССайта(Аутентификация); + ЗагрузитьКлассификаторССайта(); // грузим Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.ОжиданиеЗагрузки; Иначе @@ -566,15 +566,11 @@ КонецПроцедуры &НаКлиенте -Процедура ЗагрузитьКлассификаторССайта(Знач Аутентификация = Неопределено) +Процедура ЗагрузитьКлассификаторССайта() КодыРегионов = КодыРегионовДляЗагрузки(); - Если Аутентификация = Неопределено Тогда - Аутентификация = СохраненныеДанныеАутентификацииСайта(); - КонецЕсли; - - Если ПустаяСтрока(Аутентификация.Логин) Тогда + Если НЕ АутентификацияВыполнена Тогда // Проходим через форму авторизации принудительно. Оповещение = Новый ОписаниеОповещения("ЗагрузитьКлассификаторССайтаЗапросАутентификации", ЭтотОбъект, Новый Структура); Оповещение.ДополнительныеПараметры.Вставить("КодыРегионов", КодыРегионов); @@ -582,28 +578,22 @@ Возврат; КонецЕсли; - ЗагрузитьКлассификаторССайтаАутентификация(Аутентификация, КодыРегионов); + ЗагрузитьКлассификаторССайтаАутентификация(КодыРегионов); КонецПроцедуры // Завершение диалога авторизации. // &НаКлиенте -Процедура ЗагрузитьКлассификаторССайтаЗапросАутентификации(Знач Аутентификация, Знач ДополнительныеПараметры) Экспорт +Процедура ЗагрузитьКлассификаторССайтаЗапросАутентификации(Знач Результат, Знач ДополнительныеПараметры) Экспорт - Если ТипЗнч(Аутентификация) <> Тип("Структура") Тогда - // Возвращаемся на страницу выбора. - Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.ВыборРегионовЗагрузки; - ИначеЕсли ПустаяСтрока(Аутентификация.Логин) Тогда - // На повторный ввод пароля - ЗагрузитьКлассификаторССайта(Аутентификация); - Иначе - ЗагрузитьКлассификаторССайтаАутентификация(Аутентификация, ДополнительныеПараметры.КодыРегионов); + Если ТипЗнч(Результат) = Тип("Структура") Тогда + ЗагрузитьКлассификаторССайтаАутентификация(ДополнительныеПараметры.КодыРегионов); КонецЕсли; - + КонецПроцедуры &НаКлиенте -Процедура ЗагрузитьКлассификаторССайтаАутентификация(Знач Аутентификация, Знач КодыРегионов) +Процедура ЗагрузитьКлассификаторССайтаАутентификация(Знач КодыРегионов) ОчиститьСообщения(); @@ -612,7 +602,7 @@ ТекстСостоянияЗагрузки = НСтр("ru = 'Загрузка файлов с сайта поддержки пользователей...'"); ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПрогрессВыполнения", ЭтотОбъект); - Задание = ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, Аутентификация, УникальныйИдентификатор); + Задание = ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, УникальныйИдентификатор); НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); НастройкиОжидания.ВыводитьОкноОжидания = Ложь; @@ -683,11 +673,10 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, Аутентификация, УникальныйИдентификатор) +Функция ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, УникальныйИдентификатор) ПараметрыВызоваСервера = Новый Массив; ПараметрыВызоваСервера.Добавить(КодыРегионов); - ПараметрыВызоваСервера.Добавить(Аутентификация); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка адресного классификатора с сайта'"); @@ -880,16 +869,6 @@ Возврат Результат; КонецФункции -&НаСервереБезКонтекста -Функция СохраненныеДанныеАутентификацииСайта() - - УстановитьПривилегированныйРежим(Истина); - Результат = АдресныйКлассификаторСлужебный.ПараметрыАутентификацииНаСайте(); - УстановитьПривилегированныйРежим(Ложь); - Возврат ?(Результат <> Неопределено, Результат, Новый Структура("Логин,Пароль")); - -КонецФункции - &НаСервереБезКонтекста Функция ДанныеАутентификацииСайтаСохранены() @@ -902,7 +881,6 @@ КонецФункции - &НаКлиенте Процедура ЗавершениеВыбораКаталогаАдресаЗагрузки(Каталог, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index 434d4b061..e33138454 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -14,7 +14,7 @@ Элементы.НетВерсий.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Предыдущие версии отсутствуют: ""%1"".'"), Строка(Ссылка)); ОбновитьСписокВерсий(); - ПереходНаВерсиюРазрешен = Пользователи.ЭтоПолноправныйПользователь(); + ПереходНаВерсиюРазрешен = Пользователи.ЭтоПолноправныйПользователь() И Не ТолькоПросмотр; Элементы.ПерейтиНаВерсию.Видимость = ПереходНаВерсиюРазрешен; Элементы.ДеревоВерсийКонтекстноеМенюПерейтиНаВерсию.Видимость = ПереходНаВерсиюРазрешен; Элементы.ТехническиеСведенияОбИзмененииОбъекта.Видимость = ПереходНаВерсиюРазрешен; diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo index 85e97ccc4..e8f2514b4 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo @@ -355,6 +355,7 @@ + true Use true @@ -382,6 +383,7 @@ + true Index Use diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index 21962f854..2be56ac83 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -805,7 +805,7 @@ КонецЕсли; НетГруппИсполнителей = Истина; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииГруппИсполнителей(Запрос.МенеджерВременныхТаблиц, + ИнтеграцияПодсистемБСП.ПриОпределенииГруппИсполнителей(Запрос.МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра, НетГруппИсполнителей); Если НетГруппИсполнителей Тогда diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl index f4e26e577..e5a49c43d 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl @@ -5,6 +5,8 @@ Процедура ПередЗаписью(Отказ, Замещение) Если ОбменДанными.Загрузка Тогда + // Проверка ОбменДанными.Загрузка не требуется, т.к. работа с данным + // регистром выполняется во время обмена данными. Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда ОтметитьДанныеОбновленыВГлавномУзле(); diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html index 7c417018f..bd71ddd44 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html @@ -1,7 +1,7 @@

      Предназначена для установки даты запрета изменения (загрузки) данных.

      Запреты загрузки данных могут не использоваться. В этом случае доступно только окно настройки дат запрета изменения данных.

      -

      Установка даты запрета изменения данных и различные настройки, связанные с ней, выполняются по соответствующей команде в разделе Администрирование - Поддержка и обслуживание - Регламентные операции.

      +

      Установка даты запрета изменения данных и различные настройки, связанные с ней, выполняются по соответствующей команде в разделе Администрирование - Настройки пользователей и прав - Даты запрета изменения.

      Установка даты запрета загрузки данных выполняется по соответствующей команде в разделе Синхронизация данных.

      О запрете изменения (загрузки) данных

      • Иногда при работе с программой требуется установить запрет изменения каких-либо данных до определенной даты. Например, после сдачи квартальной бухгалтерской отчетности в налоговую инспекцию обычно устанавливается запрет изменения тех данных, которые использовались для формирования этой отчетности, то есть данных по последний день отчетного периода. diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl index 06c9d3e73..f4a721314 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl @@ -20,7 +20,7 @@ Таблица.Колонки.Добавить("ПодчиненнаяТаблица", Новый ОписаниеТипов("Строка")); Таблица.Колонки.Добавить("ВедущаяТаблица", Новый ОписаниеТипов("Строка")); - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииЗависимостейПравДоступа(Таблица); + ИнтеграцияПодсистемБСП.ПриЗаполненииЗависимостейПравДоступа(Таблица); УправлениеДоступомПереопределяемый.ПриЗаполненииЗависимостейПравДоступа(Таблица); ЗависимостиПравДоступа = СоздатьНаборЗаписей().Выгрузить(); diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html b/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html index 418392a56..280f950b6 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html +++ b/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html @@ -1,5 +1,5 @@ -

        Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы программы.

        +

        Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы программы.

        Открыть список можно по команде Замеры времени на панели навигации ключевой операции.

        В списке выводятся:

        • Ключевая операция - полное наименование ключевой операции; diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl index 57a84c9fb..4288a9397 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl @@ -500,7 +500,7 @@ ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") КонецЕсли; - ТекстЗапросаДляИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, ИмяКолонкиВЗапросе); + ТекстЗапросаДляИнтервала = ОценкаПроизводительностиКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, ИмяКолонкиВЗапросе); ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса),"",Символы.ПС) + ТекстЗапросаДляИнтервала; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo index fda00543b..9ed69b82f 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + ЗамерыВремени @@ -56,7 +56,7 @@ Managed - + ВремяВыполнения ru @@ -76,7 +76,7 @@ Use - + ВесЗамера ru @@ -95,7 +95,7 @@ Use - + Комментарий ru @@ -112,7 +112,7 @@ Use - + ДатаЗаписи ru @@ -128,7 +128,7 @@ Use - + ДатаОкончания ru @@ -148,7 +148,7 @@ 0 - + Пользователь ru @@ -165,7 +165,7 @@ Use - + ДатаЗаписиЛокальная ru @@ -183,7 +183,22 @@ 0001-01-01T00:00:00 - + + ВыполненСОшибкой + + ru + Выполнен с ошибкой + + + Boolean + + + + Use + Use + + + КлючеваяОперация ru @@ -201,7 +216,7 @@ true true - + ДатаНачалаЗамера ru @@ -217,12 +232,13 @@ true + Index Use true true - + НомерСеанса ru @@ -241,7 +257,7 @@ true - + ДатаЗаписиНачалоЧаса ru diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl index 19e17e84f..dcf014ad3 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl @@ -460,7 +460,7 @@ ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") КонецЕсли; - ТекстЗапросаДляИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, ИмяКолонкиВЗапросе); + ТекстЗапросаДляИнтервала = ОценкаПроизводительностиКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, ИмяКолонкиВЗапросе); ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса),"",Символы.ПС) + ТекстЗапросаДляИнтервала; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ЗамерыСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыСтатистики/ManagerModule.bsl index 493c699cc..64698e303 100644 --- a/SSL/src/InformationRegisters/ЗамерыСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыСтатистики/ManagerModule.bsl @@ -123,8 +123,7 @@ |"; Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); - // SDF - Не забыть убрать 86400 - Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания + 86400); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараметр("ТипЗаписи", ТипЗаписи); Результат = Запрос.Выполнить(); diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl index 2d3d7c440..14b2fac77 100644 --- a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl @@ -15,7 +15,6 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИзмененияОбщихДанныхУзлов"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", Узел); Блокировка.Заблокировать(); @@ -65,7 +64,6 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИзмененияОбщихДанныхУзлов"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", Узел); Блокировка.Заблокировать(); @@ -89,7 +87,6 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИзмененияОбщихДанныхУзлов"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", Узел); Блокировка.Заблокировать(); diff --git a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Form.form index 49f4fb6be..d117ebe79 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Form.form @@ -304,5 +304,9 @@ AfterWrite ПослеЗаписи + + OnReadAtServer + ПриЧтенииНаСервере + diff --git a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl index 3e21618a5..a76f9689d 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl @@ -22,7 +22,17 @@ КонецПроцедуры - +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.ДатыЗапретаИзменения + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + МодульДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения + +КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl index 9819e6b44..394d64955 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl @@ -56,7 +56,7 @@ Выборка = Результат.Выбрать(); Выборка.Следующий(); - Если ЗаписьКэшаВерсийУстарела(Выборка) Тогда + Если Не КэшПрограммногоИнтерфейсаАктуален(Выборка.ДатаОбновления) Тогда ТребуетсяВыполнитьОбновление = Истина; ТребуетсяПеречитатьДанные = НЕ ИспользоватьУстаревшиеДанные; КонецЕсли; @@ -190,13 +190,14 @@ КонецПопытки; - Попытка + Попытка + // Убедимся, что данные требуют обновления. Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); - Если Не ЗаписьКэшаВерсийУстарела(Выборка) Тогда + Если КэшПрограммногоИнтерфейсаАктуален(Выборка.ДатаОбновления) Тогда РазблокироватьДанныеДляРедактирования(Ключ); Возврат; КонецЕсли; @@ -314,22 +315,21 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает факт устаревания записи кэша версий. +// Возвращает актуальность записи кэша версий. // // Параметры: -// Запись - РегистрСведенийМенеджерЗаписи.КэшПрограммныхИнтерфейсов - запись, факт устаревания которой требуется -// проверить. +// ДатаОбновления - Дата - дата обновления записи. // // Возвращаемое значение: // Булево - признак устаревания записи. // -Функция ЗаписьКэшаВерсийУстарела(Знач Запись) +Функция КэшПрограммногоИнтерфейсаАктуален(ДатаОбновления) - Если ЗначениеЗаполнено(Запись.ДатаОбновления) Тогда - Возврат Запись.ДатаОбновления + 86400 < ТекущаяУниверсальнаяДата(); + Если ЗначениеЗаполнено(ДатаОбновления) Тогда + Возврат ДатаОбновления + 24 * 60 * 60 > ТекущаяУниверсальнаяДата(); // кешируем не более чем на 24 часа КонецЕсли; - Возврат Истина; + Возврат Ложь; КонецФункции diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl index a99f0290c..02fd9d015 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl @@ -343,7 +343,7 @@ КонецЦикла; // Получаем переопределенный массив реквизитов. - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания(Объект.Источник, РеквизитыСДатами); + ИнтеграцияПодсистемБСП.ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания(Объект.Источник, РеквизитыСДатами); НапоминанияПользователяПереопределяемый.ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания(Объект.Источник, РеквизитыСДатами); // Поддержка обратной совместимости. diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl index d764d7a28..7e546f7da 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl @@ -303,10 +303,10 @@ Функция ПредставлениеИнтервалаВремени(Знач КоличествоВремени) Результат = ""; - ПредставлениеНедель = НСтр("ru = 'неделю'") + "," + НСтр("ru = 'недели'") + "," + НСтр("ru = 'недель'"); - ПредставлениеДней = НСтр("ru = 'день'") + "," + НСтр("ru = 'дня'") + "," + НСтр("ru = 'дней'"); - ПредставлениеЧасов = НСтр("ru = 'час'") + "," + НСтр("ru = 'часа'") + "," + НСтр("ru = 'часов'"); - ПредставлениеМинут = НСтр("ru = 'минуту'") + "," + НСтр("ru = 'минуты'") + "," + НСтр("ru = 'минут'"); + ПредставлениеНедель = НСтр("ru = ';%1 неделю;;%1 недели;%1 недель;%1 недели'"); + ПредставлениеДней = НСтр("ru = ';%1 день;;%1 дня;%1 дней;%1 дня'"); + ПредставлениеЧасов = НСтр("ru = ';%1 час;;%1 часа;%1 часов;%1 часа'"); + ПредставлениеМинут = НСтр("ru = ';%1 минуту;;%1 минуты;%1 минут;%1 минуты'"); КоличествоВремени = Число(КоличествоВремени); ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); @@ -339,7 +339,7 @@ КонецЕсли; ИначеЕсли КоличествоНедель > 1 Тогда - Результат = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоНедель, ПредставлениеНедель); + Результат = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеНедель, КоличествоНедель); ИначеЕсли КоличествоНедель > 0 Тогда Результат = НСтр("ru = 'неделю'"); @@ -351,7 +351,7 @@ Возврат НСтр("ru = 'послезавтра'"); КонецЕсли; Иначе - Результат = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоДней, ПредставлениеДней); + Результат = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеДней, КоличествоДней); КонецЕсли; ИначеЕсли КоличествоЧасов + КоличествоДней * 24 > 3 И Не СобытиеСегодня Тогда Если СобытиеНаступило Тогда @@ -362,12 +362,12 @@ ИначеЕсли КоличествоДней > 0 Тогда Результат = НСтр("ru = 'день'"); ИначеЕсли КоличествоЧасов > 1 Тогда - Результат = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоЧасов, ПредставлениеЧасов); + Результат = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеЧасов, КоличествоЧасов); ИначеЕсли КоличествоЧасов > 0 Тогда Результат = НСтр("ru = 'час'"); ИначеЕсли КоличествоМинут > 1 Тогда - Результат = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоМинут, ПредставлениеМинут); + Результат = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеМинут, КоличествоМинут); ИначеЕсли КоличествоМинут > 0 Тогда Результат = НСтр("ru = 'минуту'"); diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html index 64ce07d93..f0fd1bfbe 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html @@ -1,7 +1,7 @@

          В программе можно вводить напоминания, указав время и предмет, по поводу которого в программе в указанное время будет выведен список напоминаний.

          Предметом напоминаний могут быть различные справочники, документы и другие объекты программы. Например, напоминание можно ввести по конкретному партнеру, документу товародвижения и т.д., для того чтобы не забыть уточнить или дозаполнить какие-либо данные.

          -

          Открывается по команде Органайзер - Напомнить из различных объектов программы. При этом можно ввести только одно напоминание для одного объекта.

          +

          Открывается по кнопке  Органайзер - Напомнить из различных объектов программы. При этом можно ввести только одно напоминание для одного объекта.

          Также можно ввести напоминание, связанное с каким-либо персональным событием или делом, в списке Мои напоминания по команде Создать.  Такое напоминание может быть полезно, например, для того чтобы не забыть вовремя поздравить коллегу с днем рождения. Совместно с заметками напоминания хорошо подходят как электронная замена "стикеров на краях монитора".

          Список напоминаний

          • В указанное в напоминании время в программе открывается список Напоминания. В списке содержатся все вновь созданные и отложенные напоминания, у которых подошло время срабатывания. По каждому напоминанию выводится его текст и время, насколько оно было просрочено. Если напоминание связано с датой какого-либо предмета (например, со сроком по задаче), то в напоминании указывается, сколько времени осталось до этого события. diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html index 99bd1263f..a2d253656 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html @@ -1,19 +1,18 @@ -

            Предназначен для настройки версионирования объектов.

            -

            С помощью версионирования документов и справочников можно отслеживать историю изменений.

            -

            Для ведения истории изменений объектов необходимо выбрать команду Поддержка и обслуживание раздела Администрирование, включить флажок Версионирование объектов (по умолчанию включен).

            -

            После этого в разделах Администрирование - Поддержка и обслуживание становится доступной команда Настройки хранения, по которой можно произвести необходимые настройки.

            +

            Предназначен для настройки истории изменения объектов.

            +

            Для ведения истории изменений объектов необходимо включить флажок Хранить историю изменений (по умолчанию включен) в разделе Администрирование - Общие настройки - История изменений.

            +

            После этого становится доступной команда Настройки хранения, по которой можно произвести необходимые настройки.

            В списке выводится:

            • Объект - список объектов программы в виде дерева с группировкой по типам объектов. -
            • Вариант версионирования - выбранный вариант версионирования; -
            • Срок хранения версий - выбранный срок хранения версий.

            Выбор варианта версионирования

            -
            • Выберите один или несколько объектов, затем нажмите кнопку Установить вариант версионирования, из выпадающего списка выберите нужный вариант версионирования для каждого типа документов и справочников (также можно найти команду в меню Еще или в контекстном меню по правой кнопке мыши): -
              • Не версионировать - история версий объекта не ведется; -
              • Версионировать при записи - новая запись заносится в историю версий каждый раз при изменении (или создании нового) справочника или документа; -
              • Версионировать при проведении - версии сохраняются только при проведении; применимо только для документов, для которых разрешено проведение; -
              • Версионировать при старте - версии сохраняются только после запуска бизнес-процесса; применимо только для бизнес-процессов; -
              • По умолчанию - установить рекомендуемые настройки (для справочников - не версионировать, для документов - версионировать при проведении).
            • -
              Также возможна настройка версионирования сразу для группы объектов программы, например, можно выбрать все документы или справочники.

            Выбор срока хранения версий

            +
          • Когда сохранять версии - выбранный вариант хранения версий; +
          • Срок хранения версий - выбранный срок хранения версий.

          Выбор варианта хранения истории изменений объектов

          +
          • Выберите один или несколько объектов, затем нажмите кнопку Установить когда сохранять версии, из выпадающего списка выберите нужный вариант хранения версий для каждого типа документов и справочников (также можно найти команду в меню Еще или в контекстном меню по правой кнопке мыши): +
            • Никогда - история версий объекта не ведется; +
            • При записи - новая запись заносится в историю версий каждый раз при изменении (или создании нового) справочника или документа; +
            • При проведении (для документов) - версии сохраняются только при проведении; применимо только для документов, для которых разрешено проведение; +
            • При старте (для бизнес-процессов) - версии сохраняются только после запуска бизнес-процесса; применимо только для бизнес-процессов; +
            • По умолчанию - установить рекомендуемые настройки (для справочников - никогда (не создавать версии), для документов - создавать версии при проведении, для бизнес-процессов - создавать версии при старте).
          • +
            Также возможна настройка хранения версий сразу для группы объектов программы, например, можно выбрать все документы или справочники.

          Выбор срока хранения версий

          • Нажмите кнопку Установить срок хранения версий, затем из выпадающего списка выберите нужный срок хранения версий для каждого типа документов и справочников: версии можно хранить За последнюю неделю, За последний месяц, За последние три месяца, За последние шесть месяцев, За последний год и Бессрочно.

          Просмотр отчета "Количество и объем хранимых версий объектов"

          • @@ -25,15 +24,15 @@
          • Для того чтобы Автоматически удалять устаревшие версии, включите соответствующий флажок.
          • -
            Перейдите по соответствующей ссылке, для того чтобы Настроить расписание. Настроенное расписание выводится в нижней части окна.

          Применение версионирования

          -
          • В начале внедрения программы, когда объемы информации еще небольшие, когда исполнители делают много ошибок в работе (например, вводят лишнюю информацию или нечаянно удаляют нужную), версионирование может помочь привести списки и документы в порядок, избавиться от допущенных ошибок, помочь исполнителям понять свои ошибочные действия и не допускать их в дальнейшей работе. -
          • Благодаря версионированию объектов можно вернуться к какой-либо предыдущей версии документа или элемента справочника, которая была наиболее полной или более правильной в отличие от последнего состояния. -
          • В дальнейшем, когда объемы информации в программе возрастают, можно постепенно отказываться от версионирования некоторых объектов вообще или вести версионирование только в важные моменты, например, при проведении документов. +
            Перейдите по соответствующей ссылке, для того чтобы Настроить расписание. Настроенное расписание выводится в нижней части окна.

          Применение хранения версий объектов

          +
          • В начале внедрения программы, когда объемы информации еще небольшие, когда исполнители делают много ошибок в работе (например, вводят лишнюю информацию или нечаянно удаляют нужную), хранение версий может помочь привести списки и документы в порядок, избавиться от допущенных ошибок, помочь исполнителям понять свои ошибочные действия и не допускать их в дальнейшей работе. +
          • Благодаря хранению версий объектов можно вернуться к какой-либо предыдущей версии документа или элемента справочника, которая была наиболее полной или более правильной в отличие от последнего состояния. +
          • В дальнейшем, когда объемы информации в программе возрастают, можно постепенно отказываться от хранения версий некоторых объектов вообще или вести историю версий только в важные моменты, например, при проведении документов.
          • -
            Версионирование большого количества объектов может привести к увеличению объема хранимой в программе информации из-за хранения их версий, что может существенно замедлить работу программы. Поэтому рекомендуется использовать эту возможность избирательно.

          Особенности режима "Версионировать при проведении"

          +
          Хранение версий большого количества объектов может привести к увеличению объема хранимой в программе информации из-за хранения их версий, что может существенно замедлить работу программы. Поэтому рекомендуется использовать эту возможность избирательно.

        Особенности режима "При проведении"

        • -
          Если у документа установлен режим Версионировать при проведении, то первая версия документа будет записана в историю только после первого проведения документа. Впоследствии версии документа будут записываться при каждой записи проведенного документа. Режим позволяет не создавать версии новых и не заполненных окончательно документов, для того чтобы не увеличивать объем хранимой в программе информации. Рекомендуется применять эту настройку для всех документов.

        Особенности режима "Версионировать при старте"

        +
        Если у документа установлен режим При проведении, то первая версия документа будет записана в историю только после первого проведения документа. Впоследствии версии документа будут записываться при каждой записи проведенного документа. Режим позволяет не создавать версии новых и не заполненных окончательно документов, для того чтобы не увеличивать объем хранимой в программе информации. Рекомендуется применять эту настройку для всех документов.

      Особенности режима "При старте"

      • -
        Если у бизнес-процесса установлен режим Версионировать при старте, то первая версия будет записана только после его старта. Режим позволяет не создавать лишние версии бизнес-процессов в то время, пока их подготавливают к запуску.

      См. также:

      +
      Если у бизнес-процесса установлен режим При старте, то первая версия будет записана только после его старта. Режим позволяет не создавать лишние версии бизнес-процессов в то время, пока их подготавливают к запуску.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl index e6e3d1625..ce7a0b451 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl @@ -136,6 +136,7 @@ Процедура ДеревоОбъектовМетаданныхДействиеОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + УстановитьДействиеДляВыбранныхОбъектов( ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.НеОчищать")); @@ -173,6 +174,10 @@ &НаКлиенте Процедура УстановитьДействиеОчиститьВерсии(Команда) + Если Не МожноОчищатьВерсии() Тогда + Возврат; + КонецЕсли; + УстановитьДействиеДляВыбранныхОбъектов( ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьВерсии")); @@ -189,11 +194,29 @@ &НаКлиенте Процедура УстановитьДействиеОчиститьФайлыИВерсии(Команда) + Если Не МожноОчищатьВерсии() Тогда + Возврат; + КонецЕсли; + УстановитьДействиеДляВыбранныхОбъектов( ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьФайлыИВерсии")); КонецПроцедуры +&НаКлиенте +Функция МожноОчищатьВерсии() + Если Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки.Количество() = 1 Тогда + ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + Если Не ТекущиеДанные.ЭтоФайл + И ТекущиеДанные.ВладелецФайла <> Неопределено Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Для данного объекта версии файлов не хранятся.'")); + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; +КонецФункции + &НаКлиенте Процедура СтаршеМесяца(Команда) УстановитьПериодОчисткиДляВыбранныхОбъектов( @@ -435,19 +458,39 @@ Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ЭлементДерева.ПолучитьРодителя() = Неопределено Тогда + Если ЭлементДерева.ПолучитьРодителя() = Неопределено Тогда Для Каждого ПодчиненныйЭлементДерева Из ЭлементДерева.ПолучитьЭлементы() Цикл - УстановитьДействиеВыбранногоОбъекта(ПодчиненныйЭлементДерева, Действие); + УстановитьДействиеВыбранногоОбъектаСРекурсией(ПодчиненныйЭлементДерева, Действие); КонецЦикла; Иначе - УстановитьДействиеВыбранногоОбъекта(ЭлементДерева, Действие); + УстановитьДействиеВыбранногоОбъектаСРекурсией(ЭлементДерева, Действие); КонецЕсли; КонецЦикла; КонецПроцедуры &НаСервере -Процедура УстановитьДействиеВыбранногоОбъекта(ВыбранныйОбъект, Действие) +Процедура УстановитьДействиеВыбранногоОбъектаСРекурсией(ВыбранныйОбъект, Знач Действие) + + УстановитьДействиеВыбранногоОбъекта(ВыбранныйОбъект, Действие); + Для Каждого ДочернийОбъект Из ВыбранныйОбъект.ПолучитьЭлементы() Цикл + УстановитьДействиеВыбранногоОбъекта(ДочернийОбъект, Действие); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьДействиеВыбранногоОбъекта(ВыбранныйОбъект, Знач Действие) + + Если Не ВыбранныйОбъект.ЭтоФайл Тогда + Если Действие = ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьВерсии") Тогда + Возврат; + ИначеЕсли Действие = ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьФайлыИВерсии") Тогда + Действие = ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьФайлы"); + КонецЕсли; + ИначеЕсли Действие = ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьФайлы") Тогда + Действие = ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьФайлыИВерсии"); + КонецЕсли; ВыбранныйОбъект.Действие = Действие; ЗаписатьТекущиеНастройкиПоОбъекту( diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl index 4be43eaf7..1814e2ca9 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl @@ -659,7 +659,7 @@ ВозможныеПрава.Колонки.Добавить("ЧтениеВТаблицах", Новый ОписаниеТипов("Массив")); ВозможныеПрава.Колонки.Добавить("ИзменениеВТаблицах", Новый ОписаниеТипов("Массив")); - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов(ВозможныеПрава); + ИнтеграцияПодсистемБСП.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов(ВозможныеПрава); УправлениеДоступомПереопределяемый.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов(ВозможныеПрава); ЗаголовокОшибки = diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form index 7e74a2417..a51b93b22 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form @@ -262,8 +262,8 @@ ДеревоОбъектовМетаданныхПередУдалением - ChoiceProcessing - ДеревоОбъектовМетаданныхОбработкаВыбора + OnActivateRow + ДеревоОбъектовМетаданныхПриАктивизацииСтроки ДеревоОбъектовМетаданныхСтрокаПоиска @@ -564,6 +564,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -775,21 +776,107 @@ ФормаКоманднаяПанель -1 - - ФормаДобавитьСинхронизациюФайлов - 78 - - <key>ru</key> - <value>Настроить синхронизацию файлов</value> - + + ФормаГруппаРедактирование + 108 + + ФормаДобавитьСинхронизациюФайлов + 78 + + <key>ru</key> + <value>Настроить синхронизацию файлов</value> + + true + true + + true + + + ФормаДобавитьСинхронизациюФайловРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + Form.Command.СоздатьСинхронизациюФайлов + Normal + PictureAndText + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + ФормаИзменитьНастройкуСинхронизации + 106 + true + true + + true + + + ФормаИзменитьНастройкуСинхронизацииРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + Form.Command.ИзменитьНастройкуСинхронизации + Normal + Auto + true + true + UserCmds + Auto + + + ФормаДеревоОбъектовМетаданныхУдалить + 102 + true + true + + true + + + ФормаДеревоОбъектовМетаданныхУдалитьРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + Form.Item.ДеревоОбъектовМетаданных.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true true + + <key>ru</key> + <value>Панель редактирование</value> + - ФормаДобавитьСинхронизациюФайловРасширеннаяПодсказка - 79 + ФормаГруппаРедактированиеРасширеннаяПодсказка + 109 Label true true @@ -797,16 +884,7 @@ Left - Form.Command.СоздатьСинхронизациюФайлов - Normal - PictureAndText - true - true - UserCmds - - StdPicture.CreateListItem - - Auto + НастройкиСинхронизацииГруппа @@ -915,13 +993,33 @@ Normal + + ФормаГруппаСинхронизация + 112 + true + true + + true + + + <key>ru</key> + <value>Форма группа синхронизация</value> + + + ФормаГруппаСинхронизацияРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + Left true - - ChoiceProcessing - ОбработкаВыбора - OnCreateAtServer ПриСозданииНаСервере @@ -1317,6 +1415,7 @@ true + F2 StdPicture.Change diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl index 0b2a30002..c149390df 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl @@ -12,20 +12,20 @@ Если Параметры.Свойство("ВладелецФайла") Тогда ТекущийВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Параметры.ВладелецФайла)); - ВладелецФайла = Параметры.ВладелецФайла; + ВладелецФайла = Параметры.ВладелецФайла; КонецЕсли; ЗаполнитьТипыОбъектовВДеревеЗначений(); - АвтоматическиСинхронизироватьФайлы = АвтоматическаяСинхронизацияВключена(); - Элементы.Расписание.Заголовок = ТекущееРасписание(); + АвтоматическиСинхронизироватьФайлы = АвтоматическаяСинхронизацияВключена(); - Элементы.Расписание.Доступность = АвтоматическиСинхронизироватьФайлы; + Элементы.Расписание.Заголовок = ТекущееРасписание(); + Элементы.Расписание.Доступность = АвтоматическиСинхронизироватьФайлы; Элементы.НастроитьРасписание.Доступность = АвтоматическиСинхронизироватьФайлы; Если ОбщегоНазначения.РазделениеВключено() Тогда Элементы.НастроитьРасписание.Видимость = Ложь; - Элементы.Расписание.Видимость = Ложь; + Элементы.Расписание.Видимость = Ложь; КонецЕсли; КонецПроцедуры @@ -39,15 +39,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - - Если ИсточникВыбора.ИмяФормы = "РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ФормаЗаписиНастройки" Тогда - ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоОбъектовМетаданных @@ -56,6 +47,7 @@ Процедура ДеревоОбъектовМетаданныхСинхронизироватьПриИзменении(Элемент) ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + Модифицированность = Истина; Если Не ЗначениеЗаполнено(ТекущиеДанные.УчетнаяЗапись) Тогда ТекущиеДанные.Синхронизировать = Ложь; @@ -63,7 +55,7 @@ Возврат; КонецЕсли; - Если ТекущиеДанные.ПолучитьЭлементы().Количество() > 0 Тогда + Если ТекущиеДанные.ПолучитьЭлементы().Количество() > 1 Тогда УстановитьЗначениеСинхронизацииПодчиненнымОбъектам(ТекущиеДанные.Синхронизировать); Иначе ЗаписатьТекущиеНастройки(); @@ -71,13 +63,26 @@ КонецПроцедуры +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхПриАктивизацииСтроки(Элемент) + + ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + + Если ТекущиеДанные <> Неопределено Тогда + ЕстьНастройки = ЗначениеЗаполнено(ТекущиеДанные.УчетнаяЗапись); + Элементы.ДеревоОбъектовМетаданныхКонтекстноеМенюУдалить.Доступность = ЕстьНастройки; + Элементы.ФормаДеревоОбъектовМетаданныхУдалить.Доступность = ЕстьНастройки; + Элементы.ФормаИзменитьНастройкуСинхронизации.Доступность = ЕстьНастройки; + Элементы.ДеревоОбъектовМетаданныхКонтекстноеМенюИзменитьНастройкуСинхронизации.Доступность = ЕстьНастройки; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ДеревоОбъектовМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Если Поле.Имя = "ДеревоОбъектовМетаданныхПравилоОтбора" Тогда - СтандартнаяОбработка = Ложь; - ОткрытьФормуНастроек(); - КонецЕсли; + СтандартнаяОбработка = Ложь; + ОткрытьФормуНастроек(); КонецПроцедуры @@ -89,14 +94,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ДеревоОбъектовМетаданныхОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение); - -КонецПроцедуры - &НаКлиенте Процедура ДеревоОбъектовМетаданныхПередУдалением(Элемент, Отказ) @@ -212,120 +209,133 @@ ТаблицаТипов.Колонки.Добавить("ВладелецФайла"); ТаблицаТипов.Колонки.Добавить("ТипВладельцаФайла"); ТаблицаТипов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); - ТаблицаТипов.Колонки.Добавить("ВозможностьДетализации" , Новый ОписаниеТипов("Булево")); + ТаблицаТипов.Колонки.Добавить("ВозможностьДетализации", Новый ОписаниеТипов("Булево")); ВидИерархииГруппИЭлементов = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; + МассивИсключений = РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(); Для Каждого Справочник Из МетаданныеСправочники Цикл + Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл - Если МассивИсключений.Найти(Справочник) <> Неопределено Тогда + МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); + Если МассивИсключений.Найти(МетаданныеВладельца) <> Неопределено Тогда Продолжить; КонецЕсли; - - НоваяСтрока = ТаблицаТипов.Добавить(); - НоваяСтрока.ВладелецФайла = ТипВладельца; - НоваяСтрока.ТипВладельцаФайла = Справочник; - МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); - Если МетаданныеСправочники.Найти(МетаданныеВладельца.Имя) <> Неопределено Тогда - НоваяСтрока.ВозможностьДетализации = Истина; - КонецЕсли; - Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда - НоваяСтрока.ЭтоФайл = Истина; - КонецЕсли; + + НоваяСтрока = ТаблицаТипов.Добавить(); + НоваяСтрока.ВладелецФайла = ТипВладельца; + НоваяСтрока.ТипВладельцаФайла = Справочник; + НоваяСтрока.ВозможностьДетализации = Истина; + НоваяСтрока.ЭтоФайл = Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы"); + КонецЦикла; + КонецЕсли; + КонецЦикла; - ВсеСправочники = Справочники.ТипВсеСсылки(); + ВсеСправочники = Справочники.ТипВсеСсылки(); + ВсеДокументы = Документы.ТипВсеСсылки(); + Узлы = Новый Соответствие; - ВсеДокументы = Документы.ТипВсеСсылки(); - УзелСправочники = Неопределено; - УзелДокументы = Неопределено; - УзелБизнесПроцессы = Неопределено; Для Каждого Тип Из ТаблицаТипов Цикл НастройкаИмеетГлобальныеПравила = Ложь; Если ВсеСправочники.СодержитТип(Тип.ВладелецФайла) Тогда - Если УзелСправочники = Неопределено Тогда + Если Узлы["Справочники"] = Неопределено Тогда УзелСправочники = ДеревоОМ.Строки.Добавить(); УзелСправочники.СинонимНаименованияОбъекта = НСтр("ru = 'Справочники'"); + Узлы.Вставить("Справочники", УзелСправочники); КонецЕсли; - НоваяСтрокаТаблицы = УзелСправочники.Строки.Добавить(); - - ИдентификаторОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); - ДетализированныеНастройки = НастройкиСинхронизации.НайтиСтроки(Новый Структура( - "ВладелецФайла, ЭтоФайл", - ИдентификаторОбъекта, Тип.ЭтоФайл)); - Если ДетализированныеНастройки.Количество() > 1 Тогда - НастройкаИмеетГлобальныеПравила = Истина; - Для Каждого Настройка Из ДетализированныеНастройки Цикл - ПравилоОтбора = Настройка.ПравилоОтбора.Получить(); - ДетализированнаяНастройка = НоваяСтрокаТаблицы.Строки.Добавить(); - ДетализированнаяНастройка.ВладелецФайла = Настройка.ВладелецФайла; - ДетализированнаяНастройка.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; - ЕстьПравилоОтбора = Ложь; - Если ПравилоОтбора <> Неопределено Тогда - ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; - КонецЕсли; - Если Не ПустаяСтрока(Настройка.Наименование) Тогда - ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.Наименование; - Иначе - ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.ВладелецФайла.Синоним; - КонецЕсли; - ДетализированнаяНастройка.Синхронизировать = Настройка.Синхронизировать; - ДетализированнаяНастройка.УчетнаяЗапись = Настройка.УчетнаяЗапись; - ДетализированнаяНастройка.ПравилоОтбора = - ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); - ДетализированнаяНастройка.ЭтоФайл = Настройка.ЭтоФайл; - КонецЦикла; - КонецЕсли; - - ИдентификаторОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); - ДетализированныеНастройки = НастройкиСинхронизации.НайтиСтроки(Новый Структура( - "ИдентификаторВладельца, ЭтоФайл", - ИдентификаторОбъекта, Тип.ЭтоФайл)); - Если ДетализированныеНастройки.Количество() > 0 Тогда - Для Каждого Настройка Из ДетализированныеНастройки Цикл - ПравилоОтбора = Настройка.ПравилоОтбора.Получить(); - ДетализированнаяНастройка = НоваяСтрокаТаблицы.Строки.Добавить(); - ДетализированнаяНастройка.ВладелецФайла = Настройка.ВладелецФайла; - ДетализированнаяНастройка.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; - ЕстьПравилоОтбора = Ложь; - Если ПравилоОтбора <> Неопределено Тогда - ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; - КонецЕсли; - Если Не ПустаяСтрока(Настройка.Наименование) Тогда - ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.Наименование; - Иначе - ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.ВладелецФайла; - КонецЕсли; - ЕстьПравилоОтбора = Ложь; - Если ПравилоОтбора <> Неопределено Тогда - ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; - КонецЕсли; - ДетализированнаяНастройка.Синхронизировать = Настройка.Синхронизировать; - ДетализированнаяНастройка.УчетнаяЗапись = Настройка.УчетнаяЗапись; - ДетализированнаяНастройка.ПравилоОтбора = - ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); - ДетализированнаяНастройка.ЭтоФайл = Настройка.ЭтоФайл; - КонецЦикла; - КонецЕсли; + НоваяСтрокаТаблицы = Узлы["Справочники"].Строки.Добавить(); ИначеЕсли ВсеДокументы.СодержитТип(Тип.ВладелецФайла) Тогда - Если УзелДокументы = НеОпределено Тогда + + Если Узлы["Документы"] = Неопределено Тогда УзелДокументы = ДеревоОМ.Строки.Добавить(); УзелДокументы.СинонимНаименованияОбъекта = НСтр("ru = 'Документы'"); + Узлы.Вставить("Документы", УзелДокументы); КонецЕсли; - НоваяСтрокаТаблицы = УзелДокументы.Строки.Добавить(); + НоваяСтрокаТаблицы = Узлы["Документы"].Строки.Добавить(); ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип.ВладелецФайла) Тогда - Если УзелБизнесПроцессы = Неопределено Тогда + + Если Узлы["БизнесПроцессы"] = Неопределено Тогда УзелБизнесПроцессы = ДеревоОМ.Строки.Добавить(); УзелБизнесПроцессы.СинонимНаименованияОбъекта = НСтр("ru = 'Бизнес-процессы'"); + Узлы.Вставить("БизнесПроцессы", УзелБизнесПроцессы); КонецЕсли; - НоваяСтрокаТаблицы = УзелБизнесПроцессы.Строки.Добавить(); + НоваяСтрокаТаблицы = Узлы["БизнесПроцессы"].Строки.Добавить(); КонецЕсли; + + ИдентификаторОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); + Отбор = Новый Структура("ВладелецФайла, ЭтоФайл", ИдентификаторОбъекта, Тип.ЭтоФайл); + ДетализированныеНастройки = НастройкиСинхронизации.НайтиСтроки(Отбор); + Если ДетализированныеНастройки.Количество() > 1 Тогда + НастройкаИмеетГлобальныеПравила = Истина; + Для Каждого Настройка Из ДетализированныеНастройки Цикл + ПравилоОтбора = Настройка.ПравилоОтбора.Получить(); + ДетализированнаяНастройка = НоваяСтрокаТаблицы.Строки.Добавить(); + ДетализированнаяНастройка.ВладелецФайла = Настройка.ВладелецФайла; + ДетализированнаяНастройка.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; + + ЕстьПравилоОтбора = Ложь; + Если ПравилоОтбора <> Неопределено Тогда + ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; + КонецЕсли; + + Если Не ПустаяСтрока(Настройка.Наименование) Тогда + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.Наименование; + Иначе + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.ВладелецФайла.Синоним; + КонецЕсли; + + ДетализированнаяНастройка.Синхронизировать = Настройка.Синхронизировать; + ДетализированнаяНастройка.УчетнаяЗапись = Настройка.УчетнаяЗапись; + ДетализированнаяНастройка.ЭтоФайл = Настройка.ЭтоФайл; + ДетализированнаяНастройка.ПравилоОтбора = + ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); + + КонецЦикла; + КонецЕсли; + + ИдентификаторОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); + Отбор = Новый Структура("ИдентификаторВладельца, ЭтоФайл", ИдентификаторОбъекта, Тип.ЭтоФайл); + ДетализированныеНастройки = НастройкиСинхронизации.НайтиСтроки(Отбор); + Если ДетализированныеНастройки.Количество() > 0 Тогда + Для Каждого Настройка Из ДетализированныеНастройки Цикл + ПравилоОтбора = Настройка.ПравилоОтбора.Получить(); + ДетализированнаяНастройка = НоваяСтрокаТаблицы.Строки.Добавить(); + ДетализированнаяНастройка.ВладелецФайла = Настройка.ВладелецФайла; + ДетализированнаяНастройка.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; + + ЕстьПравилоОтбора = Ложь; + Если ПравилоОтбора <> Неопределено Тогда + ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; + КонецЕсли; + + Если Не ПустаяСтрока(Настройка.Наименование) Тогда + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.Наименование; + Иначе + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.ВладелецФайла; + КонецЕсли; + + ЕстьПравилоОтбора = Ложь; + Если ПравилоОтбора <> Неопределено Тогда + ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; + КонецЕсли; + + ДетализированнаяНастройка.Синхронизировать = Настройка.Синхронизировать; + ДетализированнаяНастройка.УчетнаяЗапись = Настройка.УчетнаяЗапись; + ДетализированнаяНастройка.ЭтоФайл = Настройка.ЭтоФайл; + ДетализированнаяНастройка.ПравилоОтбора = + ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); + + КонецЦикла; + КонецЕсли; + МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип.ВладелецФайла); НоваяСтрокаТаблицы.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); НоваяСтрокаТаблицы.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ТипВладельцаФайла); @@ -334,20 +344,29 @@ НоваяСтрокаТаблицы.ВозможностьДетализации = Тип.ВозможностьДетализации; Если Не НастройкаИмеетГлобальныеПравила Тогда - НайденныеНастройки = НастройкиСинхронизации.НайтиСтроки(Новый Структура("ВладелецФайла, ЭтоФайл", НоваяСтрокаТаблицы.ВладелецФайла, НоваяСтрокаТаблицы.ЭтоФайл)); + + Отбор = Новый Структура("ВладелецФайла, ЭтоФайл", НоваяСтрокаТаблицы.ВладелецФайла, НоваяСтрокаТаблицы.ЭтоФайл); + НайденныеНастройки = НастройкиСинхронизации.НайтиСтроки(Отбор); + Если НайденныеНастройки.Количество() > 0 Тогда + ПравилоОтбора = НайденныеНастройки[0].ПравилоОтбора.Получить(); - ЕстьПравилоОтбора = Ложь; - Если ПравилоОтбора <> Неопределено Тогда - ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; - КонецЕсли; + НоваяСтрокаТаблицы.Синхронизировать = НайденныеНастройки[0].Синхронизировать; НоваяСтрокаТаблицы.УчетнаяЗапись = НайденныеНастройки[0].УчетнаяЗапись; - НоваяСтрокаТаблицы.ПравилоОтбора = ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); + Если ПравилоОтбора <> Неопределено И ПравилоОтбора.Отбор.Элементы.Количество() > 0 Тогда + НоваяСтрокаТаблицы.ПравилоОтбора = ?(ПустаяСтрока(НайденныеНастройки[0].Наименование), НСтр("ru = 'Выбранные файлы'"), НайденныеНастройки[0].Наименование); + Иначе + НоваяСтрокаТаблицы.ПравилоОтбора = НСтр("ru = 'Все файлы'"); + КонецЕсли; + Иначе + НоваяСтрокаТаблицы.Синхронизировать = Перечисления.ВариантыОчисткиФайлов.НеОчищать; НоваяСтрокаТаблицы.ПравилоОтбора = НСтр("ru = 'Все файлы'"); + КонецЕсли; + КонецЕсли; КонецЦикла; @@ -371,30 +390,29 @@ КонецПроцедуры -&НаСервере -Процедура ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение) +&НаКлиенте +Процедура УстановитьНастройкиОтбора(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт Если ВыбранноеЗначение = Неопределено Тогда Возврат КонецЕсли; - СтрокаВладелец = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(Элементы.ДеревоОбъектовМетаданных.ТекущаяСтрока); + СтрокаВладелец = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ДополнительныеПараметры.Идентификатор); - Если ВыбранноеЗначение.НоваяНастройка Тогда - ЭлементВладелец = СтрокаВладелец.ПолучитьЭлементы(); + Если СтрокаВладелец.ВладелецФайла <> ВыбранноеЗначение.ВладелецФайла Тогда + ЭлементВладелец = СтрокаВладелец.ПолучитьЭлементы(); ОбновляемаяСтрока = ЭлементВладелец.Добавить(); + Если НЕ ВыбранноеЗначение.НоваяНастройка Тогда + СтрокаВладелец.Синхронизировать = Ложь; + КонецЕсли; + ЗаписатьТекущиеНастройки(); Иначе ОбновляемаяСтрока = СтрокаВладелец; КонецЕсли; - ПравилоОтбора = ВыбранноеЗначение.Правило.Получить(); - ЕстьПравилоОтбора = Ложь; - Если ПравилоОтбора <> Неопределено Тогда - ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; - КонецЕсли; ЗаполнитьЗначенияСвойств(ОбновляемаяСтрока, ВыбранноеЗначение); - - Если ЕстьПравилоОтбора Тогда + + Если ВыбранноеЗначение.ЕстьПравилоОтбора Тогда ОбновляемаяСтрока.ПравилоОтбора = ?( ЗначениеЗаполнено(ВыбранноеЗначение.Наименование), ВыбранноеЗначение.Наименование, НСтр("ru = 'Выбранные файлы'")); Иначе @@ -432,13 +450,15 @@ &НаСервере Процедура ЗаписатьТекущиеНастройкиПоОбъекту(ВладелецФайла, ТипВладельцаФайла, Синхронизировать, УчетнаяЗапись, ЭтоФайл) - Настройка = РегистрыСведений.НастройкиСинхронизацииФайлов.СоздатьМенеджерЗаписи(); - Настройка.ВладелецФайла = ВладелецФайла; + + Настройка = РегистрыСведений.НастройкиСинхронизацииФайлов.СоздатьМенеджерЗаписи(); + Настройка.ВладелецФайла = ВладелецФайла; Настройка.ТипВладельцаФайла = ТипВладельцаФайла; - Настройка.Синхронизировать = Синхронизировать; - Настройка.УчетнаяЗапись = УчетнаяЗапись; - Настройка.ЭтоФайл = ЭтоФайл; + Настройка.Синхронизировать = Синхронизировать; + Настройка.УчетнаяЗапись = УчетнаяЗапись; + Настройка.ЭтоФайл = ЭтоФайл; Настройка.Записать(); + КонецПроцедуры &НаКлиенте @@ -452,9 +472,9 @@ КонецЕсли; Отбор = Новый Структура; - Отбор.Вставить("ВладелецФайла", ТекущиеДанные.ВладелецФайла); + Отбор.Вставить("ВладелецФайла", ТекущиеДанные.ВладелецФайла); Отбор.Вставить("ТипВладельцаФайла", ТекущиеДанные.ТипВладельцаФайла); - Отбор.Вставить("УчетнаяЗапись", ТекущиеДанные.УчетнаяЗапись); + Отбор.Вставить("УчетнаяЗапись", ТекущиеДанные.УчетнаяЗапись); Если ЗначениеЗаполнено(ТекущиеДанные.УчетнаяЗапись) Тогда @@ -471,7 +491,16 @@ ПараметрыЗаписи.Вставить("ЭтоФайл", ТекущиеДанные.ЭтоФайл); КонецЕсли; - ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ФормаЗаписиНастройки", ПараметрыЗаписи, ЭтотОбъект); + ДополнительныеПараметры = Новый Структура(); + + Если ТекущиеДанные.ВозможностьДетализации Тогда + ДополнительныеПараметры.Вставить("Идентификатор", ТекущиеДанные.ПолучитьИдентификатор()); + Иначе + ДополнительныеПараметры.Вставить("Идентификатор", ТекущиеДанные.ПолучитьРодителя().ПолучитьИдентификатор()); + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("УстановитьНастройкиОтбора", ЭтотОбъект, ДополнительныеПараметры); + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ФормаЗаписиНастройки", ПараметрыЗаписи, ЭтотОбъект,,,, Оповещение); КонецПроцедуры @@ -484,41 +513,50 @@ КонецФункции &НаСервере -Процедура ОчиститьДанныеНастройки() +Функция ОчиститьДанныеНастройки() - НастройкаДляУдаления = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(Элементы.ДеревоОбъектовМетаданных.ТекущаяСтрока); + ПараметрыВызоваСервера = Новый Структура(); - Если ЗначениеЗаполнено(НастройкаДляУдаления.УчетнаяЗапись) Тогда - МенеджерЗаписи = РегистрыСведений.НастройкиСинхронизацииФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ВладелецФайла = НастройкаДляУдаления.ВладелецФайла; - МенеджерЗаписи.ТипВладельцаФайла = НастройкаДляУдаления.ТипВладельцаФайла; - МенеджерЗаписи.УчетнаяЗапись = НастройкаДляУдаления.УчетнаяЗапись; - МенеджерЗаписи.ЭтоФайл = НастройкаДляУдаления.ЭтоФайл; - МенеджерЗаписи.Прочитать(); - МенеджерЗаписи.Удалить(); - - РодительЭлементаНастроек = НастройкаДляУдаления.ПолучитьРодителя(); - Если РодительЭлементаНастроек <> Неопределено Тогда - // Родительскую настройку удалять из дерева не нужно, достаточно очистить настраиваемые поля. - НастройкаДляУдаления.ПодПапкаОблачногоСервиса = ""; - НастройкаДляУдаления.ПравилоОтбора = ""; - НастройкаДляУдаления.Синхронизировать = Ложь; - НастройкаДляУдаления.УчетнаяЗапись = Неопределено; - Если Не НастройкаДляУдаления.ВозможностьДетализации Тогда - РодительЭлементаНастроек.ПолучитьЭлементы().Удалить(НастройкаДляУдаления); - КонецЕсли; - Иначе - ДеревоОбъектовМетаданных.ПолучитьЭлементы().Удалить(НастройкаДляУдаления); - КонецЕсли; + ПараметрыВыполненияВФоне = ДлительныеОперации.ПараметрыВыполненияВФоне(ЭтотОбъект.УникальныйИдентификатор); + ПараметрыВыполненияВФоне.НаименованиеФоновогоЗадания = НСтр("ru = 'Подсистема Работа с файлам: Отключение синхронизации файлов с облачным сервисом'"); + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне("РаботаСФайламиСлужебный.ОсвободитьЗахваченныеФайлыФон", + ПараметрыВызоваСервера, ПараметрыВыполненияВФоне); + + Возврат ФоновоеЗадание; + +КонецФункции + +&НаКлиенте +Процедура ОчиститьДанныеНастройкиЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(Результат) <> Тип("Структура") ИЛИ НЕ Результат.Свойство("Статус") ИЛИ Результат.Статус <> "Выполнено" Тогда + Возврат; КонецЕсли; + ОчиститьДанныеНастройкиНаСервере(ДополнительныеПараметры.ТекущаяСтрока); + КонецПроцедуры &НаКлиенте Процедура УдалитьНастройкуЗавершение(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда - ОчиститьДанныеНастройки(); + + НастройкаДляУдаления = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(Элементы.ДеревоОбъектовМетаданных.ТекущаяСтрока); + НастройкаДляУдаления.Синхронизировать = Ложь; + УстановитьЗначениеСинхронизацииПодчиненнымОбъектам(Ложь); + ЗаписатьТекущиеНастройки(); + + ДополнительныеПараметрыВызова = Новый Структура(); + ДополнительныеПараметрыВызова.Вставить("ТекущаяСтрока", Элементы.ДеревоОбъектовМетаданных.ТекущаяСтрока); + + ФоновоеЗадание = ОчиститьДанныеНастройки(); + НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + НастройкиОжидания.ВыводитьОкноОжидания = Истина; + Обработчик = Новый ОписаниеОповещения("ОчиститьДанныеНастройкиЗавершение", ЭтотОбъект, ДополнительныеПараметрыВызова); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, Обработчик, НастройкиОжидания); + КонецЕсли; КонецПроцедуры @@ -531,13 +569,23 @@ Возврат; КонецЕсли; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВладелецФайла", СтрокаДерева.ВладелецФайла); - ПараметрыФормы.Вставить("ТипВладельцаФайла", СтрокаДерева.ТипВладельцаФайла); - ПараметрыФормы.Вставить("ЭтоФайл", СтрокаДерева.ЭтоФайл); - ПараметрыФормы.Вставить("НоваяНастройка", Истина); + Если СтрокаДерева.ВозможностьДетализации Тогда + ВладелецФайла = СтрокаДерева.ВладелецФайла; + Идентификатор = СтрокаДерева.ПолучитьИдентификатор(); + Иначе + ВладелецФайла = СтрокаДерева.ПолучитьРодителя().ВладелецФайла; + Идентификатор = СтрокаДерева.ПолучитьРодителя().ПолучитьИдентификатор(); + КонецЕсли; - ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ФормаЗаписиНастройки", ПараметрыФормы, ЭтотОбъект); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайла); + ПараметрыФормы.Вставить("ТипВладельцаФайла", СтрокаДерева.ТипВладельцаФайла); + ПараметрыФормы.Вставить("ЭтоФайл", СтрокаДерева.ЭтоФайл); + ПараметрыФормы.Вставить("НоваяНастройка", Истина); + ПараметрыФормы.Вставить("Идентификатор", Идентификатор); + + Оповещение = Новый ОписаниеОповещения("УстановитьНастройкиОтбора", ЭтотОбъект, ПараметрыФормы); + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ФормаЗаписиНастройки", ПараметрыФормы, ЭтотОбъект,,,, Оповещение); КонецПроцедуры @@ -674,12 +722,13 @@ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ДеревоОбъектовМетаданныхСинонимНаименованияОбъекта"); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОбъектовМетаданных.Синхронизировать"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОбъектовМетаданных.Синхронизировать"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь)); + // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); @@ -692,6 +741,7 @@ Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); @@ -710,4 +760,34 @@ КонецПроцедуры +&НаСервере +Процедура ОчиститьДанныеНастройкиНаСервере(Знач ТекущаяСтрока) + + НастройкаДляУдаления = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ТекущаяСтрока); + + Если ЗначениеЗаполнено(НастройкаДляУдаления.УчетнаяЗапись) Тогда + МенеджерЗаписи = РегистрыСведений.НастройкиСинхронизацииФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВладелецФайла = НастройкаДляУдаления.ВладелецФайла; + МенеджерЗаписи.ТипВладельцаФайла = НастройкаДляУдаления.ТипВладельцаФайла; + МенеджерЗаписи.УчетнаяЗапись = НастройкаДляУдаления.УчетнаяЗапись; + МенеджерЗаписи.ЭтоФайл = НастройкаДляУдаления.ЭтоФайл; + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.Удалить(); + + РодительЭлементаНастроек = НастройкаДляУдаления.ПолучитьРодителя(); + Если РодительЭлементаНастроек <> Неопределено Тогда + // Родительскую настройку удалять из дерева не нужно, достаточно очистить настраиваемые поля. + НастройкаДляУдаления.ПодПапкаОблачногоСервиса = ""; + НастройкаДляУдаления.ПравилоОтбора = ""; + НастройкаДляУдаления.Синхронизировать = Ложь; + НастройкаДляУдаления.УчетнаяЗапись = Неопределено; + Если Не НастройкаДляУдаления.ВозможностьДетализации Тогда + РодительЭлементаНастроек.ПолучитьЭлементы().Удалить(НастройкаДляУдаления); + КонецЕсли; + Иначе + ДеревоОбъектовМетаданных.ПолучитьЭлементы().Удалить(НастройкаДляУдаления); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl index dccd311eb..f72d31a5a 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl @@ -6,12 +6,14 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - + Если Параметры.Свойство("ВладелецФайла") Тогда Запись.ВладелецФайла = Параметры.ВладелецФайла; + Если Не ЗначениеЗаполнено(Параметры.Ключ) Тогда ИнициализироватьКомпоновщик(); КонецЕсли; + КонецЕсли; Если МассивРеквизитовСТипомДата.Количество() = 0 Тогда @@ -38,7 +40,8 @@ ЗаполнитьУчетнуюЗаписьСинхронизации(); КонецЕсли; - Если ТипЗнч(Запись.ВладелецФайла) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + ВладелецФайлаНеИдентификаторОбъектовМетаданных = ТипЗнч(Запись.ВладелецФайла) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"); + Если ВладелецФайлаНеИдентификаторОбъектовМетаданных Тогда ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Запись.ВладелецФайла)); ОбъектСинхронизации = "ТолькоФайлыЭлемента"; @@ -49,12 +52,11 @@ ЭлементСправочника = Запись.ВладелецФайла; СписокСуществующихНастроек.ЗагрузитьЗначения(СуществующиеОбъектыСинхронизации(ТипЗнч(Запись.ВладелецФайла))); - + Иначе - ОбъектСинхронизации = "ВсеФайлы"; - СписокСуществующихНастроек.ЗагрузитьЗначения(СуществующиеОбъектыСинхронизации(ТипЗнч(Запись.ВладелецФайла.ЗначениеПустойСсылки))); + ОбъектСинхронизации = "ВсеФайлы"; ИдентификаторВладельцаФайлов = Запись.ВладелецФайла; ПредставлениеТипВФ = Запись.ВладелецФайла.Наименование; @@ -63,8 +65,15 @@ КонецЕсли; + Если ЕстьНастройкаПравиламСинхронизации(Запись.ВладелецФайла) + И (НоваяНастройка ИЛИ ТипЗнч(Запись.ВладелецФайла) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")) Тогда + Элементы.ОбъектСинхронизацииВсеФайлы.ТолькоПросмотр = Истина; + Элементы.ПравилоСинхронизацииГруппа.ТолькоПросмотр = Истина; + ОбъектСинхронизации = "ТолькоФайлыЭлемента"; + КонецЕсли; + Заголовок = НСтр("ru='Настройка синхронизации файлов:'") + " " + ПредставлениеВладельцаДляЗаголовка; - + Элементы.ПравилоНастройкиОтбор.РасширеннаяПодсказка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ПравилоНастройкиОтбор.РасширеннаяПодсказка.Заголовок, ПредставлениеТипВФ); Элементы.ОбъектСинхронизацииВсеФайлы.СписокВыбора[0].Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОбъектСинхронизацииВсеФайлы.СписокВыбора[0].Представление, ПредставлениеТипВФ); @@ -127,8 +136,10 @@ Если ОбъектСинхронизации = "ТолькоФайлыЭлемента" Тогда ВозвращаемоеЗначение.Вставить("СинонимНаименованияОбъекта", ТекущийОбъект.ВладелецФайла); + ЕстьПравилоОтбора = Ложь; Иначе ВозвращаемоеЗначение.Вставить("СинонимНаименованияОбъекта", ИдентификаторВладельцаФайлов.Синоним); + ЕстьПравилоОтбора = Правило.ПолучитьНастройки().Отбор.Элементы.Количество() > 0; КонецЕсли; ВозвращаемоеЗначение.Вставить("НоваяНастройка", НоваяНастройка); ВозвращаемоеЗначение.Вставить("ВладелецФайла", ТекущийОбъект.ВладелецФайла); @@ -138,6 +149,7 @@ ВозвращаемоеЗначение.Вставить("УчетнаяЗапись", ТекущийОбъект.УчетнаяЗапись); ВозвращаемоеЗначение.Вставить("ЭтоФайл", ТекущийОбъект.ЭтоФайл); ВозвращаемоеЗначение.Вставить("Правило", ТекущийОбъект.ПравилоОтбора); + ВозвращаемоеЗначение.Вставить("ЕстьПравилоОтбора", ЕстьПравилоОтбора); КонецПроцедуры @@ -348,6 +360,30 @@ КонецФункции +&НаСервере +Функция ЕстьНастройкаПравиламСинхронизации(ВладелецФайла) + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ИСТИНА КАК ЕстьНастройкаПравиламСинхронизации + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + |ГДЕ + | НастройкиСинхронизацииФайлов.ВладелецФайла = &ВладелецФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат Ложь; + КонецЕсли; + + Результат = РезультатЗапроса.Выгрузить()[0]; + + Возврат ЗначениеЗаполнено(Результат.ЕстьНастройкаПравиламСинхронизации); + +КонецФункции + &НаСервере Процедура ЗаполнитьУчетнуюЗаписьСинхронизации() diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl index af61be941..177e3d6d0 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl @@ -44,20 +44,15 @@ ТаблицаВладельцевФайлов.Колонки.Добавить("ТипВладельцаФайла", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); ТаблицаВладельцевФайлов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); - МассивИсключений = РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(); - Для Каждого Справочник Из МетаданныеСправочники Цикл Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда - Если МассивИсключений.Найти(Справочник) <> Неопределено Тогда - Продолжить; - КонецЕсли; ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл - НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); - НоваяСтрока.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипВладельца); + НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); + НоваяСтрока.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипВладельца); НоваяСтрокаЗначениеПустойСсылкиВладельца = НоваяСтрока.ВладелецФайла.ЗначениеПустойСсылки; - НоваяСтрока.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Справочник); + НоваяСтрока.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Справочник); Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда НоваяСтрока.ЭтоФайл = Истина; КонецЕсли; @@ -65,6 +60,14 @@ КонецЕсли; КонецЦикла; + МассивИсключений = РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(); + Для каждого ОбъектИсключение Из МассивИсключений Цикл + НайденнаяСтрока = ТаблицаВладельцевФайлов.Найти(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектИсключение), "ВладелецФайла"); + Если НайденнаяСтрока <> Неопределено Тогда + ТаблицаВладельцевФайлов.Удалить(НайденнаяСтрока); + КонецЕсли; + КонецЦикла; + ВыборкаЗаписей = Выбрать(); Запрос = Новый Запрос; diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl index c5863c130..4ce9dcf22 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl @@ -70,7 +70,7 @@ Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника(); КонецЕсли; - ИнтеграцияСтандартныхПодсистем.ПриЗаполненииВсехПараметровРаботыРасширений(); + ИнтеграцияПодсистемБСП.ПриЗаполненииВсехПараметровРаботыРасширений(); КонецПроцедуры @@ -82,7 +82,7 @@ // Общий регистр ПараметрыРаботыВерсийРасширений очищается автоматически. Если используются // собственные регистры сведений, которых хранят версии кэшей объектов метаданных расширений, // тогда требуется подключиться к событию ПриОчисткеВсехПараметровРаботыРасширений -// общего модуля ИнтеграцияСтандартныхПодсистем. +// общего модуля ИнтеграцияПодсистемБСП. // Процедура ОчиститьВсеПараметрыРаботыРасширений() Экспорт @@ -104,7 +104,7 @@ НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(); - ИнтеграцияСтандартныхПодсистем.ПриОчисткеВсехПараметровРаботыРасширений(); + ИнтеграцияПодсистемБСП.ПриОчисткеВсехПараметровРаботыРасширений(); ЗафиксироватьТранзакцию(); Исключение diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl index adc97d932..8b16cbde6 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl @@ -574,6 +574,11 @@ МодульУправлениеДоступомСлужебный.ОбновитьПараметрыОграниченияДоступа(); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + МодульКонтрольВеденияУчетаСлужебный.ОбновитьПараметрыСистемныхПроверок(); + КонецЕсли; + Если СообщитьПрогресс Тогда ДлительныеОперации.СообщитьПрогресс(100); КонецЕсли; diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form index 347d82c95..833789a6d 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form @@ -43,7 +43,9 @@ 12 <key>ru</key> - <value>Рекомендуется проверить совместимость отредактированных макетов печатных форм с текущей версией программы. Если печатные формы открываются некорректно, то рекомендуется использовать стандартный макет.</value> + <value>Рекомендуется проверить совместимость отредактированных макетов печатных форм с текущей версией программы. + +Если печатные формы открываются некорректно, то рекомендуется использовать стандартный макет.</value> true true @@ -66,6 +68,7 @@ true Label + true true Left diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl index 97d58c81b..663ac51d6 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl @@ -2,6 +2,8 @@ &НаКлиенте Процедура ПерейтиКСписку(Команда) + Закрыть(); + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ПоказыватьТолькоПользовательскиеИзмененные", Истина); diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl index 31407aaa7..d34e3d7ac 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl @@ -87,7 +87,7 @@ &НаКлиенте Процедура СсылкаНаСтраницуПрограммыНажатие(Элемент) - ПерейтиПоНавигационнойСсылке(АдресПрограммыДляОткрытияМакета); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресПрограммыДляОткрытияМакета); КонецПроцедуры #КонецОбласти @@ -238,7 +238,7 @@ ФайлМакета = Новый Файл(ПутьКФайлуМакета); ФайлМакета.УстановитьТолькоЧтение(Истина); КонецЕсли; - ЗапуститьПриложение(ПутьКФайлуМакета); + ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлуМакета); КонецЕсли; ПерейтиНаСтраницуЗавершенияИзменения(); diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl index 5d8191a85..6570656b1 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl @@ -32,8 +32,8 @@ СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); ИмяПрограммы = Метаданные.ПланыОбмена[ИмяПланаОбмена].Синоним; - РасположениеКомплектаПравил = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "ПутьКФайлуКомплектаПравилНаПользовательскомСайте, ПутьКФайлуКомплектаПравилВКаталогеШаблонов"); + РасположениеКомплектаПравил = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "ПутьКФайлуКомплектаПравилНаПользовательскомСайте, ПутьКФайлуКомплектаПравилВКаталогеШаблонов"); КонецПроцедуры @@ -316,19 +316,12 @@ Если СтрНайти(НавигационнаяСсылкаФорматированнойСтроки, "http") = 0 Тогда СтандартнаяОбработка = Ложь; - - Оповещение = Новый ОписаниеОповещения("ОткрытьКаталогСПоставкамиКонфигураций", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, НавигационнаяСсылкаФорматированнойСтроки); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаФорматированнойСтроки); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ОткрытьКаталогСПоставкамиКонфигураций(КодВозврата, ДополнительныеПараметры) Экспорт - Возврат; -КонецПроцедуры - #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/InformationRegisters/ПсевдонимыПредопределенныхУзлов/ПсевдонимыПредопределенныхУзлов.mdo b/SSL/src/InformationRegisters/ПсевдонимыПредопределенныхУзлов/ПсевдонимыПредопределенныхУзлов.mdo new file mode 100644 index 000000000..6cb26d800 --- /dev/null +++ b/SSL/src/InformationRegisters/ПсевдонимыПредопределенныхУзлов/ПсевдонимыПредопределенныхУзлов.mdo @@ -0,0 +1,88 @@ + + + + + + + + + + + + ПсевдонимыПредопределенныхУзлов + + ru + Псевдонимы предопределенных узлов + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + КодУзла + + ru + Код узла + + + String + + 36 + + + + + Use + Use + + + + Корреспондент + + ru + Корреспондент + + + ExchangePlanRef + + + + Use + Use + true + + true + true + + diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form index 404e73f12..37a766efd 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form @@ -4582,7 +4582,7 @@ true - Items.НепринятыеПоДате.CurrentData.НомерЭтойВерсии + Items.НепринятыеПоДате.CurrentData.ПричинаЗапрета НепринятыеПоДатеПричинаЗапретаПодробноExtendedTooltip @@ -4970,15 +4970,15 @@ true + + НепринятыеПоДате.ДругаяВерсияПринята + НепринятыеПоДате.АвторДругойВерсии НепринятыеПоДате.ВерсияПроигнорирована - - НепринятыеПоДате.ДругаяВерсияПринята - НепринятыеПоДате.НовыйОбъект @@ -4998,12 +4998,12 @@ ВЫБРАТЬ NULL КАК Дата, NULL КАК Ссылка, - NULL КАК ТипСтрокой, - NULL КАК НомерЭтойВерсии, + NULL КАК ПричинаЗапрета, NULL КАК НовыйОбъект, NULL КАК НомерДругойВерсии, NULL КАК АвторДругойВерсии, - NULL КАК ДругаяВерсияПринята, + NULL КАК НомерЭтойВерсии, + NULL КАК ТипСтрокой, NULL КАК ВерсияПроигнорирована true diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo new file mode 100644 index 000000000..112cb1c1f --- /dev/null +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo @@ -0,0 +1,255 @@ + + + + + + + + + + + + РезультатыПроверкиУчета + + ru + Результаты проверки учета + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + УточнениеПроблемы + + ru + Уточнение проблемы + + + String + + + + ru + Подробные сведения о проблеме + + + + Use + Use + + + + ВажностьПроблемы + + ru + Важность проблемы + + + EnumRef.ВажностьПроблемыУчета + + + ru + Важность выявленной проблемы + + + + Use + Use + + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + ru + Ответственный за проблемный объект + + + + Use + Use + + + + ИгнорироватьПроблему + + ru + Игнорировать проблему + + + Boolean + + + ru + Признак того, что проблема не должна быть устранена + + + + Use + Use + + + + ДополнительнаяИнформация + + ru + Дополнительная информация + + + ValueStorage + + + ru + Служебный реквизит с дополнительными сведениями, связанными с выявленной проблемой + + + + Use + Use + + + + Выявлено + + ru + Выявлено + + + Date + + + + ru + Дата и время выявления проблемы + + + + Use + Use + + + + ПроблемныйОбъект + + ru + Проблемный объект + + + AnyRef + + + ru + Объект, в котором выявлена проблема + + + + Use + Use + true + + true + true + + + ПравилоПроверки + + ru + Правило проверки + + + CatalogRef.ПравилаПроверкиУчета + + + ru + Правило проверки, выявившее проблему в объекте + + + + true + Use + Use + true + + true + true + + + ВидПроверки + + ru + Вид проверки + + + CatalogRef.ВидыПроверок + + + ru + Вид проверки, в которому относится правило, выявившее проблему в объекте + + + + true + Use + Use + true + + true + true + + + КлючУникальности + + ru + Ключ уникальности + + + UUID + + + ru + Служебный ключ для регистрации нескольких проблем одного вида по одному объекту + + + + Use + + true + + diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form index 098a5eeb2..e66f7977c 100644 --- a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form @@ -326,6 +326,47 @@ ГруппаСведения 24 + + ДатаРазрешенияВходаВПрограмму + 38 + true + true + + true + + + Запись.ДатаРазрешенияВходаВПрограмму + + + ДатаРазрешенияВходаВПрограммуРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ДатаРазрешенияВходаВПрограммуКонтекстноеМеню + 39 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ДатаПоследнейАктивности 4 diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Form.form index 7ad7c09bd..7ec1333f8 100644 --- a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Form.form @@ -299,6 +299,48 @@ true + + ДатаРазрешенияВходаВПрограмму + 47 + + <key>ru</key> + <value>Дата +разрешения входа +в программу</value> + + true + true + + true + + + Список.ДатаРазрешенияВходаВПрограмму + + + ДатаРазрешенияВходаВПрограммуРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ДатаРазрешенияВходаВПрограммуКонтекстноеМеню + 48 + true + + LabelField + Enter + true + Left + true + + true + true + + ДатаПоследнейАктивности 19 diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/СведенияОПользователях.mdo b/SSL/src/InformationRegisters/СведенияОПользователях/СведенияОПользователях.mdo index b961363cf..a55defea8 100644 --- a/SSL/src/InformationRegisters/СведенияОПользователях/СведенияОПользователях.mdo +++ b/SSL/src/InformationRegisters/СведенияОПользователях/СведенияОПользователях.mdo @@ -143,6 +143,29 @@ Use + + ДатаРазрешенияВходаВПрограмму + + ru + Дата разрешения входа в программу + + + Date + + Date + + + + ru + Дата последней установки флажка +Вход в программу разрешен. + + + + Use + Use + + ДатаПоследнейАктивности diff --git a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl index b5a54acfa..66996beba 100644 --- a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl @@ -179,18 +179,18 @@ #Область СлужебныеПроцедурыИФункции -Функция ЧитаемыеОбъектыПриОбновленииИБ() Экспорт +Функция ОбновляемыеОбъекты() Экспорт - ЧитаемыеОбъекты = ""; + Объекты = ""; Для Каждого ТипПрисоединенногоФайла Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл ПолноеИмяОбъектаМетаданных = Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя(); - ЧитаемыеОбъекты = ЧитаемыеОбъекты + ПолноеИмяОбъектаМетаданных + ", "; + Объекты = Объекты + ПолноеИмяОбъектаМетаданных + ", "; КонецЦикла; - ЧитаемыеОбъекты = Лев(ЧитаемыеОбъекты, СтрДлина(ЧитаемыеОбъекты) - 2); + Объекты = Лев(Объекты, СтрДлина(Объекты) - 2); - Возврат ЧитаемыеОбъекты; + Возврат Объекты; КонецФункции diff --git a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl index 95ddb9135..5b34563e3 100644 --- a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl @@ -5,6 +5,7 @@ // Для внутреннего использования. // Процедура ЗафиксироватьЗапускРассылки(Рассылка) Экспорт + Если ТипЗнч(Рассылка) <> Тип("СправочникСсылка.РассылкиОтчетов") Или Не ЗначениеЗаполнено(Рассылка) Тогда Возврат; @@ -12,22 +13,38 @@ УстановитьПривилегированныйРежим(Истина); - МенеджерЗаписи = СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Рассылка = Рассылка; - МенеджерЗаписи.Прочитать(); - - МенеджерЗаписи.Рассылка = Рассылка; - МенеджерЗаписи.ПоследнийЗапуск = ТекущаяДатаСеанса(); - МенеджерЗаписи.НомерСеанса = НомерСеансаИнформационнойБазы(); - МенеджерЗаписи.Выполнена = Ложь; - МенеджерЗаписи.СОшибками = Истина; - - МенеджерЗаписи.Записать(Истина); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СостоянияРассылокОтчетов"); + ЭлементБлокировки.УстановитьЗначение("Рассылка", Рассылка); + Блокировка.Заблокировать(); + + МенеджерЗаписи = СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Рассылка = Рассылка; + МенеджерЗаписи.Прочитать(); + + МенеджерЗаписи.Рассылка = Рассылка; + МенеджерЗаписи.ПоследнийЗапускНачало = ТекущаяДатаСеанса(); + // На случай если ЗафиксироватьРезультатВыполненияРассылки не будет вызван из-за необработанного исключения. + МенеджерЗаписи.ПоследнийЗапускЗавершение = МенеджерЗаписи.ПоследнийЗапускНачало + 30 * 60; + МенеджерЗаписи.НомерСеанса = НомерСеансаИнформационнойБазы(); + МенеджерЗаписи.Выполнена = Ложь; + МенеджерЗаписи.СОшибками = Истина; + + МенеджерЗаписи.Записать(Истина); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры // Для внутреннего использования. // Процедура ЗафиксироватьРезультатВыполненияРассылки(Рассылка, РезультатВыполнения) Экспорт + Если ТипЗнч(Рассылка) <> Тип("СправочникСсылка.РассылкиОтчетов") Или Не ЗначениеЗаполнено(Рассылка) Тогда Возврат; @@ -35,23 +52,35 @@ УстановитьПривилегированныйРежим(Истина); - МенеджерЗаписи = СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Рассылка = Рассылка; - МенеджерЗаписи.Прочитать(); - - МенеджерЗаписи.Рассылка = Рассылка; - МенеджерЗаписи.Выполнена = ( - РезультатВыполнения.ВыполненаВПапку - ИЛИ РезультатВыполнения.ВыполненаВСетевойКаталог - ИЛИ РезультатВыполнения.ВыполненаНаFTP - ИЛИ РезультатВыполнения.ВыполненаПоЭлектроннойПочте); - - МенеджерЗаписи.СОшибками = РезультатВыполнения.БылиОшибки ИЛИ РезультатВыполнения.БылиПредупреждения; - Если Не МенеджерЗаписи.СОшибками Тогда - МенеджерЗаписи.УспешныйЗапуск = МенеджерЗаписи.ПоследнийЗапуск; - КонецЕсли; - - МенеджерЗаписи.Записать(Истина); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СостоянияРассылокОтчетов"); + ЭлементБлокировки.УстановитьЗначение("Рассылка", Рассылка); + Блокировка.Заблокировать(); + + МенеджерЗаписи = СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Рассылка = Рассылка; + МенеджерЗаписи.Прочитать(); + + МенеджерЗаписи.Рассылка = Рассылка; + МенеджерЗаписи.СОшибками = РезультатВыполнения.БылиОшибки ИЛИ РезультатВыполнения.БылиПредупреждения; + МенеджерЗаписи.Выполнена = РезультатВыполнения.ВыполненаВПапку + Или РезультатВыполнения.ВыполненаВСетевойКаталог + Или РезультатВыполнения.ВыполненаНаFTP + Или РезультатВыполнения.ВыполненаПоЭлектроннойПочте + Или Не МенеджерЗаписи.СОшибками; + Если МенеджерЗаписи.Выполнена Тогда + МенеджерЗаписи.УспешныйЗапуск = МенеджерЗаписи.ПоследнийЗапускНачало; + КонецЕсли; + МенеджерЗаписи.ПоследнийЗапускЗавершение = ТекущаяДатаСеанса(); + + МенеджерЗаписи.Записать(Истина); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/СостоянияРассылокОтчетов.mdo b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/СостоянияРассылокОтчетов.mdo index 35c245d34..846a78887 100644 --- a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/СостоянияРассылокОтчетов.mdo +++ b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/СостоянияРассылокОтчетов.mdo @@ -50,10 +50,10 @@ Managed - ПоследнийЗапуск + ПоследнийЗапускНачало ru - Последний запуск + Последний запуск (начало) Date @@ -61,7 +61,27 @@ ru - + Дата начала последнего запуска рассылки отчетов + + + + Use + Use + + + + ПоследнийЗапускЗавершение + + ru + Последний запуск (завершение) + + + Date + + + + ru + Дата завершения последнего запуска рассылки отчетов @@ -81,7 +101,7 @@ ru - Последний успешный запуск + Начало последнего успешного запуска рассылки @@ -100,7 +120,7 @@ ru - + Признак того, что рассылка завершена @@ -119,7 +139,7 @@ ru - + Признак того, что рассылка завершена с ошибками @@ -140,6 +160,10 @@ 25 + + ru + Номер сеанса, в котором выполнялся запуск рассылки (для отбора событий в журнале регистрации) + Use diff --git a/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo b/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo index 87855c3d0..06b8b8dd1 100644 --- a/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo +++ b/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo @@ -142,6 +142,88 @@ Use Use + Index + + + Синхронизирован + + ru + Синхронизирован + + + Boolean + + + ru + Признак синхронизации файла. + + + + Use + Use + + + + ДатаСинхронизацииНачало + + ru + Дата синхронизации начало + + + Date + + + + ru + Дата и время начала последней синхронизации файла + + + + Use + Use + + + + ДатаСинхронизацииЗавершение + + ru + Дата синхронизации завершение + + + Date + + + + ru + Дата и время завершения последней синхронизации файла + + + + Use + Use + + + + НомерСеанса + + ru + Номер сеанса + + + Number + + 25 + + + + ru + Номер сеанса, в котором выполнялся запуск синхронизации файлов (для отбора событий в журнале регистрации) + + + + Use + Use + Файл @@ -161,7 +243,6 @@ - true Use Use true @@ -178,6 +259,10 @@ CatalogRef.УчетныеЗаписиСинхронизацииФайлов + + ru + Учетная запись облачного сервиса. + Use diff --git a/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/Help/ru.html b/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/Help/ru.html new file mode 100644 index 000000000..418392a56 --- /dev/null +++ b/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/Help/ru.html @@ -0,0 +1,15 @@ + +

    Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы программы.

    +

    Открыть список можно по команде Замеры времени на панели навигации ключевой операции.

    +

    В списке выводятся:

    +
    • Ключевая операция - полное наименование ключевой операции; +
    • Дата начала замера - дата и время начала замера; +
    • Номер сеанса; +
    • Время выполнения в секундах; +
    • Комментарий - дополнительная информация о замере; +
    • Дата записи - дата и время записи; +
    • Дата окончания - дата и время окончания замера; +
    • Пользователь - полное имя пользователя; +
    • Дата записи локальная.

    Данные о замерах программа заполняет автоматически при выполнении ключевых операций. Однако при необходимости можно ввести данные о замере времени вручную. Эту возможность можно использовать для отладки, например. Нажмите Создать, заполните необходимые поля.

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/УдалитьЗамерыВремени3.mdo b/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/УдалитьЗамерыВремени3.mdo new file mode 100644 index 000000000..f03ab76e8 --- /dev/null +++ b/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/УдалитьЗамерыВремени3.mdo @@ -0,0 +1,260 @@ + + + + + + + + + + + + УдалитьЗамерыВремени3 + + ru + (не используется) Замеры времени 3 + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + true + + + ru + + + Managed + + ВремяВыполнения + + ru + Время выполнения в секундах + + Время выполнения в секундах + + Number + + 15 + 3 + true + + + + + Use + + + + ВесЗамера + + ru + Вес замера + + + Number + + 10 + true + + + + + Use + Use + + + + Комментарий + + ru + Комментарий + + + String + + 1000 + + + + + Use + + + + ДатаЗаписи + + ru + Дата записи + + + Date + + + + + Index + Use + + + + ДатаОкончания + + ru + Дата окончания + + + Number + + 14 + true + + + + + Use + + 0 + + + + Пользователь + + ru + Пользователь + + + String + + 128 + + + + + Use + + + + ДатаЗаписиЛокальная + + ru + Дата записи локальная + + + Date + + + + + Use + true + + 0001-01-01T00:00:00 + + + + КлючеваяОперация + + ru + Ключевая операция + + + CatalogRef.КлючевыеОперации + + + + true + Use + true + + true + true + + + ДатаНачалаЗамера + + ru + Дата начала замера + + + Number + + 14 + true + + + + + true + Use + true + + true + + + НомерСеанса + + ru + Номер сеанса + + + Number + + 15 + true + + + + + Use + + true + + + ДатаЗаписиНачалоЧаса + + ru + Дата записи начало часа + + + Date + + + + + Index + Use + + + diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/Help/ru.html b/SSL/src/Reports/ДатыЗапретаЗагрузки/Help/ru.html new file mode 100644 index 000000000..8b4544447 --- /dev/null +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/Help/ru.html @@ -0,0 +1,6 @@ + +

    Отчет можно открыть соответствующей кнопкой из окна Даты запрета загрузки данных.

    +

    Позволяет увидеть результирующие даты запрета, установленные для информационных баз.

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 19de2f8c6..19a8fbf5a 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -15,6 +15,17 @@ Дата запрета + + + Формат + + + ru + ДЛФ=D; ДП='Без запрета' + + + + Объект @@ -69,6 +80,17 @@ Дата запрета настройки + + + Формат + + + ru + ДЛФ=D; ДП='Без запрета' + + + + ПриоритетНастройки @@ -316,30 +338,6 @@ 74b83a5f-2016-4522-9d1e-6fcd3dab8e63 - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -542,30 +540,6 @@ 9d9c1e2c-1702-46cf-9754-6f4fb6993446 - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -769,30 +743,6 @@ Inaccessible - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -997,30 +947,6 @@ 6a426184-7fab-4727-99ec-f38c25b25aa0 - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -1233,30 +1159,6 @@ 6a426184-7fab-4727-99ec-f38c25b25aa0 - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -1470,30 +1372,6 @@ Inaccessible - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ДатыЗапретаЗагрузки.mdo b/SSL/src/Reports/ДатыЗапретаЗагрузки/ДатыЗапретаЗагрузки.mdo index 49f30d608..d1afacedf 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ДатыЗапретаЗагрузки.mdo +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ДатыЗапретаЗагрузки.mdo @@ -14,6 +14,11 @@ CommonForm.ФормаНастроекОтчета CommonForm.ФормаВариантаОтчета SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + ФормаОтчета diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Help/ru.html b/SSL/src/Reports/ДатыЗапретаИзменения/Help/ru.html new file mode 100644 index 000000000..79b866861 --- /dev/null +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Help/ru.html @@ -0,0 +1,6 @@ + +

    Отчет можно открыть соответствующей кнопкой из окна Даты запрета изменения данных.

    +

    Позволяет увидеть результирующие даты запрета, установленные для пользователей/групп пользователей.

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index c91edd1d0..8e20928f8 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -15,6 +15,17 @@ Дата запрета + + + Формат + + + ru + ДЛФ=D; ДП='Без запрета' + + + +
    Объект @@ -69,6 +80,17 @@ Дата запрета настройки + + + Формат + + + ru + ДЛФ=D; ДП='Без запрета' + + + + ПриоритетНастройки @@ -317,30 +339,6 @@ ea65ade9-ebe2-4bc5-a93b-0b5155325c51 - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -543,30 +541,6 @@ 9d9c1e2c-1702-46cf-9754-6f4fb6993446 - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -770,30 +744,6 @@ Inaccessible - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -998,30 +948,6 @@ 6a426184-7fab-4727-99ec-f38c25b25aa0 - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -1234,30 +1160,6 @@ 6a426184-7fab-4727-99ec-f38c25b25aa0 - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок @@ -1471,30 +1373,6 @@ Inaccessible - - - - - ДатаЗапрета - - - ДатаЗапретаНастройки - - - - - - Формат - - - ru - ДП='Без запрета' - - - - - - ВыводитьЗаголовок diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo b/SSL/src/Reports/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo index 3a928f289..76fa2cad5 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo @@ -14,6 +14,11 @@ CommonForm.ФормаНастроекОтчета CommonForm.ФормаВариантаОтчета SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + ФормаОтчета diff --git a/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 15f9774c4..60cde6d8a 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -244,15 +244,6 @@ - - КоличествоДанных - - - ru - Вхождений - - - diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/Help/ru.html b/SSL/src/Reports/ОтчетОДвиженияхДокумента/Help/ru.html new file mode 100644 index 000000000..5cd003d08 --- /dev/null +++ b/SSL/src/Reports/ОтчетОДвиженияхДокумента/Help/ru.html @@ -0,0 +1,11 @@ + +

    Предназначен для получения отчета по движениям документа.

    +

    В разделе Сервисные подсистемы - Отчет о движениях документа выбирается интересующий демонстрационный документ, после чего в стандартном подменю "Отчеты" выбирается пункт "Отчет о движениях документа". После выполнения указанных действий отчет будет сформирован.

    +

    Позволяет отображать данные движений целевого документа в двух вариантах: горизонтальном и вертикальном. При необходимости список регистров документа можно ограничить, указав интересующие с помощью вынесенной на основную форму настройки. Также доступны некоторые популярные настройки оформления: отрицательное красным и выделение цветом вида движения накопления.

    +

    Формирование отчета

    +
    • При необходимости можно поменять настройки отчета с помощью кнопки Настройки. +
    • После указания всех данных нажмите Сформировать.

    Примечание:

    +
    +

    Несмотря на возможность выбора вариантов, их сохранение пока не предусмотрено. Это факт является следствием отказа от работы с вариантами для всех контекстных отчетов. Таким образом, следует иметь в виду, что при изменении варианта или закрытии формы отчета, введенные настройки будут утеряны.

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/ManagerModule.bsl b/SSL/src/Reports/ОтчетОДвиженияхДокумента/ManagerModule.bsl new file mode 100644 index 000000000..5faa0aefd --- /dev/null +++ b/SSL/src/Reports/ОтчетОДвиженияхДокумента/ManagerModule.bsl @@ -0,0 +1,130 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ВариантыОтчетов + +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Ложь); + + НастройкиОтчета.ОпределитьНастройкиФормы = Истина; + НастройкиОтчета.Размещение.Вставить(ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(), "Важный"); + + НастройкиВарианта_Горизонталь = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной"); + НастройкиВарианта_Горизонталь.Описание = НСтр("ru = 'Отчет о движениях документа (Горизонтально).'"); + НастройкиВарианта_Горизонталь.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Отчет о движениях документа'"); + + НастройкиВарианта_Вертикаль = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Дополнительный"); + НастройкиВарианта_Вертикаль.Описание = НСтр("ru = 'Отчет о движениях документа (Вертикально).'"); + НастройкиВарианта_Вертикаль.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Отчет о движениях документа'"); + +КонецПроцедуры + +// Для вызова из процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. +// +// Параметры: +// КомандыОтчетов - ТаблицаЗначений - Таблица команд для вывода в подменю. +// См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. +// Параметры - Структура - Структура, содержащая параметры подключения команды. +// ДокументыСОтчетомОДвижениях - Массив - Массив документов, в которых будет выводится команда открытия отчета. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - добавленная команда или Неопределено, если нет прав на просмотр отчета. +// +Функция ДобавитьКомандуОтчетОДвиженияхДокумента(КомандыОтчетов, Параметры, ДокументыСОтчетомОДвижениях) Экспорт + + Если Не ПравоДоступа("Просмотр", Метаданные.Отчеты.ОтчетОДвиженияхДокумента) Тогда + Возврат Неопределено; + КонецЕсли; + + Если Параметры.ВидВРег <> "ДОКУМЕНТ" Тогда + Возврат Неопределено; + Иначе + + ОтключитьОтчетОтДокументов(КомандыОтчетов); + + РазделенноеИмяФормы = СтрРазделить(Параметры.ИмяФормы, "."); + Если РазделенноеИмяФормы.Количество() > 2 Тогда + + ИмяДокумента = РазделенноеИмяФормы.Получить(1); + ДокументМетаданные = Метаданные.Документы.Найти(ИмяДокумента); + Если ДокументыСОтчетомОДвижениях.Найти(ДокументМетаданные) = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Команда = КомандыОтчетов.Добавить(); + Команда.Представление = НСтр("ru = 'Отчет о движениях документа'"); + Команда.МножественныйВыбор = Ложь; + Команда.ИмяПараметраФормы = ""; + Команда.Важность = "СмТакже"; + Команда.КлючВарианта = "Основной"; + Команда.Менеджер = "Отчет.ОтчетОДвиженияхДокумента"; + + Возврат Команда; + +КонецФункции + +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + + ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ОтчетОДвиженияхДокумента); + ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ОтчетОДвиженияхДокумента).Включен = Ложь; + +КонецПроцедуры + +// См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. +Процедура ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка) Экспорт + + ДокументыСОтчетомОДвижениях = СформироватьДокументыСОтчетомОДвижениях(КомандыОтчетов); + + ДобавитьКомандуОтчетОДвиженияхДокумента(КомандыОтчетов, НастройкиФормы, ДокументыСОтчетомОДвижениях); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ВариантыОтчетов + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СформироватьДокументыСОтчетомОДвижениях(КомандыОтчетов, ДокументыСОтчетомОДвижениях = Неопределено) + + ДокументыСОтчетомОДвижениях = Новый Массив; + МетаданныеДокументы = Метаданные.Документы; + Для Каждого МетаданныеДокумент Из МетаданныеДокументы Цикл + Если МетаданныеДокумент.Движения.Количество() > 0 Тогда + ДокументыСОтчетомОДвижениях.Добавить(МетаданныеДокумент); + КонецЕсли; + КонецЦикла; + + Возврат ДокументыСОтчетомОДвижениях; + +КонецФункции + +Процедура ОтключитьОтчетОтДокументов(КомандыОтчетов) + + СтруктураПоиска = Новый Структура; + СтруктураПоиска.Вставить("Менеджер", "Отчет.ОтчетОДвиженияхДокумента"); + НайденныеСтроки = КомандыОтчетов.НайтиСтроки(СтруктураПоиска); + + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + КомандыОтчетов.Удалить(НайденнаяСтрока); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/ObjectModule.bsl b/SSL/src/Reports/ОтчетОДвиженияхДокумента/ObjectModule.bsl new file mode 100644 index 000000000..151b6af9d --- /dev/null +++ b/SSL/src/Reports/ОтчетОДвиженияхДокумента/ObjectModule.bsl @@ -0,0 +1,2410 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ВариантыОтчетов + +// Настройки общей формы отчета подсистемы "Варианты отчетов". +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// Неопределено когда вызов без контекста. +// КлючВарианта - Строка, Неопределено - Имя предопределенного +// или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов без контекста. +// Настройки - Структура - см. возвращаемое значение +// ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// +Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт + + Настройки.РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = Истина; + Настройки.СкрытьКомандыРассылки = Истина; + Настройки.ПараметрыРасположенияЭлементовУправления = ОпределитьРасположениеЭлементовУправления(); + + Настройки.События.ПриСозданииНаСервере = Истина; + Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина; + Настройки.События.ПередЗагрузкойВариантаНаСервере = Истина; + Настройки.События.ПриОпределенииПараметровВыбора = Истина; + +КонецПроцедуры + +// Вызывается перед загрузкой новых настроек. Используется для изменения схемы компоновки. +// Например, если схема отчета зависит от ключа варианта или параметров отчета. +// Чтобы изменения схемы вступили в силу следует вызывать метод ОтчетыСервер.ПодключитьСхему(). +// +// Параметры: +// Контекст - Произвольный - +// Параметры контекста, в котором используется отчет. +// Используется для передачи в параметрах метода ОтчетыСервер.ПодключитьСхему(). +// КлючСхемы - Строка - +// Идентификатор текущей схемы компоновщика настроек. +// По умолчанию не заполнен (это означает что компоновщик инициализирован на основании основной схемы). +// Используется для оптимизации, чтобы переинициализировать компоновщик как можно реже. +// Может не использоваться если переинициализация выполняется безусловно. +// КлючВарианта - Строка, Неопределено - +// Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов для варианта расшифровки или без контекста. +// НовыеНастройкиКД - НастройкиКомпоновкиДанных, Неопределено - +// Настройки варианта отчета, которые будут загружены в компоновщик настроек после его инициализации. +// Неопределено когда настройки варианта не надо загружать (уже загружены ранее). +// НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации. +// Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее). +// +// Примеры: +// 1. Компоновщик отчета инициализируется на основании схемы из общих макетов: +// Если КлючСхемы <> "1" Тогда +// КлючСхемы = "1"; +// СхемаКД = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; +// +// 2. Схема зависит от значения параметра, выведенного в пользовательские настройки отчета: +// Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда +// ПолноеИмяОбъектаМетаданных = ""; +// Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл +// Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда +// ИмяПараметра = Строка(ЭлементКД.Параметр); +// Если ИмяПараметра = "ОбъектМетаданных" Тогда +// ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение; +// КонецЕсли; +// КонецЕсли; +// КонецЦикла; +// Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда +// КлючСхемы = ПолноеИмяОбъектаМетаданных; +// СхемаКД = Новый СхемаКомпоновкиДанных; +// // Наполнение схемы... +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; +// КонецЕсли; +// +Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, + НовыеПользовательскиеНастройкиКД) Экспорт + + Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") Тогда + НастройкиКД = НовыеНастройкиКД; + Иначе + НастройкиКД = КомпоновщикНастроек.Настройки; + КонецЕсли; + + ПараметрыОтчета = ПараметрыОтчета(НастройкиКД, НовыеПользовательскиеНастройкиКД); + + Если КлючСхемы <> КлючВарианта Тогда + + КлючСхемы = КлючВарианта; + + Если КлючВарианта = "Основной" Тогда + ЗаполнитьСхемуКомпоновкиДанных_Горизонталь(ПараметрыОтчета.ДокументВладелец, + СхемаКомпоновкиДанных.НастройкиПоУмолчанию); + ИначеЕсли КлючВарианта = "Дополнительный" Тогда + ЗаполнитьСхемуКомпоновкиДанных_Вертикаль(ПараметрыОтчета.ДокументВладелец, + СхемаКомпоновкиДанных.НастройкиПоУмолчанию, Истина); + КонецЕсли; + + ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКомпоновкиДанных, КлючСхемы); + + НастройкиКДПоУмолчаниюТиповойСхемы(СхемаКомпоновкиДанных, ПараметрыОтчета, НовыеНастройкиКД, КлючВарианта); + + КонецЕсли; + + +КонецПроцедуры + +// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// Отказ - Передается из параметров обработчика "как есть". +// СтандартнаяОбработка - Передается из параметров обработчика "как есть". +// +// См. также: +// "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике. +// ОтчетыПереопределяемый.ПриСозданииНаСервере(). +// +// Пример 1 - Добавление команды с обработчиком в ОтчетыКлиентПереопределяемый.ОбработчикКоманды: +// Команда = Форма.Команды.Добавить("МояОсобеннаяКоманда"); +// Команда.Действие = "Подключаемый_Команда"; +// Команда.Заголовок = НСтр("ru = 'Моя команда...'"); +// +// Кнопка = Форма.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), Форма.Элементы.ГруппаПрограммныйИнтерфейс); +// Кнопка.ИмяКоманды = Команда.Имя; +// +// Форма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); +// +Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт + + Если Форма.Параметры.Свойство("ДокументВладелец") Тогда + СтруктураПараметровДанных = Новый Структура("ДокументВладелец", Форма.Параметры.ДокументВладелец); + УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); + ИначеЕсли Не Форма.Параметры.Свойство("ПараметрКоманды") Тогда + ВызватьИсключение НСтр("ru = 'Для начала работы с отчетом необходимо воспользоваться соответствующей командой в форме интересующего документа.'"); + Отказ = Истина; + Иначе + ДокументВладелец = Форма.Параметры.ПараметрКоманды; + Если Не ЗначениеЗаполнено(ДокументВладелец) Тогда + ВызватьИсключение НСтр("ru = 'Для начала работы с отчетом необходимо воспользоваться соответствующей командой в форме интересующего документа.'"); + Отказ = Истина; + Иначе + Если Не ДокументВладелец.Проведен Тогда + ВызватьИсключение НСтр("ru = 'Для непроведенного документа вывод отчета невозможен.'"); + Отказ = Истина; + Иначе + СтруктураПараметровДанных = Новый Структура("ДокументВладелец", ДокументВладелец); + УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Вызывается в форме отчета перед выводом настройки. +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета. +// СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. +// * ОписаниеТипов - ОписаниеТипов - +// Тип настройки. +// * ЗначенияДляВыбора - СписокЗначений - +// Объекты, которые будут предложены пользователю в списке выбора. +// Дополняет список объектов, уже выбранных пользователем ранее. +// * ЗапросЗначенийВыбора - Запрос - +// Возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. +// Первой колонкой (с 0м индексом) должен выбираться объект, +// который следует добавить в ЗначенияДляВыбора.Значение. +// Для отключения автозаполнения +// в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. +// * ОграничиватьВыборУказаннымиЗначениями - Булево - +// Когда Истина, то выбор пользователя будет ограничен значениями, +// указанными в ЗначенияДляВыбора (его конечным состоянием). +// +// См. также: +// ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(). +// +Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт + + ПолеИмяРегистра = Новый ПолеКомпоновкиДанных("ПараметрыДанных.СписокРегистров"); + Если СвойстваНастройки.ПолеКД = ПолеИмяРегистра Тогда + + Если КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("ГлобальныеНастройки") Тогда + + СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина; + + ГлобальныеНастройки = ПерехватитьГлобальныеНастройки(); + ЗначенияДляВыбора = Новый СписокЗначений; + + Для Каждого ГлобальнаяНастройка Из ГлобальныеНастройки Цикл + + ТекущееЗначениеДляВыбора = "Регистр" + ГлобальнаяНастройка.ВидРегистра + "_" + ГлобальнаяНастройка.ИмяРегистра; + + ТекущееЗначениеДляВыбораПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + НРег(ГлобальнаяНастройка.ЛокализацияВидРегистра), ГлобальнаяНастройка.ПредставлениеРегистра); + + ЗначенияДляВыбора.Добавить(ТекущееЗначениеДляВыбора, ТекущееЗначениеДляВыбораПредставление, Истина); + + КонецЦикла; + + СвойстваНастройки.ЗначенияДляВыбора = ЗначенияДляВыбора; + СвойстваНастройки.Значение = ЗначенияДляВыбора; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. +// +// См. также: +// "Расширение управляемой формы для отчета.ПередЗагрузкойВариантаНаСервере" в синтакс-помощнике. +// ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(). +// +Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт + + ПараметрСКД = Новый ПараметрКомпоновкиДанных("ДокументВладелец"); + ДокументПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ПараметрСКД); + + Если ДокументПараметрСКД <> Неопределено Тогда + ДокументПараметр = ДокументПараметрСКД.Значение; + КонецЕсли; + + Если ЗначениеЗаполнено(ДокументПараметр) Тогда + + УстановитьПараметрыДанных(НовыеНастройкиКД, Новый Структура("ДокументВладелец", ДокументПараметр)); + + Если Форма.КлючТекущегоВарианта = Форма.Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючВарианта Тогда + + НовыеНастройкиКД = КомпоновщикНастроек.Настройки; + + Если Форма.КлючТекущегоВарианта = "Основной" Тогда + ЗаполнитьСхемуКомпоновкиДанных_Горизонталь(ДокументПараметр, СхемаКомпоновкиДанных.НастройкиПоУмолчанию); + ИначеЕсли Форма.КлючТекущегоВарианта = "Дополнительный" Тогда + ЗаполнитьСхемуКомпоновкиДанных_Вертикаль(ДокументПараметр, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, Истина); + КонецЕсли; + + Форма.КлючНазначенияИспользования = СтрРазделить(ДокументПараметр.Метаданные().ПолноеИмя(), ".").Получить(1); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ВариантыОтчетов + +#КонецОбласти + +#КонецОбласти + +#Область ПрограммноеФормированиеСКД + +#Область ПодготовкаДанных + +Функция ПодготовкаДанных(ДвиженияДокумента, ТаблицаРегистров, ДополнительнаяНумерация = Ложь) + + ОсновнаяИнформация = Новый Массив; + + Для Каждого СтрокаТаблицыРегистров Из ТаблицаРегистров Цикл + + ИмяРегистра = СокрЛП(СтрокаТаблицыРегистров.ИмяРегистра); + ВидРегистра = СокрЛП(СтрокаТаблицыРегистров.ВидРегистра); + ЛокализацияВидРегистра = СокрЛП(СтрокаТаблицыРегистров.ЛокализацияВидРегистра); + ПредставлениеРегистра = СокрЛП(СтрокаТаблицыРегистров.ПредставлениеРегистра); + + Для Каждого ДвижениеДокумента Из ДвиженияДокумента Цикл + + Если ВРег(СокрЛП(ДвижениеДокумента.Имя)) = ВРег(ИмяРегистра) Тогда + + Если ВидРегистра = "Накопления" Или ВидРегистра = "Сведений" Тогда + + ПодготовкаДанныхПоРегистрамНакопленияСведений(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, + ЛокализацияВидРегистра, ПредставлениеРегистра, ДополнительнаяНумерация); + + ИначеЕсли ВидРегистра = "Бухгалтерии" Тогда + + ПодготовкаДанныхПоРегистрамБухгалтерии(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, + ЛокализацияВидРегистра, ПредставлениеРегистра); + + ИначеЕсли ВидРегистра = "Расчета" Тогда + + ПодготовкаДанныхПоРегистрамРасчета(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, + ЛокализацияВидРегистра, ПредставлениеРегистра, ДополнительнаяНумерация); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Возврат ОсновнаяИнформация; + +КонецФункции + +Процедура ПодготовкаДанныхПоРегистрамНакопленияСведений(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, + ВидРегистра, ЛокализацияВидРегистра, ПредставлениеРегистра, ДополнительнаяНумерация = Ложь) + + ИнформацияПоРегистру = Новый Структура; + ИнформацияПоРегистру.Вставить("Измерения", Новый Структура); + ИнформацияПоРегистру.Вставить("Ресурсы", Новый Структура); + ИнформацияПоРегистру.Вставить("Реквизиты", Новый Структура); + ИнформацияПоРегистру.Вставить("СтандартныеРеквизиты", Новый Структура); + ИнформацияПоРегистру.Вставить("ИмяРегистра", ИмяРегистра); + ИнформацияПоРегистру.Вставить("ВидРегистра", ВидРегистра); + ИнформацияПоРегистру.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + ИнформацияПоРегистру.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + Если ДополнительнаяНумерация Тогда + ИнформацияПоРегистру.Вставить("Нумератор", Новый Структура); + КонецЕсли; + + ИнформацияПоРегистру.СтандартныеРеквизиты = СформироватьСтруктуруПолей(ДвижениеДокумента.СтандартныеРеквизиты, + "НомерСтроки, Регистратор"); + ИнформацияПоРегистру.Измерения = СформироватьСтруктуруПолей(ДвижениеДокумента.Измерения); + ИнформацияПоРегистру.Ресурсы = СформироватьСтруктуруПолей(ДвижениеДокумента.Ресурсы); + ИнформацияПоРегистру.Реквизиты = СформироватьСтруктуруПолей(ДвижениеДокумента.Реквизиты); + + ПоляВыбора = ""; + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СтандартныеРеквизиты); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Измерения); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Ресурсы); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Реквизиты); + + Если ДополнительнаяНумерация Тогда + + МаксимумПолей = Макс(ИнформацияПоРегистру.СтандартныеРеквизиты.Количество(), + ИнформацияПоРегистру.Измерения.Количество(), + ИнформацияПоРегистру.Ресурсы.Количество(), + ИнформацияПоРегистру.Реквизиты.Количество()); + + ИнформацияПоРегистру.Нумератор = СформироватьНумератор(МаксимумПолей); + + ДобавитьНумератор(ПоляВыбора, ИнформацияПоРегистру.Нумератор); + + КонецЕсли; + + Если СокрЛП(Прав(ПоляВыбора, 2)) = "," Тогда + ПоляВыбора = Лев(ПоляВыбора, СтрДлина(ПоляВыбора) - 2); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | &Поля + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | &УсловиеЗапроса + |{ГДЕ + | (&УсловиеКомпоновки)}"; + + ШаблонСообщения = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + Поля = """" + ШаблонСообщения + """ Как ИмяРегистра," + ПоляВыбора; + УсловиеКомпоновки = """" + ШаблонСообщения + """ В (&СписокРегистров)"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", Поля); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ДвижениеДокумента.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", УсловиеКомпоновки); + + ИнформацияДляФормированияНабораДанных = Новый Структура; + ИнформацияДляФормированияНабораДанных.Вставить("ТекстЗапроса", ТекстЗапроса); + ИнформацияДляФормированияНабораДанных.Вставить("ИнформацияПоРегистру", ИнформацияПоРегистру); + + ОсновнаяИнформация.Добавить(ИнформацияДляФормированияНабораДанных); + +КонецПроцедуры + +Процедура ПодготовкаДанныхПоРегистрамБухгалтерии(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, ЛокализацияВидРегистра, ПредставлениеРегистра) + + ИнформацияПоРегистру = Новый Структура; + ИнформацияПоРегистру.Вставить("СтандартныеРеквизиты", Новый Структура); + ИнформацияПоРегистру.Вставить("Измерения", Новый Структура); + ИнформацияПоРегистру.Вставить("Ресурсы", Новый Структура); + ИнформацияПоРегистру.Вставить("РесурсыДт", Новый Структура); + ИнформацияПоРегистру.Вставить("РесурсыКт", Новый Структура); + ИнформацияПоРегистру.Вставить("Субконто", Новый Структура); + ИнформацияПоРегистру.Вставить("СубконтоДт", Новый Структура); + ИнформацияПоРегистру.Вставить("СубконтоКт", Новый Структура); + ИнформацияПоРегистру.Вставить("ИзмеренияДт", Новый Структура); + ИнформацияПоРегистру.Вставить("ИзмеренияКт", Новый Структура); + ИнформацияПоРегистру.Вставить("Реквизиты", Новый Структура); + ИнформацияПоРегистру.Вставить("ИмяРегистра", ИмяРегистра); + ИнформацияПоРегистру.Вставить("ВидРегистра", ВидРегистра); + ИнформацияПоРегистру.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + ИнформацияПоРегистру.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + + МаксимальноеКоличествоСубконто = ДвижениеДокумента.ПланСчетов.МаксКоличествоСубконто; + КорреспонденцияОбъекта = ДвижениеДокумента.Корреспонденция; + + ЛокализацияДебет = НСтр("ru = 'Дт'"); + ЛокализацияКредит = НСтр("ru = 'Кт'"); + ЛокализацияСубконто = НСтр("ru = 'Субконто'"); + ЛокализацияСчет = НСтр("ru = 'Счет'"); + + СтандартныеРеквизитыИсключения = "НомерСтроки, Регистратор, Счет"; + Для ИндексСубконто = 1 По МаксимальноеКоличествоСубконто Цикл + ИндексСубконтоСтрокой = Формат(ИндексСубконто, "ЧГ=0"); + СтандартныеРеквизитыИсключения = СтандартныеРеквизитыИсключения + + ", " + "ВидСубконто" + ИндексСубконтоСтрокой + ", Субконто" + ИндексСубконтоСтрокой; + КонецЦикла; + + ИнформацияПоРегистру.СтандартныеРеквизиты = СформироватьСтруктуруПолей(ДвижениеДокумента.СтандартныеРеквизиты, + СтандартныеРеквизитыИсключения); + ИнформацияПоРегистру.Реквизиты = СформироватьСтруктуруПолей(ДвижениеДокумента.Реквизиты, + СтандартныеРеквизитыИсключения); + + Ресурсы = ДвижениеДокумента.Ресурсы; + Для Каждого Ресурс Из Ресурсы Цикл + + Если Ресурс.Балансовый Или Не КорреспонденцияОбъекта Тогда + + ИнформацияПоРегистру.Ресурсы.Вставить(Ресурс.Имя, Ресурс.Представление()); + + Иначе + + ИнформацияПоРегистру.РесурсыДт.Вставить(Ресурс.Имя + "Дт", Ресурс.Представление() + " " + ЛокализацияДебет); + ИнформацияПоРегистру.РесурсыКт.Вставить(Ресурс.Имя + "Кт", Ресурс.Представление() + " " + ЛокализацияКредит); + + КонецЕсли; + + КонецЦикла; + + Для ИндексСубконто = 1 По МаксимальноеКоличествоСубконто Цикл + + Если КорреспонденцияОбъекта Тогда + + ИндексСтрокой = Формат(ИндексСубконто, "ЧГ=0"); + + ИнформацияПоРегистру.СубконтоДт.Вставить("СубконтоДт" + ИндексСтрокой, + ЛокализацияСубконто + " " + ЛокализацияДебет + " " + ИндексСтрокой); + ИнформацияПоРегистру.СубконтоКт.Вставить("СубконтоКт" + ИндексСтрокой, + ЛокализацияСубконто + " " + ЛокализацияКредит + " " + ИндексСтрокой); + + Иначе + + ИнформацияПоРегистру.Субконто.Вставить("Субконто" + ИндексСтрокой, ЛокализацияСубконто + " " + ИндексСтрокой); + + КонецЕсли; + + КонецЦикла; + + Если КорреспонденцияОбъекта Тогда + + ИнформацияПоРегистру.ИзмеренияДт.Вставить("СчетДт", ЛокализацияСчет + " " +ЛокализацияДебет); + ИнформацияПоРегистру.ИзмеренияКт.Вставить("СчетКт", ЛокализацияСчет + " " + ЛокализацияКредит); + + Иначе + + ТекстИзмерения = ТекстИзмерения + ?(ЗначениеЗаполнено(ТекстИзмерения), ", ", "") + "Счет"; + + ИнформацияПоРегистру.Измерения.Вставить("Счет", ЛокализацияСчет); + + КонецЕсли; + + Измерения = ДвижениеДокумента.Измерения; + Для Каждого Измерение Из Измерения Цикл + + Если Измерение.Балансовый Или Не КорреспонденцияОбъекта Тогда + + ИнформацияПоРегистру.Измерения.Вставить(Измерение.Имя, Измерение.Представление()); + + Иначе + + ИнформацияПоРегистру.ИзмеренияДт.Вставить(Измерение.Имя + "Дт", Измерение.Представление() + " " + ЛокализацияДебет); + ИнформацияПоРегистру.ИзмеренияКт.Вставить(Измерение.Имя + "Кт", Измерение.Представление() + " " + ЛокализацияКредит); + + КонецЕсли; + + КонецЦикла; + + ПоляВыбора = ""; + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СтандартныеРеквизиты); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Реквизиты); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Измерения); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.ИзмеренияДт); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.ИзмеренияКт); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Ресурсы); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.РесурсыДт); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.РесурсыКт); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Субконто); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СубконтоДт); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СубконтоКт); + + Если СокрЛП(Прав(ПоляВыбора, 2)) = "," Тогда + ПоляВыбора = Лев(ПоляВыбора, СтрДлина(ПоляВыбора) - 2); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | &Поля + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |{ГДЕ + | (&УсловиеКомпоновки)}"; + + ШаблонСообщения = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + Поля = """" + ШаблонСообщения + """ Как ИмяРегистра," + ПоляВыбора; + УсловиеКомпоновки = """" + ШаблонСообщения + """ В (&СписокРегистров)"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", Поля); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", "РегистрБухгалтерии." + ИмяРегистра + + ".ДвиженияССубконто(, , Регистратор = &ДокументВладелец)"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", УсловиеКомпоновки); + + ИнформацияДляФормированияНабораДанных = Новый Структура; + ИнформацияДляФормированияНабораДанных.Вставить("ТекстЗапроса", ТекстЗапроса); + ИнформацияДляФормированияНабораДанных.Вставить("ИнформацияПоРегистру", ИнформацияПоРегистру); + + ОсновнаяИнформация.Добавить(ИнформацияДляФормированияНабораДанных); + +КонецПроцедуры + +Процедура ПодготовкаДанныхПоРегистрамРасчета(ДвижениеДокумента, ОсновнаяИнформация, ИмяРегистра, ВидРегистра, ЛокализацияВидРегистра, ПредставлениеРегистра, ДополнительнаяНумерация = Ложь) + + ИнформацияПоРегистру = Новый Структура; + ИнформацияПоРегистру.Вставить("Измерения", Новый Структура); + ИнформацияПоРегистру.Вставить("Ресурсы", Новый Структура); + ИнформацияПоРегистру.Вставить("Реквизиты", Новый Структура); + ИнформацияПоРегистру.Вставить("СтандартныеРеквизиты", Новый Структура); + ИнформацияПоРегистру.Вставить("ИмяРегистра", ИмяРегистра); + ИнформацияПоРегистру.Вставить("ВидРегистра", ВидРегистра); + ИнформацияПоРегистру.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + ИнформацияПоРегистру.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + Если ДополнительнаяНумерация Тогда + ИнформацияПоРегистру.Вставить("Нумератор", Новый Структура); + КонецЕсли; + + Для Каждого Реквизит Из ДвижениеДокумента.СтандартныеРеквизиты Цикл + ИнформацияПоРегистру.СтандартныеРеквизиты.Вставить(Реквизит.Имя, Реквизит.Представление()); + КонецЦикла; + + ИнформацияПоРегистру.Измерения = СформироватьСтруктуруПолей(ДвижениеДокумента.Измерения); + ИнформацияПоРегистру.Ресурсы = СформироватьСтруктуруПолей(ДвижениеДокумента.Ресурсы); + ИнформацияПоРегистру.Реквизиты = СформироватьСтруктуруПолей(ДвижениеДокумента.Реквизиты); + + ПоляВыбора = ""; + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.СтандартныеРеквизиты); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Измерения); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Ресурсы); + ДобавитьПоля(ПоляВыбора, ИнформацияПоРегистру.Реквизиты); + + Если ДополнительнаяНумерация Тогда + + МаксимумПолей = Макс(ИнформацияПоРегистру.СтандартныеРеквизиты.Количество(), + ИнформацияПоРегистру.Измерения.Количество(), + ИнформацияПоРегистру.Ресурсы.Количество(), + ИнформацияПоРегистру.Реквизиты.Количество()); + + ИнформацияПоРегистру.Нумератор = СформироватьНумератор(МаксимумПолей); + ДобавитьНумератор(ПоляВыбора, ИнформацияПоРегистру.Нумератор); + + КонецЕсли; + + Если СокрЛП(Прав(ПоляВыбора, 2)) = "," Тогда + ПоляВыбора = Лев(ПоляВыбора, СтрДлина(ПоляВыбора) - 2); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | &Поля + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | &УсловиеЗапроса + |{ГДЕ + | (&УсловиеКомпоновки)}"; + + ШаблонСообщения = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + Поля = """" + ШаблонСообщения + """ Как ИмяРегистра," + ПоляВыбора; + УсловиеКомпоновки = """" + ШаблонСообщения + """ В (&СписокРегистров)"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", Поля); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ДвижениеДокумента.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", УсловиеКомпоновки); + + ИнформацияДляФормированияНабораДанных = Новый Структура; + ИнформацияДляФормированияНабораДанных.Вставить("ТекстЗапроса", ТекстЗапроса); + ИнформацияДляФормированияНабораДанных.Вставить("ИнформацияПоРегистру", ИнформацияПоРегистру); + + ОсновнаяИнформация.Добавить(ИнформацияДляФормированияНабораДанных); + +КонецПроцедуры + +Процедура ДобавитьНумератор(ТекстНумератора, СтруктураНумератора) + + Для Каждого Нумератор Из СтруктураНумератора Цикл + ТекстНумератора = ТекстНумератора + ?(ЗначениеЗаполнено(ТекстНумератора), ", ", "") + Нумератор.Значение + " Как " + + Нумератор.Ключ; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбщееФормированиеНаборовДанных + +#Область РегистрыБухгалтерии + +Процедура НастройкаСтруктурыРегистровБухгалтерии(НастройкиКД, НаборДанныхКД, ЭлементДанных) + + ВидРегистра = "Бухгалтерии"; + ЛокализацияВидРегистра = НСтр("ru = 'Бухгалтерии'"); + ИмяРегистра = ЭлементДанных.ИмяРегистра; + ПредставлениеРегистра = ЭлементДанных.ПредставлениеРегистра; + + СтруктураСтандартныхРеквизитов = ЭлементДанных.СтандартныеРеквизиты; + СтруктураИзмерений = ЭлементДанных.Измерения; + СтруктураИзмеренийДт = ЭлементДанных.ИзмеренияДт; + СтруктураИзмеренийКт = ЭлементДанных.ИзмеренияКт; + СтруктураРесурсов = ЭлементДанных.Ресурсы; + СтруктураРесурсовДт = ЭлементДанных.РесурсыДт; + СтруктураРесурсовКт = ЭлементДанных.РесурсыКт; + СтруктураСубконто = ЭлементДанных.Субконто; + СтруктураСубконтоДт = ЭлементДанных.СубконтоДт; + СтруктураСубконтоКт = ЭлементДанных.СубконтоКт; + СтруктураРеквизитов = ЭлементДанных.Реквизиты; + + ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + НРег(ЛокализацияВидРегистра), ПредставлениеРегистра); + + ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, + "Регистр" + ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); + + Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "СтандартныеРеквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураИзмерений.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Измерения"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураИзмеренийДт.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "ИзмеренияДт"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураИзмеренийДт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураСубконто.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Субконто"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураСубконто, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураСубконтоДт.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "СубконтоДт"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураСубконтоДт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРесурсовДт.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "РесурсыДт"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураРесурсовДт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураИзмеренийКт.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "ИзмеренияКт"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураИзмеренийКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураСубконтоКт.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "СубконтоКт"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураСубконтоКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРесурсовКт.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "РесурсыКт"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураРесурсовКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРесурсов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Ресурсы"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Реквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Истина); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область ФормированиеНаборовДанных_Горизонталь + +#Область Общее + +Функция ЗаполнитьСхемуКомпоновкиДанных_Горизонталь(ДокументОтбор, НастройкиКД) + + МетаданныеДокумента = ДокументОтбор.Метаданные(); + ДвиженияДокумента = МетаданныеДокумента.Движения; + + МассивРегистров = МассивИспользуемыхРегистров(ДокументОтбор, ДвиженияДокумента); + Если МассивРегистров.Количество() = 0 Тогда + Возврат СхемаКомпоновкиДанных; + Иначе + ТаблицаРегистров = ТаблицаИспользуемыхРегистров(МассивРегистров); + ПодготовленныеДанные = ПодготовкаДанных(ДвиженияДокумента, ТаблицаРегистров); + + СтруктураПараметровДанных = Новый Структура("СписокРегистров", СформироватьСписокРегистров(ТаблицаРегистров)); + УстановитьПараметрыДанных(НастройкиКД, СтруктураПараметровДанных); + + Возврат ФормированиеСхемыКД_Горизонталь(ПодготовленныеДанные, НастройкиКД); + КонецЕсли; + +КонецФункции + +Функция ФормированиеСхемыКД_Горизонталь(ПодготовленныеДанные, НастройкиКД) + + СхемаКД = СхемаКомпоновкиДанных; + ГлавноеОбъединение = СхемаКД.НаборыДанных["Main"]; + + ГлобальныеНастройки = ПерехватитьГлобальныеНастройки(); + + ИндексНабора = 0; + Для Каждого ЭлементДанных Из ПодготовленныеДанные Цикл + + ИндексНабора = ИндексНабора + 1; + ИнформацияПоРегистру = ЭлементДанных.ИнформацияПоРегистру; + + НаборыДанных = ГлавноеОбъединение.Элементы; + ИмяНабора = "ЗапросПоРегистру" + ИнформацияПоРегистру.ВидРегистра + "_" + ИнформацияПоРегистру.ИмяРегистра; + НайденныйНабор = НаборыДанных.Найти(ИмяНабора); + + Если НайденныйНабор = Неопределено Тогда + + НайденныйНабор = НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НайденныйНабор.Имя = ИмяНабора; + НайденныйНабор.ИсточникДанных = "ИсточникДанных1"; + + НайденныйНабор.Запрос = ЭлементДанных.ТекстЗапроса; + + ДоопределитьМакетСКД(СхемаКД, ИндексНабора, ИнформацияПоРегистру.ВидРегистра, + ИнформацияПоРегистру.ЛокализацияВидРегистра, ИнформацияПоРегистру.ИмяРегистра, ГлобальныеНастройки); + + КонецЕсли; + + НастройкаСтруктурыНабора_Горизонталь(НастройкиКД, ЭлементДанных.ИнформацияПоРегистру, НайденныйНабор); + + КонецЦикла; + + ПользовательскоеОформление(СхемаКД, НастройкиКД, ПодготовленныеДанные); + + Возврат СхемаКД; + +КонецФункции + +Процедура НастройкаСтруктурыНабора_Горизонталь(НастройкиКД, ЭлементДанных, НаборДанныхКД) + + Если ЭлементДанных.ВидРегистра = "Накопления" Или ЭлементДанных.ВидРегистра = "Сведений" Тогда + + НастройкаСтруктурыРегистровНакопленияИСведений_Горизонталь(НастройкиКД, НаборДанныхКД, ЭлементДанных); + + ИначеЕсли ЭлементДанных.ВидРегистра = "Бухгалтерии" Тогда + + НастройкаСтруктурыРегистровБухгалтерии(НастройкиКД, НаборДанныхКД, ЭлементДанных); + + ИначеЕсли ЭлементДанных.ВидРегистра = "Расчета" Тогда + + НастройкаСтруктурыРегистровРасчета_Горизонталь(НастройкиКД, НаборДанныхКД, ЭлементДанных); + + КонецЕсли; + + ОформитьОтчет(НастройкиКД); + +КонецПроцедуры + +#КонецОбласти + +#Область РегистрыНакопленияИСведений + +Процедура НастройкаСтруктурыРегистровНакопленияИСведений_Горизонталь(НастройкиКД, НаборДанныхКД, ЭлементДанных) + + ВидРегистра = ЭлементДанных.ВидРегистра; + ЛокализацияВидРегистра = ЭлементДанных.ЛокализацияВидРегистра; + ИмяРегистра = ЭлементДанных.ИмяРегистра; + ПредставлениеРегистра = ЭлементДанных.ПредставлениеРегистра; + + СтруктураСтандартныхРеквизитов = ЭлементДанных.СтандартныеРеквизиты; + СтруктураИзмерений = ЭлементДанных.Измерения; + СтруктураРесурсов = ЭлементДанных.Ресурсы; + СтруктураРеквизитов = ЭлементДанных.Реквизиты; + + ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + НРег(ЛокализацияВидРегистра), ПредставлениеРегистра); + + ГруппировкаДетальныеЗаписи = + ДобавитьЭлементСтруктуры(НастройкиКД, "Регистр" + ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); + + Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "СтандартныеРеквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Стандартные реквизиты'")); + + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураИзмерений.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Измерения"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Измерения'")); + + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРесурсов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Ресурсы"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Ресурсы'")); + + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Реквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); + + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область РегистрыРасчета + +Процедура НастройкаСтруктурыРегистровРасчета_Горизонталь(НастройкиКД, НаборДанныхКД, ЭлементДанных) + + ВидРегистра = "Расчета"; + ЛокализацияВидРегистра = НСтр("ru = 'Расчета'"); + ИмяРегистра = ЭлементДанных.ИмяРегистра; + ПредставлениеРегистра = ЭлементДанных.ПредставлениеРегистра; + + СтруктураСтандартныхРеквизитов = ЭлементДанных.СтандартныеРеквизиты; + СтруктураИзмерений = ЭлементДанных.Измерения; + СтруктураРесурсов = ЭлементДанных.Ресурсы; + СтруктураРеквизитов = ЭлементДанных.Реквизиты; + + ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + НРег(ЛокализацияВидРегистра), ПредставлениеРегистра); + + ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, + "Регистр" + ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); + + Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "СтандартныеРеквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Горизонтально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); + + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураИзмерений.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Измерения"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Измерения'")); + + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРесурсов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Ресурсы"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Ресурсы'")); + + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Реквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); + + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область ФормированиеНаборовДанных_Вертикаль + +#Область Общее + +Функция ЗаполнитьСхемуКомпоновкиДанных_Вертикаль(ДокументОтбор, НастройкиКД, ДополнительнаяНумерация = Ложь) + + МетаданныеДокумента = ДокументОтбор.Метаданные(); + ДвиженияДокумента = МетаданныеДокумента.Движения; + + МассивРегистров = МассивИспользуемыхРегистров(ДокументОтбор, ДвиженияДокумента); + Если МассивРегистров.Количество() = 0 Тогда + Возврат СхемаКомпоновкиДанных; + Иначе + ТаблицаРегистров = ТаблицаИспользуемыхРегистров(МассивРегистров); + ПодготовленныеДанные = ПодготовкаДанных(ДвиженияДокумента, ТаблицаРегистров, ДополнительнаяНумерация); + + СтруктураПараметровДанных = Новый Структура("СписокРегистров", СформироватьСписокРегистров(ТаблицаРегистров)); + УстановитьПараметрыДанных(НастройкиКД, СтруктураПараметровДанных); + + Возврат ФормированиеСхемыКД_Вертикаль(ПодготовленныеДанные, НастройкиКД); + КонецЕсли; + +КонецФункции + +Функция ФормированиеСхемыКД_Вертикаль(ПодготовленныеДанные, НастройкиКД) + + СхемаКД = СхемаКомпоновкиДанных; + ГлавноеОбъединение = СхемаКД.НаборыДанных["Main"]; + + ГлобальныеНастройки = ПерехватитьГлобальныеНастройки(); + + ИндексНабора = 0; + Для Каждого ЭлементДанных Из ПодготовленныеДанные Цикл + + ИндексНабора = ИндексНабора + 1; + ИнформацияПоРегистру = ЭлементДанных.ИнформацияПоРегистру; + + НаборыДанных = ГлавноеОбъединение.Элементы; + ИмяНабора = "ЗапросПоРегистру" + ИнформацияПоРегистру.ВидРегистра + "_" + ИнформацияПоРегистру.ИмяРегистра; + НайденныйНабор = НаборыДанных.Найти(ИмяНабора); + + Если НайденныйНабор = Неопределено Тогда + + НайденныйНабор = НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НайденныйНабор.Имя = ИмяНабора; + НайденныйНабор.ИсточникДанных = "ИсточникДанных1"; + + НайденныйНабор.Запрос = ЭлементДанных.ТекстЗапроса; + + ДоопределитьМакетСКД(СхемаКД, ИндексНабора, ИнформацияПоРегистру.ВидРегистра, + ИнформацияПоРегистру.ЛокализацияВидРегистра, ИнформацияПоРегистру.ИмяРегистра, ГлобальныеНастройки); + + КонецЕсли; + + НастройкаСтруктурыНабора_Вертикаль(НастройкиКД, ЭлементДанных.ИнформацияПоРегистру, НайденныйНабор); + + КонецЦикла; + + ПользовательскоеОформление(СхемаКД, НастройкиКД, ПодготовленныеДанные); + + Возврат СхемаКД; + +КонецФункции + +Процедура НастройкаСтруктурыНабора_Вертикаль(НастройкиКД, ЭлементДанных, НаборДанныхКД) + + Если ЭлементДанных.ВидРегистра = "Накопления" Или ЭлементДанных.ВидРегистра = "Сведений" Тогда + + НастройкаСтруктурыРегистровНакопленияИСведений_Вертикаль(НастройкиКД, НаборДанныхКД, ЭлементДанных); + + ИначеЕсли ЭлементДанных.ВидРегистра = "Бухгалтерии" Тогда + + НастройкаСтруктурыРегистровБухгалтерии(НастройкиКД, НаборДанныхКД, ЭлементДанных); + + ИначеЕсли ЭлементДанных.ВидРегистра = "Расчета" Тогда + + НастройкаСтруктурыРегистровРасчета_Вертикаль(НастройкиКД, НаборДанныхКД, ЭлементДанных); + + КонецЕсли; + + ОформитьОтчет(НастройкиКД); + +КонецПроцедуры + +#КонецОбласти + +#Область РегистрыНакопленияИСведений + +Процедура НастройкаСтруктурыРегистровНакопленияИСведений_Вертикаль(НастройкиКД, НаборДанныхКД, ЭлементДанных) + + ВидРегистра = ЭлементДанных.ВидРегистра; + ЛокализацияВидРегистра = ЭлементДанных.ЛокализацияВидРегистра; + ИмяРегистра = ЭлементДанных.ИмяРегистра; + ПредставлениеРегистра = ЭлементДанных.ПредставлениеРегистра; + + СтруктураСтандартныхРеквизитов = ЭлементДанных.СтандартныеРеквизиты; + СтруктураИзмерений = ЭлементДанных.Измерения; + СтруктураРесурсов = ЭлементДанных.Ресурсы; + СтруктураРеквизитов = ЭлементДанных.Реквизиты; + СтруктураНумератора = ЭлементДанных.Нумератор; + + ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + НРег(ЛокализацияВидРегистра), ПредставлениеРегистра); + + ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, "Регистр" + ВидРегистра + "_" + ИмяРегистра, + ПользовательскийЗаголовок); + + Если СтруктураНумератора.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Нумератор"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", "№ГруппаЭлементаВыводаСКДТекущегоДокумента"); + + РазместитьГруппуПолейСКД(СтруктураНумератора, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "СтандартныеРеквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Стандартные реквизиты'")); + + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураИзмерений.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Измерения"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Измерения'")); + + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРесурсов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Ресурсы"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Ресурсы'")); + + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Реквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); + + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область РегистрыРасчета + +Процедура НастройкаСтруктурыРегистровРасчета_Вертикаль(НастройкиКД, НаборДанныхКД, ЭлементДанных) + + ВидРегистра = "Расчета"; + ЛокализацияВидРегистра = НСтр("ru = 'Расчета'"); + ИмяРегистра = ЭлементДанных.ИмяРегистра; + ПредставлениеРегистра = ЭлементДанных.ПредставлениеРегистра; + + СтруктураСтандартныхРеквизитов = ЭлементДанных.СтандартныеРеквизиты; + СтруктураИзмерений = ЭлементДанных.Измерения; + СтруктураРесурсов = ЭлементДанных.Ресурсы; + СтруктураРеквизитов = ЭлементДанных.Реквизиты; + СтруктураНумератора = ЭлементДанных.Нумератор; + + ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + НРег(ЛокализацияВидРегистра), ПредставлениеРегистра); + + ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, "Регистр" + ВидРегистра + "_" + ИмяРегистра, + ПользовательскийЗаголовок); + + Если СтруктураНумератора.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Нумератор"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", "№ГруппаЭлементаВыводаСКДТекущегоДокумента"); + + РазместитьГруппуПолейСКД(СтруктураНумератора, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "СтандартныеРеквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Стандартные реквизиты'")); + + РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураИзмерений.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Измерения"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Измерения'")); + + РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРесурсов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Ресурсы"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Ресурсы'")); + + РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + + Если СтруктураРеквизитов.Количество() > 0 Тогда + + ПараметрыГруппы = Новый Структура; + ПараметрыГруппы.Вставить("ИмяГруппы", "Реквизиты"); + ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); + ПараметрыГруппы.Вставить("ВыбраннаяГруппаПуста", Ложь); + ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); + + РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область ФормированиеСтруктурыОтчета + +#Область ПоляНабораДанных + +Функция ДобавитьПолеНабораДанных(НаборДанных, Поле, Заголовок, ПутьКДанным = Неопределено) + + Если ПутьКДанным = Неопределено Тогда + ПутьКДанным = Поле; + КонецЕсли; + + ПолеНабораДанных = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + ПолеНабораДанных.Поле = Поле; + ПолеНабораДанных.Заголовок = Заголовок; + ПолеНабораДанных.ПутьКДанным = ПутьКДанным; + Возврат ПолеНабораДанных; + +КонецФункции + +#КонецОбласти + +#Область ВыбранныеПоляНабораДанных + +Функция ДобавитьВыбранноеПоле(Куда, ИмяИлиПолеКД, Заголовок = "") Экспорт + + Если ТипЗнч(Куда) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + ВыбранныеПоляКД = Куда.Настройки.Выбор; + ИначеЕсли ТипЗнч(Куда) = Тип("НастройкиКомпоновкиДанных") Или ТипЗнч(Куда) = Тип("ГруппировкаКомпоновкиДанных") Тогда + ВыбранныеПоляКД = Куда.Выбор; + Иначе + ВыбранныеПоляКД = Куда; + КонецЕсли; + + Если ТипЗнч(ИмяИлиПолеКД) = Тип("Строка") Тогда + ПолеКД = Новый ПолеКомпоновкиДанных(ИмяИлиПолеКД); + Иначе + ПолеКД = ИмяИлиПолеКД; + КонецЕсли; + + ВыбранноеПолеКД = ВыбранныеПоляКД.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПолеКД.Поле = ПолеКД; + + Если Заголовок <> "" Тогда + ВыбранноеПолеКД.Заголовок = Заголовок; + КонецЕсли; + + Возврат ВыбранноеПолеКД; + +КонецФункции + +Функция ДобавитьВыбранноеПолеГруппа(Куда, ИмяИлиПолеКД, Заголовок = "", Расположение = Неопределено) + + Если ТипЗнч(Куда) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + ВыбранныеПоляКД = Куда.Настройки.Выбор; + ИначеЕсли ТипЗнч(Куда) = Тип("НастройкиКомпоновкиДанных") Или ТипЗнч(Куда) = Тип("ГруппировкаКомпоновкиДанных") Тогда + ВыбранныеПоляКД = Куда.Выбор; + Иначе + ВыбранныеПоляКД = Куда; + КонецЕсли; + + Если ТипЗнч(ИмяИлиПолеКД) = Тип("Строка") Тогда + ПолеКД = Новый ПолеКомпоновкиДанных(ИмяИлиПолеКД); + Иначе + ПолеКД = ИмяИлиПолеКД; + КонецЕсли; + + ВыбранноеПолеКД = ВыбранныеПоляКД.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + ВыбранноеПолеКД.Поле = ПолеКД; + + Если Расположение <> Неопределено Тогда + ВыбранноеПолеКД.Расположение = Расположение; + КонецЕсли; + + Если Заголовок <> "" Тогда + ВыбранноеПолеКД.Заголовок = Заголовок; + КонецЕсли; + + Возврат ВыбранноеПолеКД; + +КонецФункции + +#КонецОбласти + +#Область Прочее + +Процедура ДополнительнаяОбщаяНастройкаГруппировки(Группировка, СтруктураНастроек) + + Для Каждого ЭлементНастройки Из СтруктураНастроек Цикл + + Настройка = Группировка.ПараметрыВывода.Элементы.Найти(ЭлементНастройки.Ключ); + Если Настройка <> Неопределено Тогда + УстановитьПараметрВывода(Группировка, ЭлементНастройки.Ключ, ЭлементНастройки.Значение); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ДобавитьЭлементСтруктуры(НастройкиКД, ИмяГруппировки, ЗначениеОтбора) + + ГруппировкаПоРегистру = НастройкиКД.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + + ГруппировкаПоРегистру.Имя = ИмяГруппировки; + ГруппировкаПоРегистру.ПредставлениеПользовательскойНастройки = ЗначениеОтбора; + ГруппировкаПоРегистру.Использование = Истина; + + ГруппировкаПоРегистру.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + ГруппировкаПоРегистру.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); + + УстановитьОтборПоИмениРегистра(ГруппировкаПоРегистру, ИмяГруппировки); + + ОформитьГруппировкуПоРегистру(ГруппировкаПоРегистру); + + ПолеГруппировкиРегистр = ГруппировкаПоРегистру.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + + ПолеГруппировкиРегистр.Использование = Истина; + ПолеГруппировкиРегистр.Поле = Новый ПолеКомпоновкиДанных("ИмяРегистра"); + ПолеГруппировкиРегистр.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы; + ПолеГруппировкиРегистр.ТипДополнения = ТипДополненияПериодаКомпоновкиДанных.БезДополнения; + + ДетальныеЗаписи = ГруппировкаПоРегистру.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + ДетальныеЗаписи.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); + ДетальныеЗаписи.Использование = Истина; + + Возврат ДетальныеЗаписи; + +КонецФункции + +Процедура УстановитьОтборПоИмениРегистра(ГруппировкаДетальныеЗаписи, ЗначениеОтбора) + + Отбор = ГруппировкаДетальныеЗаписи.Отбор; + ЭлементыОтбора = Отбор.Элементы; + + ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИмяРегистра"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = ЗначениеОтбора; + ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементОтбора.Использование = Истина; + +КонецПроцедуры + +Процедура РазместитьГруппуПолейСКД(СтруктураПолей, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы) + + Если ПараметрыГруппы.ВыбраннаяГруппаПуста Тогда + ЛокальноеИмяГруппы = Новый ПолеКомпоновкиДанных(""); + ЛокальноеПредставлениеГруппы = ""; + Иначе + ЛокальноеИмяГруппы = ПараметрыГруппы.ИмяГруппы; + ЛокальноеПредставлениеГруппы = ПараметрыГруппы.ПредставлениеВыбраннойГруппы; + КонецЕсли; + + Группа = ДобавитьВыбранноеПолеГруппа(ГруппировкаДетальныеЗаписи, ЛокальноеИмяГруппы, ЛокальноеПредставлениеГруппы, + ПараметрыГруппы.РасположениеВыбраннойГруппы); + + Для Каждого ЭлементСтруктуры Из СтруктураПолей Цикл + + Имя = ЭлементСтруктуры.Ключ; + Представление = ЭлементСтруктуры.Значение; + + ДобавитьПолеНабораДанных(НаборДанныхКД, Имя, Представление); + ДобавитьВыбранноеПоле(Группа, Имя, Представление); + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьПоля(ПоляВыбора, СтруктураПолей) + + Для Каждого Поле Из СтруктураПолей Цикл + ПоляВыбора = ПоляВыбора + ?(ЗначениеЗаполнено(ПоляВыбора), ", ", "") + Поле.Ключ; + КонецЦикла; + +КонецПроцедуры + +Функция СформироватьСтруктуруПолей(МетаданныеПоля, Исключения = Неопределено) + + МассивИсключаемыхПолей = Новый Массив; + Если Исключения <> Неопределено Тогда + МассивИсключаемыхПолей = СтрРазделить(Исключения, ", "); + КонецЕсли; + + СтруктураПолей = Новый Структура; + Для Каждого ЕдиницаМетаданных Из МетаданныеПоля Цикл + + Если МассивИсключаемыхПолей.Найти(ЕдиницаМетаданных.Имя) = Неопределено Тогда + СтруктураПолей.Вставить(ЕдиницаМетаданных.Имя, ЕдиницаМетаданных.Представление()); + КонецЕсли; + + КонецЦикла; + + Возврат СтруктураПолей; + +КонецФункции + +Функция СформироватьНумератор(ГраницаНумератора) + + СтруктураНумератора = Новый Структура; + + Для Индекс = 1 По ГраницаНумератора Цикл + ИндексСтрокой = Формат(Индекс, "ЧГ=0"); + СтруктураНумератора.Вставить("ГруппаЭлементаВыводаСКДТекущегоДокумента" + ИндексСтрокой, ИндексСтрокой); + КонецЦикла; + + Возврат СтруктураНумератора; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область Прочее + +Процедура НастройкиКДПоУмолчаниюТиповойСхемы(СхемаКомпоновкиДанных, ПараметрыОтчета, НовыеНастройкиКД, КлючВарианта) + + СписокРегистровПараметр = СхемаКомпоновкиДанных.Параметры.Найти("СписокРегистров"); + СписокРегистров = Новый СписокЗначений; + + Если КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("ГлобальныеНастройки") Тогда + + ГлобальныеНастройки = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ГлобальныеНастройки; + Для Каждого ГлобальнаяНастройка Из ГлобальныеНастройки Цикл + + ТекущееЗначениеДляВыбора = "Регистр" + ГлобальнаяНастройка.ВидРегистра + "_" + ГлобальнаяНастройка.ИмяРегистра; + + ТекущееЗначениеДляВыбораПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + НРег(ГлобальнаяНастройка.ЛокализацияВидРегистра), ГлобальнаяНастройка.ПредставлениеРегистра); + + СписокРегистров.Добавить(ТекущееЗначениеДляВыбора, ТекущееЗначениеДляВыбораПредставление, Истина); + + КонецЦикла; + + КонецЕсли; + + СписокРегистровПараметр.УстановитьДоступныеЗначения(СписокРегистров); + + Если НовыеНастройкиКД <> Неопределено Тогда + НовыеНастройкиКД.ДополнительныеСвойства.Вставить("ГлобальныеНастройки", + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ГлобальныеНастройки); + КонецЕсли; + + КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); + + НастройкиКД = КомпоновщикНастроек.Настройки; + + Если КлючВарианта = "Основной" Тогда + ЗаполнитьСхемуКомпоновкиДанных_Горизонталь(ПараметрыОтчета.ДокументВладелец, НовыеНастройкиКД); + ИначеЕсли КлючВарианта = "Дополнительный" Тогда + ЗаполнитьСхемуКомпоновкиДанных_Вертикаль(ПараметрыОтчета.ДокументВладелец, НовыеНастройкиКД, Истина); + КонецЕсли; + + ПараметрОтчета = НастройкиКД.ПараметрыДанных.Элементы.Найти("ДокументВладелец"); + ПараметрОтчета.Значение = ПараметрыОтчета.ДокументВладелец; + +КонецПроцедуры + +Функция МассивИспользуемыхРегистров(Регистратор, Движения, МассивИсключаемыхРегистров = Неопределено) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Регистратор", Регистратор); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + Результат = Новый Массив; + ТекстЗапроса = ""; + + Для Каждого ОбъектМетаданныхРегистр Из Движения Цикл + + ПропуститьРегистр = МассивИсключаемыхРегистров <> Неопределено + И МассивИсключаемыхРегистров.Найти(ОбъектМетаданныхРегистр.Имя) <> Неопределено; + + Если Не ПропуститьРегистр Тогда + + ТекущийТекстЗапроса = + "ВЫБРАТЬ + | &ИдентификаторыРегистра + |ПОМЕСТИТЬ ВТ_ВременнаяТаблица + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | &Условие"; + + ИдентификаторыРегистра = + """" + ОбъектМетаданныхРегистр.Имя + """ КАК ИмяТекущегоРегистра, + |""" + ОбъектМетаданныхРегистр.Представление() + """ КАК ПредставлениеТекущегоРегистра"; + + ИдентификаторВременнойТаблицы = "ВТ_" + СтрЗаменить(ОбъектМетаданныхРегистр.ПолноеИмя(), ".", "_"); + + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&ИдентификаторыРегистра", ИдентификаторыРегистра); + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "ВТ_ВременнаяТаблица", ИдентификаторВременнойТаблицы); + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&ТекущаяТаблица", ОбъектМетаданныхРегистр.ПолноеИмя()); + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&Условие", "Регистратор = &Регистратор"); + + ТекстЗапроса = ТекстЗапроса + ?(ЗначениеЗаполнено(ТекстЗапроса), ";", "") + ТекущийТекстЗапроса; + + КонецЕсли; + + КонецЦикла; + + Запрос.Текст = ТекстЗапроса; + РезультатыЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными(); + + ГлобальныеНастройки = Новый Массив; + + Для Каждого РезультатЗапроса Из РезультатыЗапроса Цикл + + ВыгрузкаРезультатаЗапроса = РезультатЗапроса.Выгрузить(); + Если ВыгрузкаРезультатаЗапроса.Количество() <> 0 Тогда + + ИмяРегистра = ВыгрузкаРезультатаЗапроса.Получить(0).ИмяТекущегоРегистра; + ПредставлениеРегистра = ВыгрузкаРезультатаЗапроса.Получить(0).ПредставлениеТекущегоРегистра; + + Результат.Добавить(ИмяРегистра); + + Если Метаданные.РегистрыНакопления.Найти(ИмяРегистра) <> Неопределено Тогда + ВидРегистра = "Накопления"; + ЛокализацияВидРегистра = НСтр("ru = 'Накопления'"); + ИначеЕсли Метаданные.РегистрыБухгалтерии.Найти(ИмяРегистра) <> Неопределено Тогда + ВидРегистра = "Бухгалтерии"; + ЛокализацияВидРегистра = НСтр("ru = 'Бухгалтерии'"); + ИначеЕсли Метаданные.РегистрыСведений.Найти(ИмяРегистра) <> Неопределено Тогда + ВидРегистра = "Сведений"; + ЛокализацияВидРегистра = НСтр("ru = 'Сведений'"); + ИначеЕсли Метаданные.РегистрыРасчета.Найти(ИмяРегистра) <> Неопределено Тогда + ВидРегистра = "Расчета"; + ЛокализацияВидРегистра = НСтр("ru = 'Расчета'"); + КонецЕсли; + + СтруктураНастроек = Новый Структура; + СтруктураНастроек.Вставить("ИмяРегистра", ИмяРегистра); + СтруктураНастроек.Вставить("ПредставлениеРегистра" , ПредставлениеРегистра); + СтруктураНастроек.Вставить("ВидРегистра", ВидРегистра); + СтруктураНастроек.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + СтруктураНастроек.Вставить("КоличествоЗаписей", ВыгрузкаРезультатаЗапроса.Количество()); + ГлобальныеНастройки.Добавить(СтруктураНастроек); + + КонецЕсли; + + КонецЦикла; + + Запрос.МенеджерВременныхТаблиц.Закрыть(); + Запрос = Неопределено; + + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ГлобальныеНастройки", ГлобальныеНастройки); + + Возврат Результат; + +КонецФункции + +Функция ТаблицаИспользуемыхРегистров(МассивРегистров) + + ТаблицаРегистров = Новый ТаблицаЗначений; + КолонкиТаблицыРегистров = ТаблицаРегистров.Колонки; + КолонкиТаблицыРегистров.Добавить("ИмяРегистра", Новый ОписаниеТипов("Строка")); + КолонкиТаблицыРегистров.Добавить("ПредставлениеРегистра", Новый ОписаниеТипов("Строка")); + КолонкиТаблицыРегистров.Добавить("ВидРегистра", Новый ОписаниеТипов("Строка")); + КолонкиТаблицыРегистров.Добавить("ЛокализацияВидРегистра", Новый ОписаниеТипов("Строка")); + КолонкиТаблицыРегистров.Добавить("ВидРегистраНакопления", Новый ОписаниеТипов("Строка")); + КолонкиТаблицыРегистров.Добавить("ПериодичностьРегистраСведений", Новый ОписаниеТипов("Строка")); + КолонкиТаблицыРегистров.Добавить("РежимЗаписиРегистраСведений", Новый ОписаниеТипов("Строка")); + КолонкиТаблицыРегистров.Добавить("ПериодичностьРегистраРасчета", Новый ОписаниеТипов("Строка")); + КолонкиТаблицыРегистров.Добавить("Сортировщик", Новый ОписаниеТипов("Число", , , + Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный))); + + МетаданныеРегистрыНакопления = Метаданные.РегистрыНакопления; + МетаданныеРегистрыБухгалтерии = Метаданные.РегистрыБухгалтерии; + МетаданныеРегистрыСведений = Метаданные.РегистрыСведений; + МетаданныеРегистрыРасчета = Метаданные.РегистрыРасчета; + + Для Каждого Регистр Из МассивРегистров Цикл + + СтрокаТаблицыРегистров = ТаблицаРегистров.Добавить(); + СтрокаТаблицыРегистров.ИмяРегистра = Регистр; + + РезультатПоиска = МетаданныеРегистрыНакопления.Найти(Регистр); + Если РезультатПоиска <> Неопределено Тогда + + СтрокаТаблицыРегистров.ПредставлениеРегистра = РезультатПоиска.Представление(); + СтрокаТаблицыРегистров.ВидРегистра = "Накопления"; + СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Накопления'"); + СтрокаТаблицыРегистров.ВидРегистраНакопления = Строка(РезультатПоиска.ВидРегистра); + СтрокаТаблицыРегистров.Сортировщик = 1; + + Иначе + + РезультатПоиска = МетаданныеРегистрыБухгалтерии.Найти(Регистр); + Если РезультатПоиска <> Неопределено Тогда + + СтрокаТаблицыРегистров.ПредставлениеРегистра = РезультатПоиска.Представление(); + СтрокаТаблицыРегистров.ВидРегистра = "Бухгалтерии"; + СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Бухгалтерии'"); + СтрокаТаблицыРегистров.Сортировщик = 3; + + Иначе + + РезультатПоиска = МетаданныеРегистрыСведений.Найти(Регистр); + Если РезультатПоиска <> Неопределено Тогда + + СтрокаТаблицыРегистров.ПредставлениеРегистра = РезультатПоиска.Представление(); + СтрокаТаблицыРегистров.ВидРегистра = "Сведений"; + СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Сведений'"); + СтрокаТаблицыРегистров.ПериодичностьРегистраСведений = РезультатПоиска.ПериодичностьРегистраСведений; + СтрокаТаблицыРегистров.РежимЗаписиРегистраСведений = РезультатПоиска.РежимЗаписи; + СтрокаТаблицыРегистров.Сортировщик = 2; + + Иначе + + РезультатПоиска = МетаданныеРегистрыРасчета.Найти(Регистр); + Если РезультатПоиска <> Неопределено Тогда + + СтрокаТаблицыРегистров.ПредставлениеРегистра = РезультатПоиска.Представление(); + СтрокаТаблицыРегистров.ВидРегистра = "Расчета"; + СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Расчета'"); + СтрокаТаблицыРегистров.ПериодичностьРегистраРасчета = РезультатПоиска.Периодичность; + СтрокаТаблицыРегистров.Сортировщик = 4; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ТаблицаРегистров.Сортировать("Сортировщик"); + + Возврат ТаблицаРегистров; + +КонецФункции + +Процедура ДоопределитьМакетСКД(СхемаКД, ИндексНабора, ВидРегистра, ЛокализацияВидРегистра, ИмяРегистра, + ГлобальныеНастройки) + + СтруктураПоиска = Новый Структура("ВидРегистра, ИмяРегистра", ВидРегистра, ИмяРегистра); + СтрокиГлобальныхНастроек = ГлобальныеНастройки.НайтиСтроки(СтруктураПоиска); + + Если СтрокиГлобальныхНастроек.Количество() > 0 Тогда + + СтрокаГлобальныхНастроек = СтрокиГлобальныхНастроек.Получить(0); + + ЗаголовокГруппировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 ""%2"" (%3)'"), + НРег(ЛокализацияВидРегистра), СтрокаГлобальныхНастроек.ПредставлениеРегистра, + Формат(СтрокаГлобальныхНастроек.КоличествоЗаписей, "ЧГ=0")); + + МакетГруппировки = СхемаКД.МакетыГруппировок.Добавить(); + МакетГруппировки.ИмяГруппировки = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + МакетГруппировки.ТипМакета = ТипМакетаОбластиКомпоновкиДанных.Заголовок; + МакетГруппировки.Макет = "Макет" + Формат(ИндексНабора + 1, "ЧГ=0"); + + МакетОбласти = Новый МакетОбластиКомпоновкиДанных; + СтрокаМакета = МакетОбласти.Добавить(Тип("СтрокаТаблицыОбластиКомпоновкиДанных")); + Ячейка = СтрокаМакета.Ячейки.Добавить(); + + ОформлениеЯчейки = Ячейка.Оформление.Элементы; + + Шрифт = ОформлениеЯчейки.Найти("Шрифт"); + + Если Шрифт <> Неопределено Тогда + Шрифт.Значение = Новый Шрифт("Arial", 14); + Шрифт.Использование = Истина; + КонецЕсли; + + Размещение = ОформлениеЯчейки.Найти("Размещение"); + + Если Размещение <> Неопределено Тогда + Размещение.Значение = ТипРазмещенияТекстаКомпоновкиДанных.Переносить; + Размещение.Использование = Истина; + КонецЕсли; + + ОбластьКД = Ячейка.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных")); + ОбластьКД.Значение = ЗаголовокГруппировки; + + Макет = СхемаКД.Макеты.Добавить(); + Макет.Имя = "Макет" + Формат(ИндексНабора + 1, "ЧГ=0"); + Макет.Макет = МакетОбласти; + + КонецЕсли; + +КонецПроцедуры + +Функция СформироватьСписокРегистров(ТаблицаРегистров) + + СписокРегистров = Новый СписокЗначений; + + Для Каждого СтрокаТаблицыРегистров Из ТаблицаРегистров Цикл + + ЗаголовокГруппировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + НРег(СтрокаТаблицыРегистров.ЛокализацияВидРегистра), СтрокаТаблицыРегистров.ПредставлениеРегистра); + + ЭлементОтбора = "Регистр" + СтрокаТаблицыРегистров.ВидРегистра + "_" + СтрокаТаблицыРегистров.ИмяРегистра; + + СписокРегистров.Добавить(ЭлементОтбора, ЗаголовокГруппировки); + + КонецЦикла; + + Возврат СписокРегистров; + +КонецФункции + +Процедура УстановитьПараметрыДанных(НастройкиКД, СтруктураПараметров) + + ПараметрыДанных = НастройкиКД.ПараметрыДанных.Элементы; + + Для Каждого Параметр Из СтруктураПараметров Цикл + + ТекущийПараметр = Новый ПараметрКомпоновкиДанных(Параметр.Ключ); + ТекущийПараметрКД = ПараметрыДанных.Найти(ТекущийПараметр); + + Если ТекущийПараметрКД <> Неопределено Тогда + + ТекущийПараметрКД.Использование = Истина; + ТекущийПараметрКД.Значение = Параметр.Значение; + + Иначе + + ПараметрДанных = НастройкиКД.ПараметрыДанных.Элементы.Добавить(); + ПараметрДанных.Использование = Истина; + ПараметрДанных.Значение = Параметр.Значение; + ПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных(Параметр.Ключ); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ВыводСКД + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ДокументПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокументВладелец"); + Если ДокументПараметрСКД = Неопределено Или Не ЗначениеЗаполнено(ДокументПараметрСКД.Значение) Тогда + Возврат; + Иначе + ДокументОтбор = ДокументПараметрСКД.Значение; + КонецЕсли; + + МакетЗаголовка = ПолучитьМакет("Заголовок"); + ОбластьЗаголовка = МакетЗаголовка.ПолучитьОбласть("ОбластьЗаголовок"); + ОбластьЗаголовка.Параметры.СсылкаНаДокумент = Строка(ДокументОтбор); + ПустаяОбласть = МакетЗаголовка.ПолучитьОбласть("ПустаяОбласть"); + + ДокументРезультат.Вывести(ПустаяОбласть); + ДокументРезультат.НачатьГруппуСтрок(); + ДокументРезультат.Вывести(ОбластьЗаголовка); + ДокументРезультат.ЗакончитьГруппуСтрок(); + ДокументРезультат.Вывести(ПустаяОбласть); + + НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки(); + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКД, ДанныеРасшифровки); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ДокументРезультат); + + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + ДоопределитьГотовыйМакет(ДокументРезультат, ДокументОтбор); + +КонецПроцедуры + +Процедура ДоопределитьГотовыйМакет(ДокументРезультат, ДокументРегистратор) + + ТаблицаГлобальныхНастроек = ПерехватитьГлобальныеНастройки(); + ТаблицаГлобальныхНастроек.Колонки.Добавить("ТаблицаПримечаний", Новый ОписаниеТипов("ТаблицаЗначений")); + + Для Каждого Строка Из ТаблицаГлобальныхНастроек Цикл + Строка.ТаблицаПримечаний = ФормированиеСтрокиПримечания("Регистр" + Строка.ВидРегистра + "_" + Строка.ИмяРегистра); + КонецЦикла; + + ШиринаТаблицы = ДокументРезультат.ШиринаТаблицы; + ВысотаТаблицы = ДокументРезультат.ВысотаТаблицы; + + ТаблицаПримечаний = Новый ТаблицаЗначений; + + Для ИндексСтрок = 1 По ВысотаТаблицы Цикл + + Для ИндексКолонок = 1 По ШиринаТаблицы Цикл + + ИмяОбласти = "R" + Формат(ИндексСтрок, "ЧГ=0") + "C" + Формат(ИндексКолонок, "ЧГ=0"); + Область = ДокументРезультат.Область(ИмяОбласти); + + СтрокаГлобальныхНастроек = ТаблицаГлобальныхНастроек.Найти(СокрЛП(Область.Текст), "НадписьРезультат"); + Если СтрокаГлобальныхНастроек <> Неопределено Тогда + + СтруктураРасшифровки = Новый Структура; + СтруктураРасшифровки.Вставить("ВидРегистра", СтрокаГлобальныхНастроек.ЛокализацияВидРегистра); + СтруктураРасшифровки.Вставить("ИмяРегистра", СтрокаГлобальныхНастроек.ИмяРегистра); + СтруктураРасшифровки.Вставить("Регистратор", ДокументРегистратор); + Область.Расшифровка = СтруктураРасшифровки; + + ОтчетыСервер.ВывестиГиперссылку(Область, СтруктураРасшифровки, Область.Текст); + + ТаблицаПримечаний = СтрокаГлобальныхНастроек.ТаблицаПримечаний; + + ГраницаПримечаний = 1; + + КонецЕсли; + + КонецЦикла; + + ИмяОбластиНумератора = "R" + Формат(ИндексСтрок, "ЧГ=0") + "C1"; + ОбластьНумератора = ДокументРезультат.Область(ИмяОбластиНумератора); + + Если Не ЭтоЧисло(ОбластьНумератора.Текст) Тогда + + Если СтрНайти(ОбластьНумератора.Текст, "№ГруппаЭлементаВыводаСКДТекущегоДокумента") <> 0 Тогда + ОбластьНумератора.Текст = "№"; + ОбластьНумератора.ШиринаКолонки = 5; + КонецЕсли; + + Иначе + + ОбластьНумератора.Отступ = 0; + ОбластьНумератора.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + + СтрокаПримечания = ТаблицаПримечаний.Найти(ОбластьНумератора.Текст, "Этаж"); + Если СтрокаПримечания <> Неопределено Тогда + + ЭтажностьСтроки = СтрокаПримечания.Этажность + 1; + Если ГраницаПримечаний = ЭтажностьСтроки Тогда + + ТекстПримечания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В этой строке: %1'"), + СтрокаПримечания.Примечание + "."); + + ОбластьНумератора.Примечание.Текст = ТекстПримечания; + + Иначе + ГраницаПримечаний = ГраницаПримечаний + 1; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область РазделОформления + +Процедура ОформитьОтчет(НастройкиКД) + + СтруктураНастроек = Новый Структура; + СтруктураНастроек.Вставить("ВыводитьОтбор", ТипВыводаТекстаКомпоновкиДанных.НеВыводить); + СтруктураНастроек.Вставить("ВыводитьПараметрыДанных", ТипВыводаТекстаКомпоновкиДанных.НеВыводить); + ДополнительнаяОбщаяНастройкаГруппировки(НастройкиКД, СтруктураНастроек); + +КонецПроцедуры + +Процедура ОформитьГруппировкуПоРегистру(ГруппировкаПоРегистру) + + СтруктураНастроек = Новый Структура; + СтруктураНастроек.Вставить("ВыводитьОтбор", ТипВыводаТекстаКомпоновкиДанных.НеВыводить); + ДополнительнаяОбщаяНастройкаГруппировки(ГруппировкаПоРегистру, СтруктураНастроек); + +КонецПроцедуры + +Процедура ПользовательскоеОформление(СхемаКД, НастройкиКД, ПодготовленныеДанные) + + СписокВыбораРегистров = Новый СписокЗначений; + + УсловноеОформление = НастройкиКД.УсловноеОформление.Элементы; + ПоляУсловногоОформления = Новый ТаблицаЗначений; + ПоляУсловногоОформленияКолонки = ПоляУсловногоОформления.Колонки; + ПоляУсловногоОформленияКолонки.Добавить("ИмяРесурса", Новый ОписаниеТипов("Строка")); + ПоляУсловногоОформленияКолонки.Добавить("ПредставлениеРесурса", Новый ОписаниеТипов("Строка")); + ПоляУсловногоОформленияКолонки.Добавить("ВидРегистра", Новый ОписаниеТипов("Строка")); + ПоляУсловногоОформленияКолонки.Добавить("ПредставлениеРегистра", Новый ОписаниеТипов("Строка")); + ПоляУсловногоОформленияКолонки.Добавить("ВидОформления", Новый ОписаниеТипов("Строка")); + + Для Каждого ЭлементДанных Из ПодготовленныеДанные Цикл + + ИнформацияПоРегистру = ЭлементДанных.ИнформацияПоРегистру; + ИмяРегистра = ИнформацияПоРегистру.ИмяРегистра; + ВидРегистра = ИнформацияПоРегистру.ВидРегистра; + ЛокализацияВидРегистра = ИнформацияПоРегистру.ЛокализацияВидРегистра; + ПредставлениеРегистра = ИнформацияПоРегистру.ПредставлениеРегистра; + РесурсыРегистра = ИнформацияПоРегистру.Ресурсы; + СтандартныеРеквизиты = ИнформацияПоРегистру.СтандартныеРеквизиты; + + ЭлементСписка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), + НРег(ВидРегистра), ПредставлениеРегистра); + + СписокВыбораРегистров.Добавить(ЭлементСписка); + + Если ИнформацияПоРегистру.Свойство("РесурсыДт") Тогда + + РесурсыДт = ИнформацияПоРегистру.РесурсыДт; + Для Каждого РесурсДт Из РесурсыДт Цикл + + СтруктураУсловногоОформления = Новый Структура; + СтруктураУсловногоОформления.Вставить("ИмяРесурса", РесурсДт.Ключ); + СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", РесурсДт.Значение); + СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); + СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеОтрицательности"); + + ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); + + КонецЦикла; + + КонецЕсли; + + Если ИнформацияПоРегистру.Свойство("РесурсыКт") Тогда + + РесурсыКт = ИнформацияПоРегистру.РесурсыКт; + Для Каждого РесурсКт Из РесурсыКт Цикл + + СтруктураУсловногоОформления = Новый Структура; + СтруктураУсловногоОформления.Вставить("ИмяРесурса", РесурсКт.Ключ); + СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", РесурсКт.Значение); + СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); + СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеОтрицательности"); + + ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); + + КонецЦикла; + + КонецЕсли; + + Для Каждого РесурсРегистра Из РесурсыРегистра Цикл + + Если СокрЛП(НРег(ВидРегистра)) <> "сведений" Тогда + + СтруктураУсловногоОформления = Новый Структура; + СтруктураУсловногоОформления.Вставить("ИмяРесурса", РесурсРегистра.Ключ); + СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", РесурсРегистра.Значение); + СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); + СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеОтрицательности"); + + ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); + + Иначе + МетаданныеРесурсы = Метаданные.РегистрыСведений[ИмяРегистра]; + МетаданныеРесурс = МетаданныеРесурсы.Ресурсы.Найти(РесурсРегистра.Ключ); + Если МетаданныеРесурс <> Неопределено Тогда + + Если МетаданныеРесурс.Тип.СодержитТип(Тип("Число")) Тогда + + СтруктураУсловногоОформления = Новый Структура; + СтруктураУсловногоОформления.Вставить("ИмяРесурса", РесурсРегистра.Ключ); + СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", РесурсРегистра.Значение); + СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); + СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеОтрицательности"); + + ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если СтандартныеРеквизиты.Свойство("ВидДвижения") Тогда + + СтруктураУсловногоОформления = Новый Структура; + СтруктураУсловногоОформления.Вставить("ИмяРесурса", "ВидДвижения"); + СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", НСтр("ru = 'Вид движения'")); + СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); + СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); + СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеВидаДвижений"); + + ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); + + КонецЕсли; + + КонецЦикла; + + Для Каждого ПолеУсловногоОформления Из ПоляУсловногоОформления Цикл + + Если ПолеУсловногоОформления.ВидОформления = "ОформлениеОтрицательности" Тогда + + ЦелевоеПоле = Новый ПолеКомпоновкиДанных(ПолеУсловногоОформления.ИмяРесурса); + + ЕдиницаУсловногоОформления = УсловноеОформление.Добавить(); + ЕдиницаУсловногоОформления.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор); + + ОтборУсловногоОформления = ЕдиницаУсловногоОформления.Отбор; + + ЭлементОтбора = ОтборУсловногоОформления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.ЛевоеЗначение = ЦелевоеПоле; + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше; + ЭлементОтбора.ПравоеЗначение = 0; + ЭлементОтбора.Использование = Истина; + + ЭлементОтбора = ОтборУсловногоОформления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПараметрыДанных.ОтрицательноеКрасным"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Истина; + ЭлементОтбора.Использование = Истина; + + ЕдиницаУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла); + + ОформляемыеПоля = ЕдиницаУсловногоОформления.Поля.Элементы; + ОформляемоеПоле = ОформляемыеПоля.Добавить(); + + ОформляемоеПоле.Поле = ЦелевоеПоле; + ОформляемоеПоле.Использование = Истина; + + СтрокаПредставления = НСтр("ru = 'Отметка отрицательности ресурса ""%1"", регистра %2: ""%3""'"); + ПредставлениеПользовательскойНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаПредставления, + ПолеУсловногоОформления.ПредставлениеРесурса, НРег(ПолеУсловногоОформления.ВидРегистра), + ПолеУсловногоОформления.ПредставлениеРегистра); + + ЕдиницаУсловногоОформления.ПредставлениеПользовательскойНастройки = ПредставлениеПользовательскойНастройки; + ЕдиницаУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЕдиницаУсловногоОформления.Использование = Истина; + + ИначеЕсли ПолеУсловногоОформления.ВидОформления = "ОформлениеВидаДвижений" Тогда + + ЦелевоеПоле = Новый ПолеКомпоновкиДанных(ПолеУсловногоОформления.ИмяРесурса); + + ЕдиницаУсловногоОформленияПриход = УсловноеОформление.Добавить(); + ЕдиницаУсловногоОформленияПриход.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор); + + ОтборУсловногоОформленияПриход = ЕдиницаУсловногоОформленияПриход.Отбор; + + ЭлементОтбора = ОтборУсловногоОформленияПриход.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.ЛевоеЗначение = ЦелевоеПоле; + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = ВидДвиженияНакопления.Приход; + ЭлементОтбора.Использование = Истина; + + ЭлементОтбора = ОтборУсловногоОформленияПриход.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПараметрыДанных.ВыделятьВидДвиженияНакопления"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Истина; + ЭлементОтбора.Использование = Истина; + + ЕдиницаУсловногоОформленияПриход.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РезультатУспехЦвет); + + ОформляемыеПоля = ЕдиницаУсловногоОформленияПриход.Поля.Элементы; + ОформляемоеПоле = ОформляемыеПоля.Добавить(); + + ОформляемоеПоле.Поле = ЦелевоеПоле; + ОформляемоеПоле.Использование = Истина; + + СтрокаПредставления = НСтр("ru = 'Отметить зеленым приход регистра %1: ""%2""'"); + ПредставлениеПользовательскойНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаПредставления, + НРег(ПолеУсловногоОформления.ВидРегистра), ПолеУсловногоОформления.ПредставлениеРегистра); + + ЕдиницаУсловногоОформленияПриход.ПредставлениеПользовательскойНастройки = ПредставлениеПользовательскойНастройки; + ЕдиницаУсловногоОформленияПриход.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЕдиницаУсловногоОформленияПриход.Использование = Истина; + + ЕдиницаУсловногоОформленияРасход = УсловноеОформление.Добавить(); + ЕдиницаУсловногоОформленияРасход.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор); + + ОтборУсловногоОформленияРасход = ЕдиницаУсловногоОформленияРасход.Отбор; + ЭлементОтбора = ОтборУсловногоОформленияРасход.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.ЛевоеЗначение = ЦелевоеПоле; + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = ВидДвиженияНакопления.Расход; + ЭлементОтбора.Использование = Истина; + + ЭлементОтбора = ОтборУсловногоОформленияРасход.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПараметрыДанных.ВыделятьВидДвиженияНакопления"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Истина; + ЭлементОтбора.Использование = Истина; + + ЕдиницаУсловногоОформленияРасход.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла); + + ОформляемыеПоля = ЕдиницаУсловногоОформленияРасход.Поля.Элементы; + + ОформляемоеПоле = ОформляемыеПоля.Добавить(); + + ОформляемоеПоле.Поле = ЦелевоеПоле; + ОформляемоеПоле.Использование = Истина; + + СтрокаПредставления = НСтр("ru = 'Отметить красным расход регистра %1: ""%2""'"); + ПредставлениеПользовательскойНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаПредставления, + НРег(ПолеУсловногоОформления.ВидРегистра), ПолеУсловногоОформления.ПредставлениеРегистра); + + ЕдиницаУсловногоОформленияРасход.ПредставлениеПользовательскойНастройки = ПредставлениеПользовательскойНастройки; + ЕдиницаУсловногоОформленияРасход.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЕдиницаУсловногоОформленияРасход.Использование = Истина; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ФормированиеПримечаний + +Функция ФормированиеСтрокиПримечания(ИмяРегистра) + + ЭтажиСтроки = Новый ТаблицаЗначений; + КолонкиЭтажей = ЭтажиСтроки.Колонки; + КолонкиЭтажей.Добавить("Этаж", Новый ОписаниеТипов("Строка")); + КолонкиЭтажей.Добавить("Примечание", Новый ОписаниеТипов("Строка")); + КолонкиЭтажей.Добавить("Этажность", Новый ОписаниеТипов("Число")); + + МассивВыбранныхПолей = Новый Массив; + СтруктураГруппировок = КомпоновщикНастроек.ПолучитьНастройки().Структура; + НайтиГруппировкуРекурсивно(СтруктураГруппировок, МассивВыбранныхПолей, ИмяРегистра); + + ПолеНумератора = Новый ПолеКомпоновкиДанных("Нумератор"); + ЭтажностьСтроки = ЭтажностьСтроки(ПолеНумератора, МассивВыбранныхПолей); + + Для Индекс = 0 По ЭтажностьСтроки - 1 Цикл + + СтрокаПримечания = ""; + + Для Каждого ВыбраннаяГруппа Из МассивВыбранныхПолей Цикл + Если ВыбраннаяГруппа.Поле <> ПолеНумератора Тогда + + Заголовок = ""; + Если ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Стандартные реквизиты'") Тогда + Заголовок = НСтр("ru = 'Стандартный реквизит'"); + ИначеЕсли ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Измерения'") Тогда + Заголовок = НСтр("ru = 'Измерение'"); + ИначеЕсли ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Ресурсы'") Тогда + Заголовок = НСтр("ru = 'Ресурс'"); + ИначеЕсли ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Реквизиты'") Тогда + Заголовок = НСтр("ru = 'Реквизит'"); + ИначеЕсли ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Данные расчета'") Тогда + Заголовок = НСтр("ru = 'Данные расчета'"); + КонецЕсли; + + Элементы = ВыбраннаяГруппа.Элементы; + + Если Индекс <= Элементы.Количество() - 1 Тогда + ВыбранноеПоле = Элементы[Индекс]; + Если ВыбранноеПоле.Использование Тогда + СтрокаПримечания = СтрокаПримечания + ?(ЗначениеЗаполнено(СтрокаПримечания), ", ", "") + + Элементы[Индекс].Заголовок + " (" + Заголовок + ")"; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + СтруктураЭтажа = Новый Структура; + СтруктураЭтажа.Вставить("Этаж", Формат(Индекс + 1, "ЧГ=0")); + СтруктураЭтажа.Вставить("Примечание", СтрокаПримечания); + СтруктураЭтажа.Вставить("Этажность", ЭтажностьСтроки); + + ЗаполнитьЗначенияСвойств(ЭтажиСтроки.Добавить(), СтруктураЭтажа); + + КонецЦикла; + + Возврат ЭтажиСтроки; + +КонецФункции + +Функция ЭтажностьСтроки(ПолеНумератора, МассивВыбранныхПолей) + + ЭтажностьСтроки = 0; + Для Каждого ВыбраннаяГруппа Из МассивВыбранныхПолей Цикл + + Если ВыбраннаяГруппа.Поле = ПолеНумератора Тогда + Элементы = ВыбраннаяГруппа.Элементы; + Для Каждого Элемент Из Элементы Цикл + Если Элемент.Использование Тогда + ЭтажностьСтроки = ЭтажностьСтроки + 1; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + Возврат ЭтажностьСтроки; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЭтоЧисло(Знач ПроверяемоеЗначение) + + Попытка + ПроверяемоеЗначение = Число(ПроверяемоеЗначение); + Возврат Истина; + Исключение + Возврат Ложь; + КонецПопытки; + +КонецФункции + +Функция ОпределитьРасположениеЭлементовУправления() + + МассивНастроек = Новый Массив; + НастройкиЭлементаУправления = Новый Структура; + + НастройкиЭлементаУправления.Вставить("Поле", "СписокРегистров"); + НастройкиЭлементаУправления.Вставить("РастягиватьПоГоризонтали", Ложь); + НастройкиЭлементаУправления.Вставить("АвтоМаксимальнаяШирина", Истина); + НастройкиЭлементаУправления.Вставить("Ширина", 40); + + МассивНастроек.Добавить(НастройкиЭлементаУправления); + + НастройкиЭлементовУправления = Новый Структура(); + НастройкиЭлементовУправления.Вставить("ПараметрыДанных", МассивНастроек); + + Возврат НастройкиЭлементовУправления; + +КонецФункции + +Функция ПерехватитьГлобальныеНастройки() + + ГлобальныеНастройки = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ГлобальныеНастройки; + + ТаблицаГлобальныхНастроек = Новый ТаблицаЗначений; + КолонкиГлобальныхНастроек = ТаблицаГлобальныхНастроек.Колонки; + КолонкиГлобальныхНастроек.Добавить("ИмяРегистра", + Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + КолонкиГлобальныхНастроек.Добавить("ПредставлениеРегистра", + Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); + КолонкиГлобальныхНастроек.Добавить("ВидРегистра", + Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(32))); + КолонкиГлобальныхНастроек.Добавить("ЛокализацияВидРегистра", + Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(32))); + КолонкиГлобальныхНастроек.Добавить("КоличествоЗаписей" , Новый ОписаниеТипов("Число")); + КолонкиГлобальныхНастроек.Добавить("НадписьРезультат" , + Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + + Для Каждого ЭлементГлобальныхНастроек Из ГлобальныеНастройки Цикл + + НоваяСтрока = ТаблицаГлобальныхНастроек.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлементГлобальныхНастроек); + + НадписьРезультат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 ""%2"" (%3)'"), + СокрЛП(НРег(ЭлементГлобальныхНастроек.ЛокализацияВидРегистра)), + ЭлементГлобальныхНастроек.ПредставлениеРегистра, + Формат(ЭлементГлобальныхНастроек.КоличествоЗаписей, "ЧГ=0")); + + НоваяСтрока.НадписьРезультат = НадписьРезультат; + + КонецЦикла; + + Возврат ТаблицаГлобальныхНастроек; + +КонецФункции + +Функция УстановитьПараметрВывода(КомпоновщикНастроекГруппировка, ИмяПараметра, Значение) + + ПараметрСКД = Новый ПараметрКомпоновкиДанных(ИмяПараметра); + Если ТипЗнч(КомпоновщикНастроекГруппировка) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + ЗначениеПараметра = КомпоновщикНастроекГруппировка.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(ПараметрСКД); + Иначе + ЗначениеПараметра = КомпоновщикНастроекГруппировка.ПараметрыВывода.НайтиЗначениеПараметра(ПараметрСКД); + КонецЕсли; + + Если ЗначениеПараметра <> Неопределено Тогда + ЗначениеПараметра.Использование = Истина; + ЗначениеПараметра.Значение = Значение; + КонецЕсли; + + Возврат ЗначениеПараметра; + +КонецФункции + +Процедура НайтиГруппировкуРекурсивно(КоллекцияЭлементов, МассивВыбранныхПолей, ЗначениеПоиска) + + Для каждого Элемент Из КоллекцияЭлементов Цикл + Если ТипЗнч(Элемент) = Тип("ГруппировкаКомпоновкиДанных") Тогда + Если Элемент.Имя = ЗначениеПоиска Тогда + Если Элемент.Структура.Количество() > 0 Тогда + ДетальныеЗаписи = Элемент.Структура[0]; + ВыбранныеПоля = ДетальныеЗаписи.Выбор.Элементы; + Для Каждого ВыбранноеПоле Из ВыбранныеПоля Цикл + МассивВыбранныхПолей.Добавить(ВыбранноеПоле); + КонецЦикла; + КонецЕсли; + КонецЕсли; + НайтиГруппировкуРекурсивно(Элемент.Структура, МассивВыбранныхПолей, ЗначениеПоиска); + ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") Тогда + НайтиГруппировкуРекурсивно(Элемент.Строки, МассивВыбранныхПолей, ЗначениеПоиска); + НайтиГруппировкуРекурсивно(Элемент.Колонки, МассивВыбранныхПолей, ЗначениеПоиска); + ИначеЕсли ТипЗнч(Элемент) = Тип("ДиаграммаКомпоновкиДанных") Тогда + НайтиГруппировкуРекурсивно(Элемент.Серии, МассивВыбранныхПолей, ЗначениеПоиска); + НайтиГруппировкуРекурсивно(Элемент.Точки, МассивВыбранныхПолей, ЗначениеПоиска); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ПараметрыОтчета(НастройкиКД, ПользовательскиеНастройкиКД) + + Результат = Новый Структура("ДокументВладелец"); + + ПараметрДокументВладелец = Неопределено; + + Если ТипЗнч(ПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + Для Каждого ЭлементКД Из ПользовательскиеНастройкиКД.Элементы Цикл + Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ИмяПараметра = Строка(ЭлементКД.Параметр); + Если ИмяПараметра = "ДокументВладелец" Тогда + ПараметрДокументВладелец = ЭлементКД; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ПараметрДокументВладелец = Неопределено Тогда + ПараметрДокументВладелец = НастройкиКД.ПараметрыДанных.Элементы.Найти("ДокументВладелец"); + КонецЕсли; + + Если ПараметрДокументВладелец <> Неопределено Тогда + Результат.ДокументВладелец = ПараметрДокументВладелец.Значение; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/Заголовок/Template.mxlx b/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/Заголовок/Template.mxlx new file mode 100644 index 000000000..e27f82981 --- /dev/null +++ b/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/Заголовок/Template.mxlx @@ -0,0 +1,97 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 1 + + 1 + + + 2 + + + ru + Движения документа [СсылкаНаДокумент] + + + + + + + + 2 + + 3 + true + + + + 4 + + 4 + true + + + + 15 + + true + + + true + 5 + 5 + 5 + + ОбластьЗаголовок + + Rows + 1 + 1 + -1 + -1 + + + + ПустаяОбласть + + Rows + 4 + 4 + -1 + -1 + + + + + 0 + #009646 + + + 0 + #009646 + Template + + + 0 + 30 + #009646 + + + 30 + + + 72 + + \ No newline at end of file diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..7309eda62 --- /dev/null +++ b/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,226 @@ + + + + ИсточникДанных1 + Local + + + Main + + + ДокументВладелец + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документ владелец</v8:content> + </v8:item> + + + d4p1:DocumentRef + + + true + false + true + Always + + + ОтрицательноеКрасным + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отрицательное красным</v8:content> + </v8:item> + + + xs:boolean + + true + false + Always + + + ВыделятьВидДвиженияНакопления + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выделять виды движений накопления</v8:content> + </v8:item> + + + xs:boolean + + true + false + Always + + + СписокРегистров + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список регистров</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + false + true + + + ДоступностьВариантаДляРассылки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доступность варианта для рассылки</v8:content> + </v8:item> + + + xs:boolean + + true + false + + + Основной + + + ru + Отчет о движениях документа (Горизонтально) + + + + + + false + ДокументВладелец + + Inaccessible + 6fcf40a8-5012-4329-b32e-d2a97331bc06 + + + ru + Документ владелец + + + + + ОтрицательноеКрасным + true + Normal + d72f4b9a-de0a-47a2-a922-2bbb3fd97cba + + + ВыделятьВидДвиженияНакопления + true + Normal + 2cb5b974-220d-4e7c-81f8-2860ac3804ef + + + false + СписокРегистров + + f487b982-3324-466a-949b-cb90e7eb1511 + + + ru + Выводить только + + + + + false + ДоступностьВариантаДляРассылки + true + Inaccessible + 75ac16ba-c451-4a6d-8e82-c39746a6aa8a + + + ru + Этот параметр служебный. Изменять его не рекомендуется. + + + + + + + false + Заголовок + + + + ВыводитьПараметрыДанных + DontOutput + + + + + + Дополнительный + + + ru + Отчет о движениях документа (Вертикально) + + + + + + false + ДокументВладелец + + Inaccessible + c8fc8c82-b8a3-4797-ac37-8a778304159f + + + ru + Документ владелец + + + + + ОтрицательноеКрасным + true + Normal + b7d2e8ae-717b-44f2-bb2b-86bdd2938f99 + + + ВыделятьВидДвиженияНакопления + true + Normal + 6d756e6e-741b-4763-a8d5-75f7c04e11d9 + + + false + СписокРегистров + + 6ab9de4e-3578-4851-853a-d97f3c856bd2 + + + ru + Выводить только + + + + + false + ДоступностьВариантаДляРассылки + true + Inaccessible + 4c0bf5ee-bb28-4e77-927a-e083ae344bcd + + + ru + Этот параметр служебный. Изменять его не рекомендуется. + + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo b/SSL/src/Reports/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo new file mode 100644 index 000000000..9855784e2 --- /dev/null +++ b/SSL/src/Reports/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo @@ -0,0 +1,37 @@ + + + + + + + ОтчетОДвиженияхДокумента + + ru + Отчет о движениях документа + + CommonForm.ФормаОтчета + Report.ОтчетОДвиженияхДокумента.Template.ПустаяСхемаКомпоновкиДанных + CommonForm.ФормаНастроекОтчета + CommonForm.ФормаВариантаОтчета + SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + + + ПустаяСхемаКомпоновкиДанных + + ru + Пустая схема компоновки данных + + DataCompositionSchema + + + Заголовок + + ru + Заголовок + + + diff --git a/SSL/src/Reports/ОценкаПроизводительности/Help/ru.html b/SSL/src/Reports/ОценкаПроизводительности/Help/ru.html new file mode 100644 index 000000000..01ae06bdb --- /dev/null +++ b/SSL/src/Reports/ОценкаПроизводительности/Help/ru.html @@ -0,0 +1,36 @@ + +

    Предназначен для анализа производительности программы.

    +

    Открывается с помощью ссылки Оценка производительности по ключевым операциям в разделе Администрирование - Обслуживание - Отчеты и обработки - Отчеты администратора.

    +

    Анализ производительности

    +
    • Задайте Период, за который будет проводиться оценка производительности. Для этого задайте Дату начала и Дату окончания периода (обязательно указание времени). +
    • Установкой поля Периодичность замеров регулируется количество результатов, которые будут отображаться в периоде. Поле является обязательным. Если в некотором периоде операция не выполнялась, то в соответствующей ячейке таблицы будет ноль. +
    • В поле Профиль выберите из списка один из профилей ключевых операций. Поле является обязательным. +
    • В поле Имя ключевой операции можно выбрать одну из ключевых операций. +
    • В поле Пользователь можно выбрать одного из пользователей программы. +
    • Нажмите кнопку Сформировать. Отчет состоит из двух частей: графика и таблицы.

    Оценка производительности

    +
    • Оценка производительности выводится в диапазоне от нуля до единицы. В зависимости от значения оценки поле с оценкой выделяется определенным цветом. Полученные оценки можно интерпретировать следующим образом: 

    +

    + + + + + + + + + + + + +
    +

    Шкала APDEX

    +

    Значение

    +

    Оценка

    +

    от

    +

    до

    0.000.50неприемлемо
    0.500.70очень плохо
    0.700.85плохо
    0.850.94хорошо
    0.941.00отлично

    Просмотр данных о ключевой операции

    +
    • +
      Дважды щелкнув мышью по наименованию ключевой операции в таблице, можно просмотреть данные ключевой операции.

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Reports/ОценкаПроизводительности/ManagerModule.bsl b/SSL/src/Reports/ОценкаПроизводительности/ManagerModule.bsl new file mode 100644 index 000000000..77d407e8a --- /dev/null +++ b/SSL/src/Reports/ОценкаПроизводительности/ManagerModule.bsl @@ -0,0 +1,38 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ВариантыОтчетов + +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + + ВариантыОтчетовСуществует = ОценкаПроизводительностиСлужебный.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов"); + Если ВариантыОтчетовСуществует Тогда + МодульВариантыОтчетов = ОценкаПроизводительностиСлужебный.ОбщийМодуль("ВариантыОтчетов"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ОценкаПроизводительностиПоКлючевымОперациям"); + НастройкиВарианта.Описание = + НСтр("ru = 'Предоставляет информацию об оценке производительности'"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "СравнениеОценкиПроизводительности"); + НастройкиВарианта.Описание = + НСтр("ru = 'Предоставляет информацию о сравнении оценки производительности за период'"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ОценкаПроизводительностиПериодВКолонках"); + НастройкиВарианта.Описание = + НСтр("ru = 'Предоставляет информацию об оценке производительности в разрезе периодов. Периоды представлены в колонках'"); + КонецЕсли; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ВариантыОтчетов + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl b/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl new file mode 100644 index 000000000..9b8418c58 --- /dev/null +++ b/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl @@ -0,0 +1,70 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + ПериодНастройка = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период"); + ПериодНастройкаПользовательская = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПериодНастройка.ИдентификаторПользовательскойНастройки); + + ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода"); + ПараметрДанных.Значение = ПериодНастройкаПользовательская.Значение.ДатаНачала; + ПараметрДанных.Использование = Истина; + + ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода"); + ПараметрДанных.Значение = ПериодНастройкаПользовательская.Значение.ДатаОкончания; + ПараметрДанных.Использование = Истина; + + ПериодСравненияНастройка = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПериодСравнения"); + ПериодСравненияНастройкаПользовательская = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПериодСравненияНастройка.ИдентификаторПользовательскойНастройки); + + Если ПериодСравненияНастройкаПользовательская <> Неопределено + И ПериодСравненияНастройкаПользовательская.Использование Тогда + + ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериодаСравненияЧисло"); + ПараметрДанных.Значение = (ПериодСравненияНастройкаПользовательская.Значение.ДатаНачала - Дата(1,1,1)) * 1000; + ПараметрДанных.Использование = Истина; + + ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериодаСравненияЧисло"); + ПараметрДанных.Значение = (ПериодСравненияНастройкаПользовательская.Значение.ДатаОкончания - Дата(1,1,1)) * 1000; + ПараметрДанных.Использование = Истина; + + + ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ВидСравнения"); + ПараметрДанныхВидСравнения = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки); + Если ПараметрДанныхВидСравнения.Значение = "Левое соединение" Тогда + ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос; + СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос = СтрЗаменить(ТекстЗапроса, "{ЛЕВОЕ СОЕДИНЕНИЕ}", "ЛЕВОЕ СОЕДИНЕНИЕ"); + ИначеЕсли ПараметрДанныхВидСравнения.Значение = "Внутреннее соединение" Тогда + ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос; + СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос = СтрЗаменить(ТекстЗапроса, "{ЛЕВОЕ СОЕДИНЕНИЕ}", "ВНУТРЕННЕЕ СОЕДИНЕНИЕ"); + ИначеЕсли ПараметрДанныхВидСравнения.Значение = "Полное соединение" Тогда + ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос; + СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос = СтрЗаменить(ТекстЗапроса, "{ЛЕВОЕ СОЕДИНЕНИЕ}", "ПОЛНОЕ СОЕДИНЕНИЕ"); + КонецЕсли; + Иначе + + Если ПериодСравненияНастройкаПользовательская = Неопределено Тогда + ПериодСравненияНастройка.Использование = Ложь; + ПараметрДанныхВидСравнения = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ВидСравнения"); + ПараметрДанныхВидСравнения.Использование = Ложь; + КонецЕсли; + + ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериодаСравненияЧисло"); + ПараметрДанных.Значение = 2; + ПараметрДанных.Использование = Истина; + + ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериодаСравненияЧисло"); + ПараметрДанных.Значение = 1; + ПараметрДанных.Использование = Истина; + + ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос; + СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос = СтрЗаменить(ТекстЗапроса, "{ЛЕВОЕ СОЕДИНЕНИЕ}", "ЛЕВОЕ СОЕДИНЕНИЕ"); + КонецЕсли; + + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..dedcb1008 --- /dev/null +++ b/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,2406 @@ + + + + ИсточникДанных1 + Local + + + НаборДанныхЗамеры + + ИдентификаторЗамера + ИдентификаторЗамера + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор замера</v8:content> + </v8:item> + + + true + + + + МаксимальноеЗначение + МаксимальноеЗначение + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Максимум</v8:content> + </v8:item> + + + + Формат + ЧДЦ=3; ЧН=0,000 + + + + + ЦелевоеВремя + ЦелевоеВремя + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Целевое время</v8:content> + </v8:item> + + + + N_T + N_T + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>N T</v8:content> + </v8:item> + + + true + + + + ЗамерыСумма + ЗамерыСумма + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Замеры сумма</v8:content> + </v8:item> + + + true + + + + МинимальноеЗначение + МинимальноеЗначение + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Минимум</v8:content> + </v8:item> + + + + Формат + ЧДЦ=3; ЧН=0,000 + + + + + КоличествоЗамеров + КоличествоЗамеров + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество замеров</v8:content> + </v8:item> + + + + N_T_4T + N_T_4T + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>N t 4 T</v8:content> + </v8:item> + + + true + + + + N_4T + N_4T + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>N 4 T</v8:content> + </v8:item> + + + true + + + + ДисперсияГенеральная + ДисперсияГенеральная + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дисперсия генеральная</v8:content> + </v8:item> + + + true + + + + КлючеваяОперация + КлючеваяОперация + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ключевая операция</v8:content> + </v8:item> + + + + ПериодЗамера + ПериодЗамера + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Период замера</v8:content> + </v8:item> + + + + ЗамерыСуммаПредыдущее + ЗамерыСуммаПредыдущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Замеры сумма предыдущее</v8:content> + </v8:item> + + + true + + + + ИдентификаторЗамераПредыдущее + ИдентификаторЗамераПредыдущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор замера предыдущее</v8:content> + </v8:item> + + + true + + + + КоличествоЗамеровПредыдущее + КоличествоЗамеровПредыдущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество замеров предыдущее</v8:content> + </v8:item> + + + true + + + + МинимальноеЗначениеПредыдущее + МинимальноеЗначениеПредыдущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Минимальное значение предыдущее</v8:content> + </v8:item> + + + true + + + + N_4T_Предыдущее + N_4T_Предыдущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>N 4 t предыдущее</v8:content> + </v8:item> + + + true + + + + N_T_Предыдущее + N_T_Предыдущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>N t предыдущее</v8:content> + </v8:item> + + + true + + + + МаксимальноеЗначениеПредыдущее + МаксимальноеЗначениеПредыдущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Максимальное значение предыдущее</v8:content> + </v8:item> + + + true + + + + ДисперсияГенеральнаяПредыдущее + ДисперсияГенеральнаяПредыдущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дисперсия генеральная предыдущее</v8:content> + </v8:item> + + + true + + + + N_T_4T_Предыдущее + N_T_4T_Предыдущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>N t 4 t предыдущее</v8:content> + </v8:item> + + + true + + + + Пользователь + Пользователь + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователь</v8:content> + </v8:item> + + + + Приоритет + Приоритет + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Приоритет</v8:content> + </v8:item> + + + ИсточникДанных1 + ВЫБРАТЬ + ВЫБОР &ПереодичностьЗамеров + КОГДА 1 + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), ЧАС) + КОГДА 2 + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), ДЕНЬ) + КОГДА 3 + ТОГДА ВЫБОР + КОГДА Замеры.ДатаНачалаЗамера < &НачалоПериодаЧисло + ТОГДА ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200) + ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), НЕДЕЛЯ) + КОНЕЦ + КОГДА 4 + ТОГДА &ПериодНет + КОНЕЦ КАК ПериодЗамера, + КлючевыеОперации.Приоритет КАК Приоритет, + КлючевыеОперации.КлючеваяОперация КАК КлючеваяОперация, + КОЛИЧЕСТВО(*) КАК КоличествоЗамеров, + СУММА(Замеры.ВремяВыполнения) КАК ЗамерыСумма, + 1 КАК ИдентификаторЗамера, + (СУММА(Замеры.ВремяВыполнения * Замеры.ВремяВыполнения) - 2 * СРЕДНЕЕ(Замеры.ВремяВыполнения) * СУММА(Замеры.ВремяВыполнения) + КОЛИЧЕСТВО(*) * (СРЕДНЕЕ(Замеры.ВремяВыполнения) * СРЕДНЕЕ(Замеры.ВремяВыполнения))) / КОЛИЧЕСТВО(*) КАК ДисперсияГенеральная, + СУММА(ВЫБОР + КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК N_T, + СУММА(ВЫБОР + КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя + И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК N_T_4T, + СУММА(ВЫБОР + КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК N_4T, + КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + МИНИМУМ(Замеры.ВремяВыполнения) КАК МинимальноеЗначение, + МАКСИМУМ(Замеры.ВремяВыполнения) КАК МаксимальноеЗначение, + Замеры.Пользователь +ПОМЕСТИТЬ ЗамерыТекущие +ИЗ + РегистрСведений.ЗамерыВремени КАК Замеры + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиКлючевыхОпераций.КлючевыеОперацииПрофиля КАК КлючевыеОперации + ПО (КлючевыеОперации.Ссылка = &Профиль) + И Замеры.КлючеваяОперация = КлючевыеОперации.КлючеваяОперация +ГДЕ + Замеры.ДатаНачалаЗамера МЕЖДУ &НачалоПериодаЧисло И &КонецПериодаЧисло +{ГДЕ + (Замеры.ВремяВыполнения >= &КоэффициентНижнейГраницыЗамера * КлючевыеОперации.ЦелевоеВремя), + (Замеры.ВремяВыполнения <= &КоэффициентВерхнейГраницыЗамера * КлючевыеОперации.ЦелевоеВремя), + Замеры.Пользователь} + +СГРУППИРОВАТЬ ПО + ВЫБОР &ПереодичностьЗамеров + КОГДА 1 + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), ЧАС) + КОГДА 2 + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), ДЕНЬ) + КОГДА 3 + ТОГДА ВЫБОР + КОГДА Замеры.ДатаНачалаЗамера < &НачалоПериодаЧисло + ТОГДА ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200) + ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), НЕДЕЛЯ) + КОНЕЦ + КОГДА 4 + ТОГДА &ПериодНет + КОНЕЦ, + КлючевыеОперации.КлючеваяОперация, + КлючевыеОперации.Приоритет, + КлючевыеОперации.ЦелевоеВремя, + Замеры.Пользователь + +ИНДЕКСИРОВАТЬ ПО + ПериодЗамера, + КлючеваяОперация +; + +//////////////////////////////////////////////////////////////////////////////// +ВЫБРАТЬ + ВЫБОР &ПереодичностьЗамеров + КОГДА 1 + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), ЧАС) + КОГДА 2 + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), ДЕНЬ) + КОГДА 3 + ТОГДА ВЫБОР + КОГДА Замеры.ДатаНачалаЗамера - (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло) < &НачалоПериодаЧисло + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200), НЕДЕЛЯ) + ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), НЕДЕЛЯ) + КОНЕЦ + КОГДА 4 + ТОГДА &ПериодНет + КОНЕЦ КАК ПериодЗамера, + КлючевыеОперации.Приоритет КАК Приоритет, + КлючевыеОперации.КлючеваяОперация КАК КлючеваяОперация, + КОЛИЧЕСТВО(*) КАК КоличествоЗамеров, + СУММА(Замеры.ВремяВыполнения) КАК ЗамерыСумма, + 1 КАК ИдентификаторЗамера, + (СУММА(Замеры.ВремяВыполнения * Замеры.ВремяВыполнения) - 2 * СРЕДНЕЕ(Замеры.ВремяВыполнения) * СУММА(Замеры.ВремяВыполнения) + КОЛИЧЕСТВО(*) * (СРЕДНЕЕ(Замеры.ВремяВыполнения) * СРЕДНЕЕ(Замеры.ВремяВыполнения))) / КОЛИЧЕСТВО(*) КАК ДисперсияГенеральная, + СУММА(ВЫБОР + КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК N_T, + СУММА(ВЫБОР + КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя + И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК N_T_4T, + СУММА(ВЫБОР + КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК N_4T, + КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + МИНИМУМ(Замеры.ВремяВыполнения) КАК МинимальноеЗначение, + МАКСИМУМ(Замеры.ВремяВыполнения) КАК МаксимальноеЗначение, + Замеры.Пользователь +ПОМЕСТИТЬ ЗамерыПредыдущие +ИЗ + РегистрСведений.ЗамерыВремени КАК Замеры + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиКлючевыхОпераций.КлючевыеОперацииПрофиля КАК КлючевыеОперации + ПО (КлючевыеОперации.Ссылка = &Профиль) + И Замеры.КлючеваяОперация = КлючевыеОперации.КлючеваяОперация +ГДЕ + Замеры.ДатаНачалаЗамера МЕЖДУ &НачалоПериодаСравненияЧисло И &КонецПериодаСравненияЧисло +{ГДЕ + Замеры.Пользователь} + +СГРУППИРОВАТЬ ПО + ВЫБОР &ПереодичностьЗамеров + КОГДА 1 + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), ЧАС) + КОГДА 2 + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), ДЕНЬ) + КОГДА 3 + ТОГДА ВЫБОР + КОГДА Замеры.ДатаНачалаЗамера - (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло) < &НачалоПериодаЧисло + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200), НЕДЕЛЯ) + ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), НЕДЕЛЯ) + КОНЕЦ + КОГДА 4 + ТОГДА &ПериодНет + КОНЕЦ, + КлючевыеОперации.КлючеваяОперация, + КлючевыеОперации.Приоритет, + КлючевыеОперации.ЦелевоеВремя, + Замеры.Пользователь + +ИНДЕКСИРОВАТЬ ПО + ПериодЗамера, + КлючеваяОперация +; + +//////////////////////////////////////////////////////////////////////////////// +ВЫБРАТЬ + ЕСТЬNULL(ЗамерыТекущие.Приоритет,ЗамерыПредыдущие.Приоритет) КАК Приоритет, + ЕСТЬNULL(ЗамерыТекущие.ПериодЗамера,ЗамерыПредыдущие.ПериодЗамера) КАК ПериодЗамера, + ЕСТЬNULL(ЗамерыТекущие.КлючеваяОперация,ЗамерыПредыдущие.КлючеваяОперация) КАК КлючеваяОперация, + ЗамерыТекущие.КоличествоЗамеров КАК КоличествоЗамеров, + ЗамерыПредыдущие.КоличествоЗамеров КАК КоличествоЗамеровПредыдущее, + ЗамерыТекущие.ЗамерыСумма КАК ЗамерыСумма, + ЗамерыПредыдущие.ЗамерыСумма КАК ЗамерыСуммаПредыдущее, + ЗамерыТекущие.ИдентификаторЗамера КАК ИдентификаторЗамера, + ЗамерыПредыдущие.ИдентификаторЗамера КАК ИдентификаторЗамераПредыдущее, + ЗамерыТекущие.ДисперсияГенеральная КАК ДисперсияГенеральная, + ЗамерыПредыдущие.ДисперсияГенеральная КАК ДисперсияГенеральнаяПредыдущее, + ЗамерыТекущие.N_T КАК N_T, + ЗамерыПредыдущие.N_T КАК N_T_Предыдущее, + ЗамерыТекущие.N_T_4T КАК N_T_4T, + ЗамерыПредыдущие.N_T_4T КАК N_T_4T_Предыдущее, + ЗамерыТекущие.N_4T КАК N_4T, + ЗамерыПредыдущие.N_4T КАК N_4T_Предыдущее, + ЕСТЬNULL(ЗамерыТекущие.ЦелевоеВремя, ЗамерыПредыдущие.ЦелевоеВремя) КАК ЦелевоеВремя, + ЗамерыТекущие.МинимальноеЗначение КАК МинимальноеЗначение, + ЗамерыПредыдущие.МинимальноеЗначение КАК МинимальноеЗначениеПредыдущее, + ЗамерыТекущие.МаксимальноеЗначение КАК МаксимальноеЗначение, + ЗамерыПредыдущие.МаксимальноеЗначение КАК МаксимальноеЗначениеПредыдущее, + ЕСТЬNULL(ЗамерыТекущие.Пользователь, ЗамерыПредыдущие.Пользователь) КАК Пользователь +ИЗ + ЗамерыТекущие КАК ЗамерыТекущие + {ЛЕВОЕ СОЕДИНЕНИЕ} ЗамерыПредыдущие КАК ЗамерыПредыдущие + ПО (ЗамерыПредыдущие.ПериодЗамера = ЗамерыТекущие.ПериодЗамера) + И (ЗамерыПредыдущие.КлючеваяОперация = ЗамерыТекущие.КлючеваяОперация) + И (ЗамерыПредыдущие.Пользователь = ЗамерыТекущие.Пользователь) + + + APDEX + Выразить((СУММА(N_T) + СУММА(N_T_4T/2))/СУММА(КоличествоЗамеров), "Число(4,3)") + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>APDEX</v8:content> + </v8:item> + + + + Формат + ЧДЦ=3; ЧН=0,000 + + + + + СреднееЗначениеЗамера + ВЫразить(СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров), "Число(15,3)") + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Среднее</v8:content> + </v8:item> + + + + Формат + ЧДЦ=3; ЧН=0,000 + + + + + СтандартноеОтклонение + ВЫБОР КОГДА СУММА(КоличествоЗамеров)=1 ТОГДА 0 ИНАЧЕ SQRT(((СУММА(ВычислитьВыражениеСГруппировкойМассив("ДисперсияГенеральная*СУММА(КоличествоЗамеров)"))/СУММА(ВычислитьВыражениеСГруппировкойМассив("СУММА(КоличествоЗамеров)"))+ +СУММА(ВычислитьВыражениеСГруппировкойМассив("(ВычислитьВыражение(""СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров)"",,,""Первая"", ""Последняя"") - (СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров))) * (ВычислитьВыражение(""СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров)"",,,""Первая"", ""Последняя"") - (СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров))) * КоличествоЗамеров"))/СУММА(КоличествоЗамеров))*СУММА(КоличествоЗамеров))/(СУММА(КоличествоЗамеров) - 1)) +КОНЕЦ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Стандартное отклонение</v8:content> + </v8:item> + + + + Формат + ЧДЦ=3; ЧН=0,000 + + + + + УровеньЗаписи + Уровень() + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уровень записи</v8:content> + </v8:item> + + + + APDEXПредыдущее + Выразить((СУММА(N_T_Предыдущее) + СУММА(N_T_4T_Предыдущее/2))/СУММА(КоличествоЗамеровПредыдущее), "Число(4,3)") + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>APDEX (прошлый период)</v8:content> + </v8:item> + + + + Формат + ЧДЦ=3; ЧН=0,000 + + + + + APDEXДельта + Выразить((СУММА(N_T) + СУММА(N_T_4T/2))/СУММА(КоличествоЗамеров), "Число(4,3)") +- Выразить((СУММА(N_T_Предыдущее) + СУММА(N_T_4T_Предыдущее/2))/СУММА(КоличествоЗамеровПредыдущее), "Число(4,3)") + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>APDEX (дельта)</v8:content> + </v8:item> + + + + Формат + ЧДЦ=3; ЧН=0,000 + + + + + СреднееЗначениеЗамераПредыдущее + Выразить(СУММА(ЗамерыСуммаПредыдущее)/СУММА(КоличествоЗамеровПредыдущее), "Число(15,3)") + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Среднее (прошлый период)</v8:content> + </v8:item> + + + + Формат + ЧДЦ=3; ЧН=0,000 + + + + + СреднееЗначениеЗамераДельта + ВЫразить(СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров), "Число(15,3)") +- +Выразить(СУММА(ЗамерыСуммаПредыдущее)/СУММА(КоличествоЗамеровПредыдущее), "Число(15,3)") + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Среднее (дельта)</v8:content> + </v8:item> + + + + Формат + ЧДЦ=3; ЧН=0,000 + + + + + СреднееЗначениеЗамера + СреднееЗначениеЗамера + + + КоличествоЗамеров + Сумма(КоличествоЗамеров) + + + СтандартноеОтклонение + ВЫБОР КОГДА СУММА(КоличествоЗамеров)=1 ТОГДА 0 ИНАЧЕ SQRT(((СУММА(ВычислитьВыражениеСГруппировкойМассив("ДисперсияГенеральная*СУММА(КоличествоЗамеров)"))/СУММА(ВычислитьВыражениеСГруппировкойМассив("СУММА(КоличествоЗамеров)"))+ +СУММА(ВычислитьВыражениеСГруппировкойМассив("(ВычислитьВыражение(""СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров)"",,,""Первая"", ""Последняя"") - (СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров))) * (ВычислитьВыражение(""СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров)"",,,""Первая"", ""Последняя"") - (СУММА(ЗамерыСумма)/СУММА(КоличествоЗамеров))) * КоличествоЗамеров"))/СУММА(КоличествоЗамеров))*СУММА(КоличествоЗамеров))/(СУММА(КоличествоЗамеров) - 1)) +КОНЕЦ + + + МинимальноеЗначение + Минимум(МинимальноеЗначение) + + + МаксимальноеЗначение + Максимум(МаксимальноеЗначение) + + + APDEX + APDEX + + + УровеньЗаписи + УровеньЗаписи + + + APDEXПредыдущее + APDEXПредыдущее + + + APDEXДельта + APDEXДельта + + + СреднееЗначениеЗамераПредыдущее + СреднееЗначениеЗамераПредыдущее + + + СреднееЗначениеЗамераДельта + СреднееЗначениеЗамераДельта + + + КоличествоЗамеровПредыдущее + Сумма(КоличествоЗамеровПредыдущее) + + + ПериодСравнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прошлый период</v8:content> + </v8:item> + + + v8:StandardPeriod + + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + false + + + Период + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Период</v8:content> + </v8:item> + + + v8:StandardPeriod + + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + false + true + Always + + + ПереодичностьЗамеров + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Периодичность замеров</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Any + + + 0 + false + + 1 + + + ru + Час + + + + + 2 + + + ru + День + + + + + 3 + + + ru + Неделя + + + + + 4 + + + ru + Весь период + + + + true + Always + + + ВидСравнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вид сравнения</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + Левое соединение + false + + Левое соединение + + + ru + Левое соединение + + + + + Внутреннее соединение + + + ru + Внутреннее соединение + + + + + Полное соединение + + + ru + Полное соединение + + + + + + КоэффициентНижнейГраницыЗамера + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент нижней границы замера</v8:content> + </v8:item> + + + xs:decimal + + 15 + 5 + Nonnegative + + + 0 + false + + + КоэффициентВерхнейГраницыЗамера + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент верхней границы замера</v8:content> + </v8:item> + + + xs:decimal + + 15 + 5 + Any + + + 0 + false + + + ПериодНет + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Период нет</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + + + + + + НачалоПериодаЧисло + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Начало периода число</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + 0 + true + РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), &Период.ДатаНачала, "Секунда") * 1000 + + + КонецПериодаЧисло + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конец периода число</v8:content> + </v8:item> + + + xs:decimal + + 14 + 0 + Nonnegative + + + 0 + true + РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), &Период.ДатаОкончания, "Секунда") * 1000 + + + НачалоПериодаСравненияЧисло + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Начало периода сравнения число</v8:content> + </v8:item> + + + xs:decimal + + 14 + 0 + Any + + + 0 + true + РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), &ПериодСравнения.ДатаНачала, "Секунда") * 1000 + true + Always + + + КонецПериодаСравненияЧисло + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конец периода сравнения число</v8:content> + </v8:item> + + + xs:decimal + + 14 + 0 + Nonnegative + + + 0 + true + РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), &ПериодСравнения.ДатаОкончания, "Секунда") * 1000 + true + Always + + + НачалоПериода + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Начало периода</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаНачала + true + Always + + + КонецПериода + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конец периода</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаОкончания + true + Always + + + Профиль + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Профиль</v8:content> + </v8:item> + + + d4p1:CatalogRef.ПрофилиКлючевыхОпераций + + + false + true + Always + + + + + + ПериодЗамера + + + + APDEX + + + + СреднееЗначениеЗамера + + + + ОценкаПроизводительностиПоКлючевымОперациям + + + ru + Оценка производительности по ключевым операциям + + + + + + ПериодЗамера + + + КлючеваяОперация + + + ЦелевоеВремя + + + Приоритет + + + APDEX + + + ru + APDEX + + + + + КоличествоЗамеров + + + СреднееЗначениеЗамера + + + СтандартноеОтклонение + + + МинимальноеЗначение + + + МаксимальноеЗначение + + + + + false + КлючеваяОперация + Equal + f828f195-6dc4-4561-a56b-6191b5c85cc7 + + + false + Пользователь + Equal + e1291884-5c13-4b7d-bf8e-8cab1dfd3ee1 + + + + + ПериодСравнения + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + Период + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + 62cf59f5-3187-4875-b607-31c125370421 + + + ПереодичностьЗамеров + День + 72f8ee98-3425-49ba-ab81-37cbbb7ed01a + + + ВидСравнения + Левое соединение + Normal + + + false + КоэффициентНижнейГраницыЗамера + 0 + Normal + 19e86962-f96e-43c4-98a8-fb5943e11e63 + + + false + КоэффициентВерхнейГраницыЗамера + 0 + Normal + 1b8eb627-fdc8-415d-9b96-253add5209d8 + + + false + Профиль + + 2c267d2a-7d45-4193-9bc7-01ca05d143e3 + + + + + Приоритет + Asc + + + APDEX + Asc + + + + + + + ПериодЗамера + + + + + ПериодЗамера + Filled + + + + + Формат + + + ru + ДФ='дд.ММ.гг ЧЧ:мм' + + + + + + + + + APDEX + + + + + AndGroup + + APDEX + GreaterOrEqual + 0 + + + APDEX + LessOrEqual + 0.5 + + + APDEX + Filled + + + + + + ЦветФона + #CCCCCC + + + DontUse + DontUse + DontUse + DontUse + + + + + APDEX + + + + + AndGroup + + APDEX + Greater + 0.5 + + + APDEX + LessOrEqual + 0.7 + + + + + + ЦветФона + #FFCC66 + + + DontUse + DontUse + DontUse + DontUse + + + + + APDEX + + + + + AndGroup + + APDEX + Greater + 0.7 + + + APDEX + LessOrEqual + 0.85 + + + + + + ЦветФона + #FFFF66 + + + DontUse + DontUse + DontUse + DontUse + + + + + APDEX + + + + + AndGroup + + APDEX + Greater + 0.85 + + + APDEX + LessOrEqual + 0.94 + + + + + + ЦветФона + #CCFF99 + + + DontUse + DontUse + DontUse + DontUse + + + + + APDEX + + + + + AndGroup + + APDEX + Greater + 0.94 + + + + + + ЦветФона + #CCFFFF + + + DontUse + DontUse + DontUse + DontUse + + + + + false + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + Begin + + + false + ТипДиаграммы + Column3D + + ТипДиаграммы.БазовоеЗначение + -0.00001 + + + ТипДиаграммы.ПропускатьБазовоеЗначение + true + + + + + + + + ПериодЗамера + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ПериодЗамера + Asc + + + + + + + + + APDEX + + + ru + APDEX + + + + + + + ТипДиаграммы + Line + + ТипДиаграммы.РежимСглаживания + SmoothCurve + + + ТипДиаграммы.НатяжениеСглаживания + 95 + + + + + + + + ПериодЗамера + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ПериодЗамера + Asc + + + + + + + + + КлючеваяОперация + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + ЦелевоеВремя + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + Приоритет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Приоритет + Asc + + + APDEX + Asc + + + + + + + + false + ВертикальноеРасположениеОбщихИтогов + Begin + + + + + + + + СравнениеОценкиПроизводительности + + + ru + Сравнение оценки производительности + + + + + + ПериодЗамера + + + КлючеваяОперация + + + ЦелевоеВремя + + + Приоритет + + + APDEX + + + ru + APDEX + + + + + APDEXПредыдущее + + + ru + APDEX (прошлый период) + + + + + СреднееЗначениеЗамера + + + ru + Среднее + + + + + СреднееЗначениеЗамераПредыдущее + + + ru + Среднее (прошлый период) + + + + + КоличествоЗамеров + + + ru + Количество замеров + + + + + КоличествоЗамеровПредыдущее + + + ru + Количество замеров (прошлый период) + + + + + СтандартноеОтклонение + + + МинимальноеЗначение + + + МаксимальноеЗначение + + + + + false + КлючеваяОперация + Equal + f828f195-6dc4-4561-a56b-6191b5c85cc7 + + + false + Пользователь + Equal + e1291884-5c13-4b7d-bf8e-8cab1dfd3ee1 + + + + + ПериодСравнения + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + 1fbe9375-33b1-467e-a264-83e2aea71e6c + + + Период + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + 62cf59f5-3187-4875-b607-31c125370421 + + + ПереодичностьЗамеров + День + 72f8ee98-3425-49ba-ab81-37cbbb7ed01a + + + ВидСравнения + Полное соединение + Normal + 69697b59-f6d8-4b08-9141-a3d3a1532aa5 + + + false + КоэффициентНижнейГраницыЗамера + 0 + Normal + 19e86962-f96e-43c4-98a8-fb5943e11e63 + + + false + КоэффициентВерхнейГраницыЗамера + 0 + Normal + 1b8eb627-fdc8-415d-9b96-253add5209d8 + + + false + Профиль + + 2c267d2a-7d45-4193-9bc7-01ca05d143e3 + + + + + Приоритет + Asc + + + APDEX + Asc + + + + + + + APDEX + + + + + APDEXДельта + Greater + 0 + + + + + ЦветТекста + web:Green + + + DontUse + DontUse + + + + + APDEX + + + + + APDEXДельта + Less + 0 + + + + + ЦветТекста + web:Red + + + DontUse + DontUse + + + + + СреднееЗначениеЗамера + + + + + СреднееЗначениеЗамераДельта + Greater + 0 + + + + + ЦветТекста + web:Red + + + DontUse + DontUse + + + + + СреднееЗначениеЗамера + + + + + СреднееЗначениеЗамераДельта + Less + 0 + + + + + ЦветТекста + web:Green + + + DontUse + DontUse + + + + + ПериодЗамера + + + + + ПериодЗамера + Filled + + + + + Формат + + + ru + ДФ='дд.ММ.гг ЧЧ:мм' + + + + + + + + + false + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + Begin + + + false + ТипДиаграммы + Column3D + + ТипДиаграммы.БазовоеЗначение + -0.00001 + + + ТипДиаграммы.ПропускатьБазовоеЗначение + true + + + + + + + + ПериодЗамера + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ПериодЗамера + Asc + + + + + + + + + APDEX + + + ru + APDEX + + + + + APDEXПредыдущее + + + ru + APDEX (прошлый период) + + + + + + + ТипДиаграммы + Line + + ТипДиаграммы.РежимСглаживания + SmoothCurve + + + ТипДиаграммы.НатяжениеСглаживания + 95 + + + + + + + + ПериодЗамера + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ПериодЗамера + Asc + + + + + + + + + КлючеваяОперация + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + ЦелевоеВремя + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + Приоритет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Приоритет + Asc + + + APDEX + Asc + + + + + + + + false + ВертикальноеРасположениеОбщихИтогов + Begin + + + + + + + + ОценкаПроизводительностиПериодВКолонках + + + ru + Оценка производительности (период в колонках) + + + + + + ПериодЗамера + + + КлючеваяОперация + + + ЦелевоеВремя + + + Приоритет + + + APDEX + + + ru + APDEX + + + + + + + false + КлючеваяОперация + Equal + f828f195-6dc4-4561-a56b-6191b5c85cc7 + + + false + Пользователь + Equal + e1291884-5c13-4b7d-bf8e-8cab1dfd3ee1 + + + + + ПериодСравнения + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + Период + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + 62cf59f5-3187-4875-b607-31c125370421 + + + ПереодичностьЗамеров + День + 72f8ee98-3425-49ba-ab81-37cbbb7ed01a + + + ВидСравнения + Левое соединение + Normal + + + false + КоэффициентНижнейГраницыЗамера + 0 + Normal + 19e86962-f96e-43c4-98a8-fb5943e11e63 + + + false + КоэффициентВерхнейГраницыЗамера + 0 + Normal + 1b8eb627-fdc8-415d-9b96-253add5209d8 + + + false + Профиль + + 2c267d2a-7d45-4193-9bc7-01ca05d143e3 + + + + + Приоритет + Asc + + + APDEX + Asc + + + + + + + ПериодЗамера + + + + + ПериодЗамера + Filled + + + + + Формат + + + ru + ДФ='дд.ММ.гг ЧЧ:мм' + + + + + + + + + APDEX + + + + + AndGroup + + APDEX + GreaterOrEqual + 0 + + + APDEX + LessOrEqual + 0.5 + + + APDEX + Filled + + + + + + ЦветФона + #CCCCCC + + + DontUse + DontUse + DontUse + DontUse + + + + + APDEX + + + + + AndGroup + + APDEX + Greater + 0.5 + + + APDEX + LessOrEqual + 0.7 + + + + + + ЦветФона + #FFCC66 + + + DontUse + DontUse + DontUse + DontUse + + + + + APDEX + + + + + AndGroup + + APDEX + Greater + 0.7 + + + APDEX + LessOrEqual + 0.85 + + + + + + ЦветФона + #FFFF66 + + + DontUse + DontUse + DontUse + DontUse + + + + + APDEX + + + + + AndGroup + + APDEX + Greater + 0.85 + + + APDEX + LessOrEqual + 0.94 + + + + + + ЦветФона + #CCFF99 + + + DontUse + DontUse + DontUse + DontUse + + + + + APDEX + + + + + AndGroup + + APDEX + Greater + 0.94 + + + + + + ЦветФона + #CCFFFF + + + DontUse + DontUse + DontUse + DontUse + + + + + ГоризонтальноеРасположениеОбщихИтогов + Begin + + + ВертикальноеРасположениеОбщихИтогов + Begin + + + false + ТипДиаграммы + Column3D + + ТипДиаграммы.БазовоеЗначение + -0.00001 + + + ТипДиаграммы.ПропускатьБазовоеЗначение + true + + + + + + + + ПериодЗамера + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ПериодЗамера + Asc + + + + + + + + + APDEX + + + ru + APDEX + + + + + + + ТипДиаграммы + Line + + ТипДиаграммы.РежимСглаживания + SmoothCurve + + + ТипДиаграммы.НатяжениеСглаживания + 95 + + + + + + + + + ПериодЗамера + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ПериодЗамера + Asc + + + + + + + + + + КлючеваяОперация + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + ЦелевоеВремя + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + Приоритет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Приоритет + Asc + + + APDEX + Asc + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/Reports/ОценкаПроизводительности/ОценкаПроизводительности.mdo new file mode 100644 index 000000000..2728294c0 --- /dev/null +++ b/SSL/src/Reports/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -0,0 +1,31 @@ + + + + + + + ОценкаПроизводительности + + ru + Оценка производительности + + true + CommonForm.ФормаОтчета + Report.ОценкаПроизводительности.Template.ОсновнаяСхемаКомпоновкиДанных + CommonForm.ФормаНастроекОтчета + CommonForm.ФормаВариантаОтчета + SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Form.form b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Form.form new file mode 100644 index 000000000..5217723ae --- /dev/null +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Form.form @@ -0,0 +1,451 @@ + + + + <key>ru</key> + <value>Исправление проблемы циклических ссылок</value> + + + ПанельИндикаторов + 21 + + ГруппаИндикаторНачалаИсправления + 23 + + НадписьНетИзменений + 25 + + <key>ru</key> + <value>Исправление циклических ссылок может занять продолжительное время. Выполнить исправление?</value> + + true + true + + true + + + НадписьНетИзмененийExtendedTooltip + 27 + Label + true + true + + Left + + + + НадписьНетИзмененийКонтекстноеМеню + 26 + true + + Label + true + 2 + true + true + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Индикатор начала исправления</value> + + + ru + Группа индикатор исправления + + + ГруппаИндикаторНачалаИсправленияРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Page + + auto + false + + + + ГруппаИндикаторИсправления + 19 + + ДекорацияПрогресс + 9 + + <key>ru</key> + <value>Декорация прогресс</value> + + true + true + + true + + + ДекорацияПрогрессExtendedTooltip + 11 + Label + true + true + + Left + + + + ДекорацияПрогрессКонтекстноеМеню + 10 + true + + 5 + true + 2 + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияВыполнениеИсправления + 12 + + <key>ru</key> + <value>Выполняется исправление проблемы. +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияВыполнениеИсправленияРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ДекорацияВыполнениеИсправленияКонтекстноеМеню + 13 + true + + Label + true + 26 + true + true + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Индикатор исправления</value> + + + ГруппаИндикаторИсправленияРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Page + + auto + false + + + + ГруппаИндикаторУспешноеИсправление + 30 + + НадписьУспешноеИсправление + 32 + + <key>ru</key> + <value>Исправление успешно выполнено!</value> + + true + true + + true + + + НадписьУспешноеИсправлениеРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + НадписьУспешноеИсправлениеКонтекстноеМеню + 33 + true + + Label + true + 2 + true + true + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Успешное исправление</value> + + + ru + Группа индикатор исправления + + + ГруппаИндикаторУспешноеИсправлениеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Page + + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель индикаторов</value> + + + ПанельИндикаторовРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Pages + + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ИсправитьПроблему + 3 + true + true + + true + + + ИсправитьПроблемуРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.Command.ИсправитьПроблему + Auto + true + true + true + UserCmds + Auto + + + Закрыть + 1 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 28 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Right + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + Vertical + Bottom + true + true + true + auto + true + + ИдентификаторПроверки + + <key>ru</key> + <value>Идентификатор проверки</value> + + 1 + + String + + 255 + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 2 + + + true + + + true + + + + ИсправитьПроблему + + <key>ru</key> + <value>Исправить проблему</value> + + 1 + + ru + Исправить проблему + + + true + + + + ИсправитьПроблему + + + DontUse + Auto + + + + + + diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Module.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Module.bsl new file mode 100644 index 000000000..c8107ca8a --- /dev/null +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/ИсправлениеЦиклическихСсылок/Module.bsl @@ -0,0 +1,104 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ИдентификаторПроверки = Параметры.ИдентификаторПроверки; + + УстановитьТекущуюСтраницу(ЭтотОбъект, Ложь, Ложь); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ИсправитьПроблему(Команда) + + ДлительнаяОперация = ИсправитьПроблемуВФоне(ИдентификаторПроверки); + Если ДлительнаяОперация <> Неопределено Тогда + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ПараметрыОжидания.Интервал = 2; + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ИсправитьПроблемуВФонеЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьТекущуюСтраницу(Форма, ИдетИсправлениеПроблемы, ИсправлениеУспешноВыполнено) + + ЭлементыФормы = Форма.Элементы; + Если ИдетИсправлениеПроблемы Тогда + ЭлементыФормы.ГруппаИндикаторИсправления.Видимость = Истина; + ЭлементыФормы.ГруппаИндикаторНачалаИсправления.Видимость = Ложь; + ЭлементыФормы.ГруппаИндикаторУспешноеИсправление.Видимость = Ложь; + ИначеЕсли ИсправлениеУспешноВыполнено Тогда + ЭлементыФормы.ГруппаИндикаторИсправления.Видимость = Ложь; + ЭлементыФормы.ГруппаИндикаторНачалаИсправления.Видимость = Ложь; + ЭлементыФормы.ГруппаИндикаторУспешноеИсправление.Видимость = Истина; + Иначе + ЭлементыФормы.ГруппаИндикаторИсправления.Видимость = Ложь; + ЭлементыФормы.ГруппаИндикаторНачалаИсправления.Видимость = Истина; + ЭлементыФормы.ГруппаИндикаторУспешноеИсправление.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ИсправитьПроблемуВФоне(ИдентификаторПроверки) + + Если МонопольныйРежим() Тогда + Возврат Неопределено; + КонецЕсли; + + Если ДлительнаяОперация <> Неопределено Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(ДлительнаяОперация.ИдентификаторЗадания); + КонецЕсли; + + УстановитьТекущуюСтраницу(ЭтотОбъект, Истина, Ложь); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Исправление проблемы'"); + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + Результат = ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ИсправитьПроблемуЦиклическихСсылокВФоновомЗадании", + Новый Структура("ИдентификаторПроверки", ИдентификаторПроверки), ПараметрыВыполнения); + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ИсправитьПроблемуВФонеЗавершение(Результат, ДополнительныеПараметры) Экспорт + + ДлительнаяОперация = Неопределено; + + Если Результат = Неопределено Тогда + УстановитьТекущуюСтраницу(ЭтотОбъект, Истина, Ложь); + Возврат; + ИначеЕсли Результат.Статус = "Ошибка" Тогда + УстановитьТекущуюСтраницу(ЭтотОбъект, Ложь, Ложь); + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + ИначеЕсли Результат.Статус = "Выполнено" Тогда + УстановитьТекущуюСтраницу(ЭтотОбъект, Ложь, Истина); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Help/ru.html b/SSL/src/Reports/РезультатыПроверкиУчета/Help/ru.html new file mode 100644 index 000000000..20e1a8c31 --- /dev/null +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Help/ru.html @@ -0,0 +1,17 @@ + +

    Предназначен для просмотра и устранения выявленных проблем с документами, регистрами и любыми данными в программе, для просмотра результатов проверок ведения учета.

    +

    В отчете выводится:

    +
    • Вид проверки - сведения о проверке и перечень проблемных объектов; +
    • итоговая колонка.

    Сведения о проверке выделены цветом. В этой части выводятся:

    +
    • Наименование проблемы и ее важность; +
    • Возможные причины; +
    • Рекомендации по исправлению; +
    • Решение - в некоторых проверках может быть предусмотрена ссылка, по которой можно перейти к автоматическому исправлению проблемы.

    Затем следует перечень обнаруженных в ходе этой проверки проблемных объектов программы, который состоит из колонок:

    +
    • Данные о проблемном объекте; +
    • Обнаруженная проблема; +
    • Дата проведения проверки.

    Отбор по ответственным

    +
    • Нажмите кнопку Настройки. +
    • В окне Настройки режиме Простой включите флажок Выводить ответственного. +
    • После этого проверенные объекты в отчете будут сгруппированы по ответственным, в специальных колонках по каждому ответственному выводится, сколько проблемных объектов обнаружено.

    Просмотр объекта

    +
    • Дважды щелкните по объекту для перехода к просмотру. Можно исправить обнаруженные в ходе проверки проблемы.

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl new file mode 100644 index 000000000..efecd5f6b --- /dev/null +++ b/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl @@ -0,0 +1,83 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ВариантыОтчетов + +// Настройки размещения в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для передачи в параметрах вспомогательных методов (см. ниже). +// Соответствует 1 параметру процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Ложь); + + НастройкиОтчета.ОпределитьНастройкиФормы = Истина; + НастройкиОтчета.Размещение.Вставить(Метаданные.Подсистемы.Администрирование); + + НастройкиВарианта_Основной = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной"); + НастройкиВарианта_Основной.Описание = НСтр("ru = 'Выводит результаты проверок учета.'"); + НастройкиВарианта_Основной.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Отчет о проблемах объекта'"); + +КонецПроцедуры + +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + + ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.РезультатыПроверкиУчета); + ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.РезультатыПроверкиУчета).Включен = Ложь; + +КонецПроцедуры + +// См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. +Процедура ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка) Экспорт + + Если Не ПравоДоступа("Просмотр", Метаданные.Отчеты.РезультатыПроверкиУчета) Тогда + Возврат; + КонецЕсли; + + Если Не СтрНачинаетсяС(НастройкиФормы.ИмяФормы, Метаданные.Справочники.ПравилаПроверкиУчета.ПолноеИмя()) Тогда + Возврат; + КонецЕсли; + + Команда = КомандыОтчетов.Добавить(); + Команда.Представление = НСтр("ru = 'Результаты проверки учета'"); + Команда.ИмяПараметраФормы = ""; + Команда.Важность = "СмТакже"; + Команда.КлючВарианта = "Основной"; + Команда.Менеджер = "Отчет.РезультатыПроверкиУчета"; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ВариантыОтчетов + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl new file mode 100644 index 000000000..566a8e79b --- /dev/null +++ b/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl @@ -0,0 +1,592 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ВариантыОтчетов + +// Настройки общей формы отчета подсистемы "Варианты отчетов". +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// Неопределено когда вызов без контекста. +// КлючВарианта - Строка, Неопределено - Имя предопределенного +// или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов без контекста. +// Настройки - Структура - см. возвращаемое значение +// ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// +Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт + + Настройки.РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = Истина; + Настройки.СкрытьКомандыРассылки = Истина; + Настройки.ФормироватьСразу = Истина; + + Настройки.События.ПриСозданииНаСервере = Истина; + Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина; + Настройки.События.ПередЗагрузкойВариантаНаСервере = Истина; + +КонецПроцедуры + +// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// Отказ - Передается из параметров обработчика "как есть". +// СтандартнаяОбработка - Передается из параметров обработчика "как есть". +// +// См. также: +// "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике. +// ОтчетыПереопределяемый.ПриСозданииНаСервере(). +// +// Пример 1 - Добавление команды с обработчиком в ОтчетыКлиентПереопределяемый.ОбработчикКоманды: +// Команда = Форма.Команды.Добавить("МояОсобеннаяКоманда"); +// Команда.Действие = "Подключаемый_Команда"; +// Команда.Заголовок = НСтр("ru = 'Моя команда...'"); +// +// Кнопка = Форма.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), Форма.Элементы.ГруппаПрограммныйИнтерфейс); +// Кнопка.ИмяКоманды = Команда.Имя; +// +// Форма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); +// +Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт + + ПараметрыФормы = Форма.Параметры; + Если ПараметрыФормы.Свойство("СсылкаНаОбъект") Тогда + + ИмяПроцедуры = "КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамОбъекта"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Форма", Форма, Тип("УправляемаяФорма")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПроблемныйОбъект", ПараметрыФормы.СсылкаНаОбъект, ОбщегоНазначения.ОписаниеТипаВсеСсылки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "СтандартнаяОбработка", СтандартнаяОбработка, Тип("Булево")); + + СтруктураПараметровДанных = Новый Структура("Контекст", ПараметрыФормы.СсылкаНаОбъект); + УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); + + ИначеЕсли ПараметрыФормы.Свойство("ДанныеКонтекста") Тогда + + Если ТипЗнч(ПараметрыФормы.ДанныеКонтекста) = Тип("Структура") Тогда + + ДанныеКонтекста = ПараметрыФормы.ДанныеКонтекста; + ВыделенныеСтроки = ДанныеКонтекста.ВыделенныеСтроки; + + Если ВыделенныеСтроки.Количество() > 0 Тогда + + ПроблемныеОбъекты = КонтрольВеденияУчетаСлужебный.ПроблемныеОбъекты(ДанныеКонтекста.ВыделенныеСтроки); + + Если ПроблемныеОбъекты.Количество() = 0 Тогда + Отказ = Истина; + Иначе + + СписокПроблемныхОбъектов = Новый СписокЗначений; + СписокПроблемныхОбъектов.ЗагрузитьЗначения(ПроблемныеОбъекты); + + СтруктураПараметровДанных = Новый Структура("Контекст", СписокПроблемныхОбъектов); + УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ПараметрыФормы.Свойство("МассивСсылок") Тогда + + МассивСсылок = ПараметрыФормы.МассивСсылок; + Если МассивСсылок.Количество() > 0 Тогда + + СписокПроблемныхОбъектов = Новый СписокЗначений; + СписокПроблемныхОбъектов.ЗагрузитьЗначения(МассивСсылок); + + СтруктураПараметровДанных = Новый Структура("Контекст", СписокПроблемныхОбъектов); + УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); + + КонецЕсли; + + ИначеЕсли ПараметрыФормы.Свойство("ВидПроверки") Тогда + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемам", "ВидПроверки", ПараметрыФормы.ВидПроверки, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); + + ПодробнаяИнформацияПоВидамПроверки = КонтрольВеденияУчета.ПодробнаяИнформацияПоВидамПроверки(ПараметрыФормы.ВидПроверки); + Если ПодробнаяИнформацияПоВидамПроверки.Количество() = 0 Тогда + Отказ = Истина; + Иначе + + СписокПроверокПередОбновлением = Новый СписокЗначений; + СписокПроверокПередОбновлением.ЗагрузитьЗначения(ОбщегоНазначенияКлиентСервер.СвернутьМассив(ПодробнаяИнформацияПоВидамПроверки.ВыгрузитьКолонку("ПравилоПроверки"))); + + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СписокПроблем", СписокПроверокПередОбновлением); + + КонецЕсли; + + ИначеЕсли ПараметрыФормы.Свойство("ПараметрКоманды") Тогда + + Если ТипЗнч(ПараметрыФормы.ПараметрКоманды) = Тип("Массив") И ПараметрыФормы.ПараметрКоманды.Количество() > 0 Тогда + + СписокПроверок = Новый СписокЗначений; + СписокПроверок.ЗагрузитьЗначения(ПараметрыФормы.ПараметрКоманды); + + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СписокПроблем", СписокПроверок); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Вызывается перед загрузкой новых настроек. Используется для изменения схемы компоновки. +// Например, если схема отчета зависит от ключа варианта или параметров отчета. +// Чтобы изменения схемы вступили в силу следует вызывать метод ОтчетыСервер.ПодключитьСхему(). +// +// Параметры: +// Контекст - Произвольный - +// Параметры контекста, в котором используется отчет. +// Используется для передачи в параметрах метода ОтчетыСервер.ПодключитьСхему(). +// КлючСхемы - Строка - +// Идентификатор текущей схемы компоновщика настроек. +// По умолчанию не заполнен (это означает что компоновщик инициализирован на основании основной схемы). +// Используется для оптимизации, чтобы переинициализировать компоновщик как можно реже. +// Может не использоваться если переинициализация выполняется безусловно. +// КлючВарианта - Строка, Неопределено - +// Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов для варианта расшифровки или без контекста. +// НовыеНастройкиКД - НастройкиКомпоновкиДанных, Неопределено - +// Настройки варианта отчета, которые будут загружены в компоновщик настроек после его инициализации. +// Неопределено когда настройки варианта не надо загружать (уже загружены ранее). +// НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации. +// Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее). +// +// Примеры: +// 1. Компоновщик отчета инициализируется на основании схемы из общих макетов: +// Если КлючСхемы <> "1" Тогда +// КлючСхемы = "1"; +// СхемаКД = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; +// +// 2. Схема зависит от значения параметра, выведенного в пользовательские настройки отчета: +// Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда +// ПолноеИмяОбъектаМетаданных = ""; +// Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл +// Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда +// ИмяПараметра = Строка(ЭлементКД.Параметр); +// Если ИмяПараметра = "ОбъектМетаданных" Тогда +// ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение; +// КонецЕсли; +// КонецЕсли; +// КонецЦикла; +// Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда +// КлючСхемы = ПолноеИмяОбъектаМетаданных; +// СхемаКД = Новый СхемаКомпоновкиДанных; +// // Наполнение схемы... +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; +// КонецЕсли; +// +Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, + НовыеПользовательскиеНастройкиКД) Экспорт + + ПараметрВыводитьОтветственного = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьОтветственного")); + Если ПараметрВыводитьОтветственного <> Неопределено И НовыеПользовательскиеНастройкиКД <> Неопределено Тогда + Настройка = НовыеПользовательскиеНастройкиКД.Элементы.Найти(ПараметрВыводитьОтветственного.ИдентификаторПользовательскойНастройки); + Если Настройка <> Неопределено Тогда + СкрытьГруппировкуПоОтветственным(НовыеНастройкиКД, Настройка); + КонецЕсли; + КонецЕсли; + + Если КлючСхемы <> "1" Тогда + КлючСхемы = "1"; + ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКомпоновкиДанных, КлючСхемы); + КонецЕсли; + +КонецПроцедуры + +// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. +// +// См. также: +// "Расширение управляемой формы для отчета.ПередЗагрузкойВариантаНаСервере" в синтакс-помощнике. +// ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(). +// +Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт + + ПараметрСКД = Новый ПараметрКомпоновкиДанных("Контекст"); + КонтекстПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ПараметрСКД); + + Если КонтекстПараметрСКД <> Неопределено Тогда + Контекст = КонтекстПараметрСКД.Значение; + КонецЕсли; + + Если ЗначениеЗаполнено(Контекст) Тогда + УстановитьПараметрыДанных(НовыеНастройкиКД, Новый Структура("Контекст", Контекст)); + КонецЕсли; + + УстановитьЛокализованныеПараметры(НовыеНастройкиКД); + + ДополнительныеСвойства = КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + Если ДополнительныеСвойства.Свойство("СписокПроблем") Тогда + УстановитьОтборПоСпискуПроблем(НовыеНастройкиКД.Отбор, ВидСравненияКомпоновкиДанных.ВСписке, ДополнительныеСвойства.СписокПроблем); + КонецЕсли; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ВариантыОтчетов + +#КонецОбласти + +#КонецОбласти + +#Область ВыводСКД + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ПроверкиВеденияУчета = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета(); + + НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки(); + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКД, ДанныеРасшифровки); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура("ВнешняяТаблица", ПроверкиВеденияУчета.Проверки), ДанныеРасшифровки, Истина); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ДокументРезультат); + + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + ДоопределитьГотовыйМакет(ДокументРезультат); + +КонецПроцедуры + +Процедура ДоопределитьГотовыйМакет(ДокументРезультат) + + ДоопределитьШапку(ДокументРезультат); + + ДоопределитьВыводИтогов(ДокументРезультат); + + ПроставитьГиперссылкиРешений(ДокументРезультат); + +КонецПроцедуры + +Процедура ДоопределитьШапку(ДокументРезультат) + + ПерваяСтрока = 0; + ПоследняяСтрока = 0; + + ВысотаТаблицы = ДокументРезультат.ВысотаТаблицы; + + Для ИндексСтрок = 1 По ВысотаТаблицы Цикл + + ИмяОбласти = "R" + Формат(ИндексСтрок, "ЧГ=0"); + Область = ДокументРезультат.Область(ИмяОбласти); + + Если СтрНайти(Область.Текст, "[ЗаголовокСкрыт]") <> 0 Тогда + Если ПерваяСтрока = 0 Тогда + ПерваяСтрока = ИндексСтрок; + КонецЕсли; + ПоследняяСтрока = ПоследняяСтрока + 1; + КонецЕсли; + + КонецЦикла; + + ДокументРезультат.УдалитьОбласть(ДокументРезультат.Область("R" + Формат(ПерваяСтрока, "ЧГ=0") + ":R" + Формат(ПерваяСтрока + ПоследняяСтрока - 1, "ЧГ=0")), + ТипСмещенияТабличногоДокумента.ПоВертикали); + + ДокументРезультат.ФиксацияСверху = ПерваяСтрока - 1; + +КонецПроцедуры + +Процедура ДоопределитьВыводИтогов(ДокументРезультат) + + ШиринаТаблицы = ДокументРезультат.ШиринаТаблицы; + ВысотаТаблицы = ДокументРезультат.ВысотаТаблицы; + + Для ИндексСтрок = 1 По ВысотаТаблицы Цикл + + Для ИндексКолонок = 1 По ШиринаТаблицы Цикл + + ИмяОбласти = "R" + Формат(ИндексСтрок, "ЧГ=0") + "C" + Формат(ИндексКолонок, "ЧГ=0"); + Область = ДокументРезультат.Область(ИмяОбласти); + + Если СокрЛП(ВРег(Область.Текст)) = НСтр("ru = 'ИТОГО'") Тогда + Область.ЦветФона = Новый Цвет(255, 250, 217); + Прервать; + КонецЕсли; + + КонецЦикла; + + ИмяОбласти = "R" + Формат(ИндексСтрок, "ЧГ=0") + "C1"; + Область = ДокументРезультат.Область(ИмяОбласти); + ТекстОбласти = СокрЛП(ВРег(Область.Текст)); + + Если ТекстОбласти = НСтр("ru = 'ОШИБКА'") + Или ТекстОбласти = НСтр("ru = 'ВОЗМОЖНЫЕ ПРИЧИНЫ'") + Или ТекстОбласти = НСтр("ru = 'РЕКОМЕНДАЦИИ'") + Или ТекстОбласти = НСтр("ru = 'РЕШЕНИЕ'") Тогда + + Для ИндексКолонок = 3 По ШиринаТаблицы Цикл + ИмяОбластиРесурсов = "R" + Формат(ИндексСтрок, "ЧГ=0") + "C" + Формат(ИндексКолонок, "ЧГ=0"); + ОбластьРесурсов = ДокументРезультат.Область(ИмяОбластиРесурсов); + ОбластьРесурсов.Текст = ""; + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПроставитьГиперссылкиРешений(ДокументРезультат) + + ШиринаТаблицы = ДокументРезультат.ШиринаТаблицы; + ВысотаТаблицы = ДокументРезультат.ВысотаТаблицы; + + Для ИндексСтрок = 1 По ВысотаТаблицы Цикл + + Для ИндексКолонок = 1 По ШиринаТаблицы Цикл + + ИмяОбласти = "R" + Формат(ИндексСтрок, "ЧГ=0") + "C" + Формат(ИндексКолонок, "ЧГ=0"); + Область = ДокументРезультат.Область(ИмяОбласти); + ТекстОбласти = Область.Текст; + + Если СтрНачинаетсяС(ТекстОбласти, "%") И СтрЗаканчиваетсяНа(ТекстОбласти, "%") Тогда + + ТекстОбласти = СокрЛП(СтрЗаменить(ТекстОбласти, "%", "")); + РазделеннаяСтрока = СтрРазделить(ТекстОбласти, ","); + + Если РазделеннаяСтрока.Количество() <> 3 Тогда + Продолжить; + КонецЕсли; + + ОбработчикПереходаКИсправлению = РазделеннаяСтрока.Получить(1); + Если Не ЗначениеЗаполнено(ОбработчикПереходаКИсправлению) Тогда + Область.Текст = ""; + Продолжить; + КонецЕсли; + + ВидПроверки = Справочники.ВидыПроверок.ПолучитьСсылку(Новый УникальныйИдентификатор(РазделеннаяСтрока.Получить(2))); + + СтруктураРасшифровки = Новый Структура; + + СтруктураРасшифровки.Вставить("Назначение", "ИсправитьПроблемы"); + СтруктураРасшифровки.Вставить("ИдентификаторПроверки", РазделеннаяСтрока.Получить(0)); + СтруктураРасшифровки.Вставить("ОбработчикПереходаКИсправлению", ОбработчикПереходаКИсправлению); + СтруктураРасшифровки.Вставить("ВидПроверки", ВидПроверки); + + Область.Расшифровка = СтруктураРасшифровки; + + ОтчетыСервер.ВывестиГиперссылку(Область, СтруктураРасшифровки, НСтр("ru = 'Выполнить исправление'")); + + ИначеЕсли СтрНайти(ТекстОбласти, "<РазмещениеСтруктурыНабораЗаписейДляПоследующейРасшифровки>") <> 0 Тогда + + СтруктураРасшифровки = Новый Структура; + СтруктураРасшифровки.Вставить("Назначение", "ОткрытьФормуРегистра"); + + ОтборНабораЗаписей = Новый Структура; + РазделенныйТекст = СтрРазделить(ТекстОбласти, Символы.ПС); + + Для Каждого ЭлементТекста Из РазделенныйТекст Цикл + + Если РазделенныйТекст.Найти(ЭлементТекста) = 0 Тогда + Продолжить; + ИначеЕсли РазделенныйТекст.Найти(ЭлементТекста) = 1 Тогда + СтруктураРасшифровки.Вставить("ПолноеИмяРегистра", ЭлементТекста); + Продолжить; + КонецЕсли; + + РазделенныйЭлементТекста = СтрРазделить(ЭлементТекста, "~~~", Ложь); + + Если РазделенныйЭлементТекста.Количество() <> 3 Тогда + Продолжить; + КонецЕсли; + + ИмяОтбора = РазделенныйЭлементТекста.Получить(0); + ТипЗначенияОтбора = РазделенныйЭлементТекста.Получить(1); + ЗначениеОтбораСтрокой = РазделенныйЭлементТекста.Получить(2); + + Если ТипЗначенияОтбора = "Число" Или ТипЗначенияОтбора = "Строка" + Или ТипЗначенияОтбора = "Булево" Или ТипЗначенияОтбора = "Дата" Тогда + + ЗначениеОтбора = XMLЗначение(Тип(ТипЗначенияОтбора), ЗначениеОтбораСтрокой); + + ИначеЕсли ОбщегоНазначения.ЭтоПеречисление(Метаданные.НайтиПоПолномуИмени(ТипЗначенияОтбора)) Тогда + + ЗначениеОтбора = XMLЗначение(Тип(СтрЗаменить(ТипЗначенияОтбора, "Перечисление", "ПеречислениеСсылка")), ЗначениеОтбораСтрокой); + + Иначе + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ТипЗначенияОтбора); + Если МенеджерОбъекта = Неопределено Тогда + Продолжить; + КонецЕсли; + ЗначениеОтбора = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(ЗначениеОтбораСтрокой)); + + КонецЕсли; + + ОтборНабораЗаписей.Вставить(ИмяОтбора, ЗначениеОтбора); + + КонецЦикла; + СтруктураРасшифровки.Вставить("ОтборНабораЗаписей", ОтборНабораЗаписей); + + Область.Расшифровка = СтруктураРасшифровки; + + Если РазделенныйТекст.Количество() <> 0 Тогда + Область.Текст = СтрЗаменить(РазделенныйТекст.Получить(0), "<РазмещениеСтруктурыНабораЗаписейДляПоследующейРасшифровки>", ""); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныеНастройкиСКД + +Процедура УстановитьПараметрыДанных(НастройкиКД, СтруктураПараметров) + + ПараметрыДанных = НастройкиКД.ПараметрыДанных.Элементы; + + Для Каждого Параметр Из СтруктураПараметров Цикл + + ТекущийПараметр = Новый ПараметрКомпоновкиДанных(Параметр.Ключ); + ТекущийПараметрКД = ПараметрыДанных.Найти(ТекущийПараметр); + + Если ТекущийПараметрКД <> Неопределено Тогда + + ТекущийПараметрКД.Использование = Истина; + ТекущийПараметрКД.Значение = Параметр.Значение; + + Иначе + + ПараметрДанных = НастройкиКД.ПараметрыДанных.Элементы.Добавить(); + ПараметрДанных.Использование = Истина; + ПараметрДанных.Значение = Параметр.Значение; + ПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных(Параметр.Ключ); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура УстановитьЛокализованныеПараметры(НастройкиКД) + + ПараметрыДанных = НастройкиКД.ПараметрыДанных.Элементы; + + СтруктураЛокализованныхПараметров = Новый Структура; + СтруктураЛокализованныхПараметров.Вставить("НадписьОшибка", НСтр("ru = 'Ошибка'")); + СтруктураЛокализованныхПараметров.Вставить("НадписьВозможныеПричины", НСтр("ru = 'Возможные причины'")); + СтруктураЛокализованныхПараметров.Вставить("НадписьРекомендации", НСтр("ru = 'Рекомендации'")); + СтруктураЛокализованныхПараметров.Вставить("НадписьРешение", НСтр("ru = 'Решение'")); + СтруктураЛокализованныхПараметров.Вставить("НадписьПроблемныеОбъекты", НСтр("ru = 'Проблемные объекты'")); + + Для Каждого ЭлементСтруктуры Из СтруктураЛокализованныхПараметров Цикл + + ТекущийПараметрКД = ПараметрыДанных.Найти(Новый ПараметрКомпоновкиДанных(ЭлементСтруктуры.Ключ)); + Если ТекущийПараметрКД <> Неопределено Тогда + + ТекущийПараметрКД.Использование = Истина; + ТекущийПараметрКД.Значение = ЭлементСтруктуры.Значение; + + Иначе + + ПараметрДанных = НастройкиКД.ПараметрыДанных.Элементы.Добавить(); + ПараметрДанных.Использование = Истина; + ПараметрДанных.Значение = ЭлементСтруктуры.Значение; + ПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных(ЭлементСтруктуры.Ключ); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура УстановитьОтборПоСпискуПроблем(ОтборНастроекКД, ВидСравнения, ЗначениеОтбора) + + ЭлементыОтбора = ОтборНастроекКД.Элементы; + + ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПравилоПроверки"); + ЭлементОтбора.ВидСравнения = ВидСравнения; + ЭлементОтбора.ПравоеЗначение = ЗначениеОтбора; + ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементОтбора.Использование = Истина; + +КонецПроцедуры + +Процедура СкрытьГруппировкуПоОтветственным(НовыеНастройкиКД, Настройка) + + Если НовыеНастройкиКД <> Неопределено Тогда + ГруппировкаПоОтветственномуКолонки = НайтиГруппировку(НовыеНастройкиКД.Структура[0].Колонки, "ОтветственныйГруппировка"); + ПолеОтветственного = НайтиПолеГруппировки(НовыеНастройкиКД.Структура[0].Строки, "Ответственный"); + Если ПолеОтветственного <> Неопределено Тогда + ПолеОтветственного.Использование = Настройка.Значение; + КонецЕсли; + Если ГруппировкаПоОтветственномуКолонки <> Неопределено Тогда + ГруппировкаПоОтветственномуКолонки.Состояние = ?(Настройка.Значение, СостояниеЭлементаНастройкиКомпоновкиДанных.Включен, + СостояниеЭлементаНастройкиКомпоновкиДанных.Отключен); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция НайтиГруппировку(Структура, ИмяПоля) + + Для каждого Элемент Из Структура Цикл + + ПоляГруппировки = Элемент.ПоляГруппировки.Элементы; + Для Каждого Поле Из ПоляГруппировки Цикл + + Если ТипЗнч(Поле) = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + Если Поле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля) Тогда + Возврат Элемент; + КонецЕсли; + + КонецЦикла; + + Если Элемент.Структура.Количество() = 0 Тогда + Продолжить; + Иначе + Группировка = НайтиГруппировку(Элемент.Структура, ИмяПоля); + КонецЕсли; + + КонецЦикла; + + Возврат Группировка; + +КонецФункции + +Функция НайтиПолеГруппировки(Структура, ИмяПоля) + + Группировка = НайтиГруппировку(Структура, ИмяПоля); + ПоляГруппировки = Группировка.ПоляГруппировки.Элементы; + НайденноеПоле = Неопределено; + + Для Каждого ПолеГруппировки Из ПоляГруппировки Цикл + ЦелевоеПоле = Новый ПолеКомпоновкиДанных(ИмяПоля); + Если ПолеГруппировки.Поле = ЦелевоеПоле Тогда + НайденноеПоле = ПолеГруппировки; + КонецЕсли; + КонецЦикла; + + Возврат НайденноеПоле; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..0a1f522ba --- /dev/null +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,1023 @@ + + + + ИсточникДанных1 + Local + + + ОсновнойЗапрос + + Выявлено + Выявлено + + + ВидПроверки + ВидПроверки + + true + + + + ПравилоПроверкиРекомендации + ПравилоПроверкиРекомендации + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Правило проверки рекомендации</v8:content> + </v8:item> + + + + НадписьРекомендации + НадписьРекомендации + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись рекомендации [ЗаголовокСкрыт]</v8:content> + </v8:item> + + + + ПравилоПроверки + ПравилоПроверки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Правило проверки [ЗаголовокСкрыт]</v8:content> + </v8:item> + + + true + + + + ПравилоПроверкиПричиныПроблемы + ПравилоПроверкиПричиныПроблемы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Правило проверки причины проблемы</v8:content> + </v8:item> + + + + НадписьОшибка + НадписьОшибка + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись ошибка [ЗаголовокСкрыт]</v8:content> + </v8:item> + + + + НадписьВозможныеПричины + НадписьВозможныеПричины + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись возможные причины [ЗаголовокСкрыт]</v8:content> + </v8:item> + + + + ИгнорироватьПроблему + ИгнорироватьПроблему + + + УточнениеПроблемы + УточнениеПроблемы + + + КлючУникальности + КлючУникальности + + + ПроблемныйОбъект + ПроблемныйОбъект + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проблемный объект [ЗаголовокСкрыт]</v8:content> + </v8:item> + + + true + + + + ПравилоПроверкиНаименование + ПравилоПроверкиНаименование + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Правило проверки наименование</v8:content> + </v8:item> + + + + ИдентификаторПроверки + ИдентификаторПроверки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор проверки</v8:content> + </v8:item> + + + + НадписьРешение + НадписьРешение + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись решение [ЗаголовокСкрыт]</v8:content> + </v8:item> + + + + ДополнительнаяИнформация + ДополнительнаяИнформация + + + НадписьПроблемныеОбъекты + НадписьПроблемныеОбъекты + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись проблемные объекты [ЗаголовокСкрыт]</v8:content> + </v8:item> + + + + КоличествоПроблемСОбъектом + КоличествоПроблемСОбъектом + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество проблем с объектом</v8:content> + </v8:item> + + + true + + + + ОтветственныйГруппировка + ОтветственныйГруппировка + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ответственный группировка</v8:content> + </v8:item> + + + + Ответственный + Ответственный + + + ВажностьПроблемы + ВажностьПроблемы + + ИсточникДанных1 + ВЫБРАТЬ РАЗРЕШЕННЫЕ + РезультатыПроверкиУчета.ПроблемныйОбъект КАК КоличествоПроблемСОбъектом, + РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, + РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки, + РезультатыПроверкиУчета.КлючУникальности КАК КлючУникальности, + РезультатыПроверкиУчета.УточнениеПроблемы КАК УточнениеПроблемы, + РезультатыПроверкиУчета.ВажностьПроблемы КАК ВажностьПроблемы, + РезультатыПроверкиУчета.Ответственный КАК Ответственный, + РезультатыПроверкиУчета.Ответственный КАК ОтветственныйГруппировка, + РезультатыПроверкиУчета.Выявлено КАК Выявлено, + РезультатыПроверкиУчета.ИгнорироватьПроблему КАК ИгнорироватьПроблему, + РезультатыПроверкиУчета.ДополнительнаяИнформация КАК ДополнительнаяИнформация, + &НадписьОшибка КАК НадписьОшибка, + &НадписьВозможныеПричины КАК НадписьВозможныеПричины, + &НадписьРекомендации КАК НадписьРекомендации, + &НадписьРешение КАК НадписьРешение, + ПравилаПроверкиУчета.Идентификатор КАК ИдентификаторПроверки, + &НадписьПроблемныеОбъекты КАК НадписьПроблемныеОбъекты, + ПравилаПроверкиУчета.Наименование КАК ПравилоПроверкиНаименование, + ПравилаПроверкиУчета.Причины КАК ПравилоПроверкиПричиныПроблемы, + ПравилаПроверкиУчета.Рекомендация КАК ПравилоПроверкиРекомендации +ИЗ + РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + ПО РезультатыПроверкиУчета.ПравилоПроверки = ПравилаПроверкиУчета.Ссылка +ГДЕ + НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему +{ГДЕ + (РезультатыПроверкиУчета.ПроблемныйОбъект В (&Контекст))} + + + ВнешняяТаблица + + ОбработчикПереходаКИсправлению + ОбработчикПереходаКИсправлению + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обработчик перехода к исправлению</v8:content> + </v8:item> + + + true + true + true + true + + + xs:string + + 128 + Variable + + + + + Идентификатор + Идентификатор + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор</v8:content> + </v8:item> + + + true + true + true + true + + + xs:string + + 256 + Variable + + + + ИсточникДанных1 + ВнешняяТаблица + + + ВнешняяТаблица + ОсновнойЗапрос + Идентификатор + ИдентификаторПроверки + + + ОбработчкПереходаКИсправлениюРасчет + ОбработчикПереходаКИсправлению + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обработчк перехода к исправлению расчет</v8:content> + </v8:item> + + "%" + ИдентификаторПроверки + "," + ОбработчикПереходаКИсправлению + "," + Строка(XMLСтрока(ВидПроверки)) + "%" + + + ПроблемныйОбъектРасчет + ПроблемныйОбъект + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проблемный объект расчет [ЗаголовокСкрыт]</v8:content> + </v8:item> + + КонтрольВеденияУчетаСлужебный.ОформитьПредставлениеПроблемногоОбъекта(ПроблемныйОбъект, Представление(ПроблемныйОбъект), ДополнительнаяИнформация) + + + КоличествоПроблемСОбъектом + Количество(КоличествоПроблемСОбъектом) + ВидПроверки + Ответственный + ОтветственныйГруппировка + ПравилоПроверки + ОбщийИтог + + + Контекст + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Контекст</v8:content> + </v8:item> + + + d4p1:AnyRef + + true + true + false + true + + + ВыводитьОтветственного + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выводить ответственного</v8:content> + </v8:item> + + + xs:boolean + + false + false + false + Always + + + НадписьОшибка + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись ошибка</v8:content> + </v8:item> + + + xs:string + + 64 + Variable + + + + true + false + + + НадписьВозможныеПричины + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись возможные причины</v8:content> + </v8:item> + + + xs:string + + 64 + Variable + + + + true + false + + + НадписьРекомендации + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись рекомендации</v8:content> + </v8:item> + + + xs:string + + 64 + Variable + + + + true + false + + + НадписьРешение + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись решение</v8:content> + </v8:item> + + + xs:string + + 64 + Variable + + + + true + false + + + НадписьПроблемныеОбъекты + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Надпись проблемные объекты</v8:content> + </v8:item> + + + xs:string + + 64 + Variable + + + + true + false + + + + Ответственный + OverallFooter + + + + Основной + + + ru + Контроль ведения учета + + + + + + ПроблемныйОбъект + + + КоличествоПроблемСОбъектом + + + + + false + ВажностьПроблемы + Equal + Normal + 86f1da64-5cca-4e08-b357-d43d46c73e85 + + + + + false + ВыводитьОтветственного + false + Normal + 6140f08b-fb31-4f1c-b649-9dadd3dc2200 + + + + + + + НадписьОшибка + + + НадписьВозможныеПричины + + + НадписьРекомендации + + + НадписьРешение + + + ПравилоПроверкиНаименование + + + ПравилоПроверкиПричиныПроблемы + + + ПравилоПроверкиРекомендации + + + ПравилоПроверкиПричиныПроблемы + + + ВидПроверки + + + ОбработчкПереходаКИсправлениюРасчет + + + ПравилоПроверки + + + + + + ЦветФона + style:ToolTipBackColor + + + + + + + НадписьОшибка + + + false + ПравилоПроверкиНаименование + + + + + + Размещение + Wrap + + + МаксимальнаяШирина + 25 + + + + + + + Ответственный + + + + + + МаксимальнаяШирина + 15 + + + + + + + УточнениеПроблемы + + + + + + МаксимальнаяШирина + 50 + + + + + + + Ответственный + + + ОтветственныйГруппировка + + + + + Ответственный + Equal + Справочник.Пользователи.ПустаяСсылка + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + Текст + + + ru + <нет ответственного> + + + + + + + + + Ответственный + + + ОтветственныйГруппировка + + + + + ОтветственныйГруппировка + Equal + Справочник.Пользователи.ПустаяСсылка + + + + + false + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + false + Размещение + Cut + + + false + РастягиватьПоГоризонтали + true + + + false + ВесовойКоэффициентШирины + 2 + + + Текст + + + ru + <нет ответственного> + + + + + + + + + ОтветственныйГруппировка + + + + + + ЦветФона + style:ToolTipBackColor + + + ГоризонтальноеПоложение + Center + + + ВертикальноеПоложение + Center + + + Размещение + Wrap + + + ОриентацияТекста + 90 + + + МаксимальнаяШирина + 5 + + + МаксимальнаяВысота + 80 + + + + + + + Выявлено + + + + + + МаксимальнаяШирина + 9 + + + + + + + КоличествоПроблемСОбъектом + + + + + + МаксимальнаяШирина + 7 + + + + + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Контроль ведения учета + + + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + Output + + + + + Ответственный + + + ОтветственныйГруппировка + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + false + МакетОформления + БезОформления + + + false + ТипЗаголовкаПолей + Short + + + false + ВыводитьЗаголовок + DontOutput + + + + + ВидПроверки + + + ВидПроверки + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + ПравилоПроверки + + + ПравилоПроверки + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + ОшибкаПравило + + + НадписьОшибка + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + Причины + + + НадписьВозможныеПричины + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + ПравилоПроверкиПричиныПроблемы + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + Рекомендации + + + НадписьРекомендации + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + ПравилоПроверкиРекомендации + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + Решение + + + НадписьРешение + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + false + ОбработчикПереходаКИсправлению + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + ОбработчкПереходаКИсправлениюРасчет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + ПроблемныеОбъекты + + + НадписьПроблемныеОбъекты + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + false + РасположениеИтогов + None + + + false + РасположениеОбщихИтогов + None + + + + Детализация + + + ПроблемныйОбъектРасчет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + Ответственный + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + УточнениеПроблемы + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + Выявлено + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo b/SSL/src/Reports/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo new file mode 100644 index 000000000..07c324759 --- /dev/null +++ b/SSL/src/Reports/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo @@ -0,0 +1,38 @@ + + + + + + + РезультатыПроверкиУчета + + ru + Результаты проверки учета + + CommonForm.ФормаОтчета + Report.РезультатыПроверкиУчета.Template.ОсновнаяСхемаКомпоновкиДанных + CommonForm.ФормаНастроекОтчета + SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + + + ИсправлениеЦиклическихСсылок + + ru + Исправление циклических ссылок + + PersonalComputer + MobileDevice + + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl index fa7aa1a52..edb8d53bc 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl @@ -916,7 +916,7 @@ Или СтрНачинаетсяС(АдресСсылкиВРег, ВРег("https://")) Или СтрНачинаетсяС(АдресСсылкиВРег, ВРег("e1cib/")) Или СтрНачинаетсяС(АдресСсылкиВРег, ВРег("e1c://")) Тогда - ОбщегоНазначенияКлиент.ПерейтиПоСсылке(АдресСсылки); + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресСсылки); Возврат Истина; КонецЕсли; Возврат Ложь; @@ -2579,7 +2579,6 @@ ПараметрыПоиска = Новый Структура; ПараметрыПоиска.Вставить("Отчеты", ОтчетыКлиентСервер.ЗначениеВМассив(НастройкиОтчета.ОтчетСсылка)); - ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); ПараметрыПоиска.Вставить("ПолучатьИтоговуюТаблицу", Истина); РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); ТаблицаВариантов = РезультатПоиска.ТаблицаЗначений; diff --git a/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl b/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl index d4f8699da..a2890fb15 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl @@ -441,7 +441,7 @@ ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйРазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'нач. развернутый остаток Дт'"), Ресурс.Имя + "НачальныйРазвернутыйОстатокДт"); ПолеНабора.Роль.Остаток = Истина; ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; ПолеНабора.Роль.ПолеСчета = "Счет"; ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйРазвернутыйОстатокДт"); @@ -449,7 +449,7 @@ ПолеНабора =ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйРазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'нач. развернутый остаток Кт'"), Ресурс.Имя + "НачальныйРазвернутыйОстатокКт"); ПолеНабора.Роль.Остаток = Истина; ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; ПолеНабора.Роль.ПолеСчета = "Счет"; ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйРазвернутыйОстатокКт"); @@ -501,7 +501,7 @@ ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйРазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'кон. развернутый остаток Дт'"), Ресурс.Имя + "КонечныйРазвернутыйОстатокДт"); ПолеНабора.Роль.Остаток = Истина; ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; ПолеНабора.Роль.ПолеСчета = "Счет"; ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйРазвернутыйОстатокДт"); @@ -509,7 +509,7 @@ ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйРазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'кон. развернутый остаток Кт'"), Ресурс.Имя + "КонечныйРазвернутыйОстатокКт"); ПолеНабора.Роль.Остаток = Истина; ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; ПолеНабора.Роль.ПолеСчета = "Счет"; ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйРазвернутыйОстатокКт"); diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index f427812db..d7df928eb 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -199,6 +199,53 @@ true + + Catalog.ПрофилиКлючевыхОпераций + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + Constant.ИспользоватьДополнительныеОтчетыИОбработки @@ -314,6 +361,29 @@ true + + InformationRegister.ЗамерыВремени + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + DataProcessor.РегламентныеИФоновыеЗадания.Command.РегламентныеИФоновыеЗадания @@ -551,6 +621,17 @@ true + + Report.ОценкаПроизводительности + + Use + true + + + View + true + + InformationRegister.УдалитьЗамерыВремениТехнологические @@ -1142,6 +1223,93 @@ true + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + true + + + DataAdministration + true + + + UpdateDataBaseConfiguration + true + + + ExclusiveMode + true + + + ActiveUsers + true + + + EventLog + true + + + ThinClient + true + + + WebClient + true + + + ThickClient + true + + + ExternalConnection + true + + + Automation + true + + + TechnicalSpecialistMode + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + SaveUserData + true + + + ConfigurationExtensionsAdministration + true + + + Output + true + + Constant.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC @@ -1454,6 +1622,13 @@ true + + DataProcessor.ОценкаПроизводительности.Command.ИмпортЗамеровПроизводительности + + View + true + + InformationRegister.ПакетыИнформацииПриЗапуске @@ -1746,7 +1921,7 @@ - InformationRegister.ЗамерыВремени + InformationRegister.УдалитьЗамерыВремени3 Read true @@ -2991,93 +3166,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - true - - - DataAdministration - true - - - UpdateDataBaseConfiguration - true - - - ExclusiveMode - true - - - ActiveUsers - true - - - EventLog - true - - - ThinClient - true - - - WebClient - true - - - ThickClient - true - - - ExternalConnection - true - - - Automation - true - - - TechnicalSpecialistMode - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - SaveUserData - true - - - ConfigurationExtensionsAdministration - true - - - Output - true - - InformationRegister.АдресныеОбъекты diff --git a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights index 9894988e5..c71d8acd1 100644 --- a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights +++ b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights @@ -754,6 +754,13 @@ true + + CommonForm.ФормаПоиска + + View + true + + Constant.ОтложенноеОбновлениеЗавершеноУспешно @@ -812,6 +819,17 @@ true + + DataProcessor.ПолнотекстовыйПоискВДанных + + Use + true + + + View + true + + SessionParameter.ВерсияРасширений diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights index 8456ef16b..079d879b5 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights @@ -21,6 +21,37 @@ true + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + Catalog.РассылкиОтчетов.Command.ВыполнитьСейчас @@ -72,35 +103,4 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - diff --git a/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights b/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights index c345adc49..b769586a8 100644 --- a/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights +++ b/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights @@ -3,6 +3,45 @@ false true false + + Catalog.ПрофилиКлючевыхОпераций + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + Constant.ПериодХраненияЗамеров @@ -22,6 +61,17 @@ true + + InformationRegister.ЗамерыВремени + + Read + true + + + View + true + + Constant.ВыполнятьЗамерыПроизводительности @@ -52,6 +102,17 @@ true + + Report.ОценкаПроизводительности + + Use + true + + + View + true + + Catalog.КлючевыеОперации @@ -111,18 +172,14 @@ - DataProcessor.ОценкаПроизводительности.Command.ЭкспортЗамеровПроизводительности + DataProcessor.ОценкаПроизводительности.Command.ИмпортЗамеровПроизводительности View true - InformationRegister.ЗамерыВремени - - Read - true - + DataProcessor.ОценкаПроизводительности.Command.ЭкспортЗамеровПроизводительности View true diff --git a/SSL/src/Roles/ПолныеПрава/Rights.rights b/SSL/src/Roles/ПолныеПрава/Rights.rights index 85193b999..568f12772 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -429,6 +429,105 @@ false + + Catalog.ПрофилиКлючевыхОпераций + + Read + false + + + Insert + false + + + Update + false + + + Delete + false + + + View + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InputByString + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Constant.ИспользоватьДополнительныеОтчетыИОбработки @@ -623,6 +722,61 @@ false + + InformationRegister.ЗамерыВремени + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + DataProcessor.РегламентныеИФоновыеЗадания.Command.РегламентныеИФоновыеЗадания @@ -1396,6 +1550,29 @@ false + + Catalog.ВидыПроверок + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + Catalog.ВариантыОтветовАнкет @@ -2144,6 +2321,68 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + ConfigurationExtensionsAdministration + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + + + Catalog.ПравилаПроверкиУчета + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + Constant.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC @@ -2436,18 +2675,10 @@ InformationRegister.УдалитьВерсииПодсистем - - Read - false - Update false - - View - false - Edit false @@ -2456,38 +2687,6 @@ TotalsControl false - - ReadDataHistory - false - - - ReadDataHistoryOfMissingData - false - - - UpdateDataHistory - false - - - UpdateDataHistoryOfMissingData - false - - - UpdateDataHistoryVersionComment - false - - - ViewDataHistory - false - - - EditDataHistoryVersionComment - false - - - SwitchToDataHistoryVersion - false - Constant.ИзвлекатьТекстыФайловНаСервере @@ -3353,7 +3552,7 @@ - InformationRegister.ЗамерыВремени + InformationRegister.УдалитьЗамерыВремени3 Read false @@ -5689,45 +5888,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - false - - - UpdateDataBaseConfiguration - false - - - ThickClient - false - - - ExternalConnection - false - - - Automation - false - - - TechnicalSpecialistMode - false - - - ConfigurationExtensionsAdministration - false - - - InteractiveOpenExtDataProcessors - false - - - InteractiveOpenExtReports - false - - InformationRegister.АдресныеОбъекты diff --git a/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights b/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights index 6a8d917b1..828bd03df 100644 --- a/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights +++ b/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights @@ -3,13 +3,6 @@ false true false - - DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации - - View - true - - Configuration.БиблиотекаСтандартныхПодсистем @@ -41,6 +34,13 @@ true + + DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации + + View + true + + DataProcessor.ЖурналРегистрации diff --git a/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights b/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights new file mode 100644 index 000000000..5ac6c1a4b --- /dev/null +++ b/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights @@ -0,0 +1,3048 @@ + + + false + true + false + + Subsystem.СтандартныеПодсистемы.Subsystem.КонтрольВеденияУчета + + View + true + + + + Catalog.ВидыПроверок + + Read + true + + + View + true + + + InputByString + true + + + + Report.РезультатыПроверкиУчета + + Use + true + + + View + true + + + + Catalog.ПравилаПроверкиУчета + + Read + true + + + View + true + + + InputByString + true + + + + InformationRegister.РезультатыПроверкиУчета + + Read + true + + #ПоЗначениям( "РегистрСведений.РезультатыПроверкиУчета", "","", +"", "", +"ПравоЧтения","ПроблемныйОбъект", +"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + + + + View + true + + + + ПоЗначениям + // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). +// № параметра: 1, 2, 3, 4, 5, 6, 7, ..., 2+n*2,3+n*2. +// Читается так: "ограничение доступа по значениям". +// Параметры: +// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". +// Модификатор - изменяет шаблон. +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// Других модификаторов в этой версии шаблона не предусмотрено. +// В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения +// производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц", +// чем использовать несколько блоков параметров, с одним и тем же именем поля. +// Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения", +// "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору" можно использовать только отдельно. +// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// "Т.Автор = &АвторизованныйПользователь", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", +// выполняется проверка наличия права на таблицу значения Т.П(n). +// Когда В(n) = "ПравоЧтенияПоИдентификатору" или "ПравоИзмененияПоИдентификатору", +// выполняется проверка наличия права на таблицу по идентификатору в значении Т.П(n). +// П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). +// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но +// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. +// Шаблон имеет структуру: +// <Общая часть условий> <Условие по группе параметров 1> И <Условие по группе параметров 2> И ... <Условие по группе параметров(n)> +// Пример: +// ПоЗначениям("Документ.ПоступлениеТоваровИУслуг", "", "", +// "Организации","Организация", +// "Поставщики","Контрагент", "","", ...) + +#Если &ОграничениеДоступаНаУровнеЗаписейВключено = "" #Тогда // Информационная база заблокирована для обновления. + ГДЕ ЛОЖЬ +#Иначе + +// Проверка правильности параметра Право. +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеПраво: #Параметр(2) +#КонецЕсли + +// Проверка правильности параметра ИмяТаблицы. +#Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеИмяТекущейТаблицы: "#Параметр(1)" +#КонецЕсли + +// Проверка правильности параметра Модификатор. +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйМодификатор: #Параметр(3) +#КонецЕсли + +// Общая проверка использования ограничений доступа на уровне записей и +// проверка использования хотя бы одного ограничения из указанных видов доступа. +#Если Не + ( Истина + И ("#Параметр(4)" = "" И "#Параметр(5)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И ("#Параметр(6)" = "" И "#Параметр(7)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И ("#Параметр(8)" = "" И "#Параметр(9)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И ("#Параметр(10)" = "" И "#Параметр(11)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И ("#Параметр(12)" = "" И "#Параметр(13)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И ("#Параметр(14)" = "" И "#Параметр(15)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И ("#Параметр(16)" = "" И "#Параметр(17)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И ("#Параметр(18)" = "" И "#Параметр(19)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И ("#Параметр(20)" = "" И "#Параметр(21)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И ("#Параметр(22)" = "" И "#Параметр(23)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И ("#Параметр(24)" = "" И "#Параметр(25)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И ("#Параметр(26)" = "" И "#Параметр(27)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И ("#Параметр(28)" = "" И "#Параметр(29)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И ("#Параметр(30)" = "" И "#Параметр(31)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И ("#Параметр(32)" = "" И "#Параметр(33)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И ("#Параметр(34)" = "" И "#Параметр(35)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + ) #Тогда + +Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + +ИСТИНА В +( // Проверка права пользователя на текущую таблицу в целом. + // Права на таблицы формируются по составу ролей профиля группы доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + ПО + СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" + И ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + ГДЕ + ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка + И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И ТаблицыГруппДоступа.Изменение + #КонецЕсли + ) + И ГруппыДоступа.Ссылка В + ( + ВЫБРАТЬ + ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа + ИЗ + Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь + ) + ГДЕ + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). + +//// Проверка значения поля группы параметров 1. +#Если &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(4)" = "Условие" Или "#Параметр(4)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(5) ) +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(4)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(4)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(5) + #Если Не "#Параметр(4)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(5) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(5) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(4)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + + ( + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(5) + #ИначеЕсли "Т.#Параметр(5)" = "Т.Ссылка" + И "#Параметр(4)" <> "Пользователи" + И "#Параметр(4)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(4)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(5) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + +//// Проверка значения поля группы параметров 2. +#Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(6)" = "Условие" Или "#Параметр(6)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(7) ) +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(6)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(7) + #Если Не "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(7) + #ИначеЕсли "Т.#Параметр(7)" = "Т.Ссылка" + И "#Параметр(6)" <> "Пользователи" + И "#Параметр(6)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(7) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 3. +#Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(8)" = "Условие" Или "#Параметр(8)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(9) ) +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(8)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(8)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(9) + #Если Не "#Параметр(8)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(9) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(9) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(8)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(9) + #ИначеЕсли "Т.#Параметр(9)" = "Т.Ссылка" + И "#Параметр(8)" <> "Пользователи" + И "#Параметр(8)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(8)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(9) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 4. +#Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(10)" = "Условие" Или "#Параметр(10)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(11) ) +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(10)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(10)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(11) + #Если Не "#Параметр(10)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(11) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(11) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(10)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(11) + #ИначеЕсли "Т.#Параметр(11)" = "Т.Ссылка" + И "#Параметр(10)" <> "Пользователи" + И "#Параметр(10)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(10)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(11) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 5. +#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(12)" = "Условие" Или "#Параметр(12)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(13) ) +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(12)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(13) + #Если Не "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(13) + #ИначеЕсли "Т.#Параметр(13)" = "Т.Ссылка" + И "#Параметр(12)" <> "Пользователи" + И "#Параметр(12)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(13) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 6. +#Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(14)" = "Условие" Или "#Параметр(14)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(15) ) +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(14)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(14)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(15) + #Если Не "#Параметр(14)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(15) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(15) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(14)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(15) + #ИначеЕсли "Т.#Параметр(15)" = "Т.Ссылка" + И "#Параметр(14)" <> "Пользователи" + И "#Параметр(14)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(14)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(15) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 7. +#Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(16)" = "Условие" Или "#Параметр(16)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(17) ) +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(16)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(16)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(17) + #Если Не "#Параметр(16)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(17) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(17) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(16)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(17) + #ИначеЕсли "Т.#Параметр(17)" = "Т.Ссылка" + И "#Параметр(16)" <> "Пользователи" + И "#Параметр(16)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(16)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(17) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 8. +#Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(18)" = "Условие" Или "#Параметр(18)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(19) ) +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(18)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(18)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(19) + #Если Не "#Параметр(18)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(19) + #ИначеЕсли "Т.#Параметр(19)" = "Т.Ссылка" + И "#Параметр(18)" <> "Пользователи" + И "#Параметр(18)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(19) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 9. +#Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(20)" = "Условие" Или "#Параметр(20)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(21) ) +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(20)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(20)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(21) + #Если Не "#Параметр(20)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(21) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(21) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(20)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(21) + #ИначеЕсли "Т.#Параметр(21)" = "Т.Ссылка" + И "#Параметр(20)" <> "Пользователи" + И "#Параметр(20)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(20)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(21) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 10. +#Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(22)" = "Условие" Или "#Параметр(22)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(23) ) +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(22)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(22)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(23) + #Если Не "#Параметр(22)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(23) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(23) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(22)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(23) + #ИначеЕсли "Т.#Параметр(23)" = "Т.Ссылка" + И "#Параметр(22)" <> "Пользователи" + И "#Параметр(22)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(22)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(23) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 11. +#Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(24)" = "Условие" Или "#Параметр(24)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(25) ) +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(24)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(24)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(25) + #Если Не "#Параметр(24)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(25) + #ИначеЕсли "Т.#Параметр(25)" = "Т.Ссылка" + И "#Параметр(24)" <> "Пользователи" + И "#Параметр(24)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(25) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 12. +#Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(26)" = "Условие" Или "#Параметр(26)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(27) ) +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(26)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(26)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(27) + #Если Не "#Параметр(26)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(27) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(27) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(26)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(27) + #ИначеЕсли "Т.#Параметр(27)" = "Т.Ссылка" + И "#Параметр(26)" <> "Пользователи" + И "#Параметр(26)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(26)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(27) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 13. +#Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(28)" = "Условие" Или "#Параметр(28)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(29) ) +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(28)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(28)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(29) + #Если Не "#Параметр(28)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(29) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(29) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(28)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(29) + #ИначеЕсли "Т.#Параметр(29)" = "Т.Ссылка" + И "#Параметр(28)" <> "Пользователи" + И "#Параметр(28)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(28)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(29) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 14. +#Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(30)" = "Условие" Или "#Параметр(30)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(31) ) +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(30)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(30)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(31) + #Если Не "#Параметр(30)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(31) + #ИначеЕсли "Т.#Параметр(31)" = "Т.Ссылка" + И "#Параметр(30)" <> "Пользователи" + И "#Параметр(30)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(31) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 15. +#Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(32)" = "Условие" Или "#Параметр(32)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(33) ) +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(32)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(32)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(33) + #Если Не "#Параметр(32)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(33) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(33) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(32)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(33) + #ИначеЕсли "Т.#Параметр(33)" = "Т.Ссылка" + И "#Параметр(32)" <> "Пользователи" + И "#Параметр(32)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(32)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(33) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 16. +#Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(34)" = "Условие" Или "#Параметр(34)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(35) ) +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(34)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(34)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = Т.#Параметр(35) + #Если Не "#Параметр(34)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + // Группа параметров отключена. +#ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(35) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(35) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(34)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(35) + #ИначеЕсли "Т.#Параметр(35)" = "Т.Ссылка" + И "#Параметр(34)" <> "Пользователи" + И "#Параметр(34)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(34)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(35) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + + ) +) +#КонецЕсли + +#КонецЕсли // Информационная база заблокирована для обновления. + + + diff --git a/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/ЧтениеРезультатовПроверкиУчета.mdo b/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/ЧтениеРезультатовПроверкиУчета.mdo new file mode 100644 index 000000000..f02012aa0 --- /dev/null +++ b/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/ЧтениеРезультатовПроверкиУчета.mdo @@ -0,0 +1,8 @@ + + + ЧтениеРезультатовПроверкиУчета + + ru + Чтение результатов проверки учета + + diff --git a/SSL/src/ScheduledJobs/ПроверкаВеденияУчета/Schedule.schedule b/SSL/src/ScheduledJobs/ПроверкаВеденияУчета/Schedule.schedule new file mode 100644 index 000000000..07c7c8c0f --- /dev/null +++ b/SSL/src/ScheduledJobs/ПроверкаВеденияУчета/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ПроверкаВеденияУчета/ПроверкаВеденияУчета.mdo b/SSL/src/ScheduledJobs/ПроверкаВеденияУчета/ПроверкаВеденияУчета.mdo new file mode 100644 index 000000000..13085a14d --- /dev/null +++ b/SSL/src/ScheduledJobs/ПроверкаВеденияУчета/ПроверкаВеденияУчета.mdo @@ -0,0 +1,13 @@ + + + ПроверкаВеденияУчета + + ru + Проверка ведения учета + + CommonModule.КонтрольВеденияУчетаСлужебный.ПроверитьВедениеУчета + true + true + 3 + 10 + diff --git a/SSL/src/SessionParameters/ОтмененныеДлительныеОперации/ОтмененныеДлительныеОперации.mdo b/SSL/src/SessionParameters/ОтмененныеДлительныеОперации/ОтмененныеДлительныеОперации.mdo new file mode 100644 index 000000000..4d2752b2a --- /dev/null +++ b/SSL/src/SessionParameters/ОтмененныеДлительныеОперации/ОтмененныеДлительныеОперации.mdo @@ -0,0 +1,11 @@ + + + ОтмененныеДлительныеОперации + + ru + Отмененные длительные операции + + + FixedArray + + diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl index 35061f39d..7e880cfe2 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl @@ -151,7 +151,6 @@ ПараметрыПоиска.Вставить("Подсистемы", Подсистемы); ПараметрыПоиска.Вставить("ТолькоВидимыеВПанелиОтчетов", Истина); ПараметрыПоиска.Вставить("ПолучатьИтоговуюТаблицу", Истина); - ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl index 8654ea0e6..85ed822ea 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -606,9 +606,10 @@ Блокировка.Заблокировать(); Если ЭтоНовыйВариантОтчета И ВариантыОтчетов.НаименованиеЗанято(Контекст.ОтчетСсылка, ВариантСсылка, ВариантНаименование) Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" занято, необходимо указать другое Наименование.'"), ВариантНаименование); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" занято, необходимо указать другое наименование.'"), ВариантНаименование); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ВариантНаименование"); Пакет.Отказ = Истина; + ОтменитьТранзакцию(); Возврат; КонецЕсли; diff --git a/SSL/src/StyleItems/ЦветРазделаПанелиФункций/ЦветРазделаПанелиФункций.mdo b/SSL/src/StyleItems/ЦветРазделаПанелиФункций/ЦветРазделаПанелиФункций.mdo new file mode 100644 index 000000000..508b70a0f --- /dev/null +++ b/SSL/src/StyleItems/ЦветРазделаПанелиФункций/ЦветРазделаПанелиФункций.mdo @@ -0,0 +1,14 @@ + + + ЦветРазделаПанелиФункций + + ru + Цвет раздела панели функций + + + + 150 + 70 + + + diff --git a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi index 6d5bbe447..b14552d5f 100644 --- a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi +++ b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi @@ -131,6 +131,10 @@ CommonCommand.ВремяТекущегоСеанса + + Catalog.ПравилаПроверкиУчета.StandardCommand.OpenList + + DataProcessor.АктивныеПользователи.Command.АктивныеПользователи @@ -169,10 +173,6 @@ Catalog.УчетныеЗаписиЭлектроннойПочты.StandardCommand.OpenList - - DataProcessor.ПанельАдминистрированияБСП.Command.УправлениеПолнотекстовымПоиском - - CommonCommand.ДобавитьПользователейСервиса @@ -189,6 +189,10 @@ Report.ОбъемНенужныхФайлов.StandardCommand.Open + + Report.ОценкаПроизводительности.StandardCommand.Open + + Report.ПрогрессОтложенногоОбновления.StandardCommand.Open @@ -428,6 +432,8 @@ CommonCommand.ПредупрежденияПриСинхронизацииДанных InformationRegister.НастройкиОчисткиФайлов.StandardCommand.OpenList CommonCommand.ВремяТекущегоСеанса + Catalog.ПрофилиКлючевыхОпераций.StandardCommand.OpenList + Catalog.ПравилаПроверкиУчета.StandardCommand.OpenList NavigationPanelSeeAlso @@ -440,7 +446,6 @@ DataProcessor.УдалениеПомеченныхОбъектов.Command.УдалениеПомеченныхОбъектов DataProcessor.ПоискИУдалениеДублей.Command.ПоискИУдалениеДублей Catalog.УчетныеЗаписиЭлектроннойПочты.StandardCommand.OpenList - DataProcessor.ПанельАдминистрированияБСП.Command.УправлениеПолнотекстовымПоиском ActionsPanelTools @@ -482,6 +487,7 @@ CommonForm.Расширения.StandardCommand.Open DataProcessor.ОценкаПроизводительности.Command.ЭкспортЗамеровПроизводительности CommonForm.НастройкиВходаПользователей.StandardCommand.Open + DataProcessor.ОценкаПроизводительности.Command.ИмпортЗамеровПроизводительности diff --git a/SSL/src/Subsystems/Администрирование/Администрирование.mdo b/SSL/src/Subsystems/Администрирование/Администрирование.mdo index ba5b6cabc..87e71da63 100644 --- a/SSL/src/Subsystems/Администрирование/Администрирование.mdo +++ b/SSL/src/Subsystems/Администрирование/Администрирование.mdo @@ -91,4 +91,7 @@ CommonCommand.ВремяТекущегоСеанса CommonForm.НастройкиВходаПользователей DataProcessor.ВыгрузкаЗагрузкаEnterpriseData + Catalog.ПрофилиКлючевыхОпераций + Report.ОценкаПроизводительности + Catalog.ПравилаПроверкиУчета diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo index cb6983255..9f1a0f449 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -168,7 +168,7 @@ CommonPicture.СтрелкаВправо EventSubscription.ЗапретитьПометкуУдаленияПредопределенныхЭлементов EventSubscription.ЗапретитьУдалениеПредопределенныхЭлементов - CommonModule.ИнтеграцияСтандартныхПодсистем + CommonModule.ИнтеграцияПодсистемБСП CommonPicture.Папка InformationRegister.БезопасноеХранилищеДанных InformationRegister.БезопасноеХранилищеДанныхОбластейДанных @@ -214,7 +214,7 @@ CommonModule.ИнтеграцияСТехнологиейСервиса InformationRegister.ПараметрыРаботыПрограммы CommonModule.ИнтеграцияСТехнологиейСервисаКлиент - CommonModule.ИнтеграцияСтандартныхПодсистемКлиент + CommonModule.ИнтеграцияПодсистемБСПКлиент CommonForm.ВыборФорматаВложений CommonModule.ОбщегоНазначенияСлужебныйКлиент CommonForm.ВопросОбУстановкеВнешнейКомпоненты @@ -222,5 +222,8 @@ CommonPicture.СохранитьФайлКак CommonPicture.ЗавершитьРаботу CommonModule.РегламентированныеДанныеКлиентСервер + SessionParameter.ОтмененныеДлительныеОперации + StyleItem.ЦветРазделаПанелиФункций + CommonPicture.ЗначокЩита Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo index a82aeaedd..602deded5 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -46,11 +46,9 @@ CommonPicture.Отчеты CommonForm.ФормаНастроекОтчета CommonPicture.ПиктограммыДоступаКНастройкамОтчета - CommonPicture.УдалитьПиктограммыПараметровИОтборов CommonPicture.ПереместитьВлевоВверх CommonPicture.ПереместитьВправоВниз CommonPicture.ДобавитьРодительский - CommonPicture.УдалитьПиктограммыСтруктурыОтчета CommonPicture.БыстрыйДоступСФлажком CommonPicture.ОбычныйДоступСФлажком CommonPicture.ПредопределенныйЭлемент diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo new file mode 100644 index 000000000..d949556ff --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo @@ -0,0 +1,25 @@ + + + КонтрольВеденияУчета + + ru + Контроль ведения учета + + CommonModule.КонтрольВеденияУчета + CommonModule.КонтрольВеденияУчетаСлужебный + CommonModule.КонтрольВеденияУчетаКлиент + CommonModule.КонтрольВеденияУчетаПереопределяемый + Role.ЧтениеРезультатовПроверкиУчета + ScheduledJob.ПроверкаВеденияУчета + Catalog.ВидыПроверок + Report.РезультатыПроверкиУчета + InformationRegister.РезультатыПроверкиУчета + CommonModule.КонтрольВеденияУчетаСлужебныйКлиент + CommonModule.КонтрольВеденияУчетаПовтИсп + DefinedType.КонтекстПроверокВеденияУчета + DefinedType.УточнениеКонтекстаПроверкиСостоянияСистемы + Catalog.ПравилаПроверкиУчета + Enum.ВажностьПроблемыУчета + Enum.СпособВыполненияПроверки + Subsystem.СтандартныеПодсистемы + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo index ffb9ccd77..300af967e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo @@ -146,5 +146,7 @@ CommonPicture.РежимИспользованияПриложенияВСервисеЛокально XDTOPackage.EnterpriseData_1_3_8 XDTOPackage.EnterpriseData_1_4_4 + InformationRegister.ПсевдонимыПредопределенныхУзлов + XDTOPackage.EnterpriseData_1_5_2 Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo index 9ae5a214d..0957daaed 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo @@ -23,5 +23,6 @@ CommonModule.ОтправкаSMSЧерезСМСУслуги CommonModule.ОтправкаSMSЧерезGSMINFORM CommonModule.ОтправкаSMSПовтИсп + CommonModule.ОтправкаSMSЧерезSMS4B Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo new file mode 100644 index 000000000..cfd5279d9 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo @@ -0,0 +1,11 @@ + + + ОтчетОДвиженияхДокумента + + ru + Отчет о движениях документа + + Report.ОтчетОДвиженияхДокумента + CommonModule.ОтчетОДвиженияхДокументаСлужебныйКлиент + Subsystem.СтандартныеПодсистемы + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi index 23c4e2627..408798a62 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi @@ -32,7 +32,7 @@ Catalog.КлючевыеОперации.StandardCommand.OpenList Enum.УдалитьКлючевыеОперации.StandardCommand.OpenList InformationRegister.УдалитьЗамерыВремени2.StandardCommand.OpenList - InformationRegister.ЗамерыВремени.StandardCommand.OpenList + InformationRegister.УдалитьЗамерыВремени3.StandardCommand.OpenList InformationRegister.ЗамерыВремениТехнологические.StandardCommand.OpenList InformationRegister.УдалитьЗамерыВремениТехнологические.StandardCommand.OpenList diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo index aa0b1d5ec..0b27a830c 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -26,12 +26,16 @@ InformationRegister.УдалитьЗамерыВремениТехнологические CommonModule.ОценкаПроизводительности CommonModule.ОценкаПроизводительностиВызовСервера - InformationRegister.ЗамерыВремени + InformationRegister.УдалитьЗамерыВремени3 InformationRegister.ЗамерыВремениТехнологические XDTOPackage.ApdexExport_1_0_0_2 Constant.КоличествоЗамеровВПакетеЭкспорта Constant.ПериодХраненияЗамеров ScheduledJob.ОчисткаЗамеровВремени CommonModule.ОценкаПроизводительностиПовтИсп + Catalog.ПрофилиКлючевыхОпераций + Report.ОценкаПроизводительности + XDTOPackage.ApdexExport_1_0_0_3 + InformationRegister.ЗамерыВремени Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo index eff8fff88..323647a5c 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo @@ -10,8 +10,6 @@ ru - CommonPicture.ПолнотекстовыйПоискДалее - CommonPicture.ПолнотекстовыйПоискНазад CommonModule.ПолнотекстовыйПоискСервер ScheduledJob.ОбновлениеИндексаППД ScheduledJob.СлияниеИндексаППД diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo index 8b11720e0..3e1a8a536 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo @@ -25,5 +25,6 @@ CommonModule.ШаблоныСообщенийСлужебныйПовтИсп CommonModule.ШаблоныСообщенийКлиентСервер CommonModule.ШаблоныСообщенийСервер + CommonModule.ШаблоныСообщенийВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo index 62d7060e0..65f48d108 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo @@ -29,6 +29,7 @@ ЗащитаПерсональныхДанных ИнформацияПриЗапуске КалендарныеГрафики + КонтрольВеденияУчета КонтактнаяИнформация НапоминанияПользователя НастройкаПорядкаЭлементов @@ -37,6 +38,7 @@ ОбновлениеВерсииИБ ОбновлениеКонфигурации ОтправкаSMS + ОтчетОДвиженияхДокумента ОценкаПроизводительности Печать ПодключаемыеКоманды diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl index 6452f9f3b..1f6091784 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl @@ -5,19 +5,13 @@ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ЗадачаБылаВыполнена = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Выполнена"); - Если НЕ ЗадачаБылаВыполнена И Выполнена Тогда + Если НЕ ЗадачаБылаВыполнена И Выполнена И НЕ РеквизитыАдресацииЗаполнены() Тогда - Если НЕ РеквизитыАдресацииЗаполнены() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Необходимо указать исполнителя задачи.'"),,, - "Объект.Исполнитель", Отказ); - Возврат; - КонецЕсли; - - ИначеЕсли ЗадачаБылаВыполнена И Выполнена Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Эта задача уже была выполнена ранее.'"),,,, Отказ); + НСтр("ru = 'Необходимо указать исполнителя задачи.'"),,, + "Объект.Исполнитель", Отказ); Возврат; + КонецЕсли; Если СрокИсполнения <> '00010101' И ДатаНачала > СрокИсполнения Тогда @@ -34,11 +28,11 @@ Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; - + Если НЕ Ссылка.Пустая() Тогда ИсходныеРеквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Выполнена, ПометкаУдаления, СостояниеБизнесПроцесса"); - Иначе + Иначе ИсходныеРеквизиты = Новый Структура( "Выполнена, ПометкаУдаления, СостояниеБизнесПроцесса", Ложь, Ложь, Перечисления.СостоянияБизнесПроцессов.ПустаяСсылка()); @@ -48,7 +42,7 @@ Если СостояниеБизнесПроцесса = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда ВызватьИсключение НСтр("ru = 'Нельзя выполнять задачи остановленных бизнес-процессов.'"); - КонецЕсли; + КонецЕсли; // Если задача выполнена, то запишем в реквизит Исполнитель того // пользователя, который фактически выполнил задачу. Это нам потом @@ -60,6 +54,10 @@ Если ДатаИсполнения = Дата(1, 1, 1) Тогда ДатаИсполнения = ТекущаяДатаСеанса(); КонецЕсли; + ИначеЕсли ИсходныеРеквизиты.Выполнена И Выполнена Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Эта задача уже была выполнена ранее.'"),,,, Отказ); + Возврат; КонецЕсли; Если Важность.Пустая() Тогда @@ -83,8 +81,8 @@ Если Выполнена И Не ПринятаКИсполнению Тогда ПринятаКИсполнению = Истина; ДатаПринятияКИсполнению = ТекущаяДатаСеанса(); - КонецЕсли; - + КонецЕсли; + // СтандартныеПодсистемы.УправлениеДоступом УстановитьПривилегированныйРежим(Истина); ГруппаИсполнителейЗадач = БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(РольИсполнителя, @@ -99,7 +97,7 @@ КонецПроцедуры -Процедура ОбработкаЗаполнения(ДанныеЗаполнения) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ЗадачаОбъект.ЗадачаИсполнителя") Тогда ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения, diff --git a/SSL/src/WebServices/Exchange/Module.bsl b/SSL/src/WebServices/Exchange/Module.bsl index 2eecafecf..43279527e 100644 --- a/SSL/src/WebServices/Exchange/Module.bsl +++ b/SSL/src/WebServices/Exchange/Module.bsl @@ -121,7 +121,9 @@ ПомощникСозданияОбменаДанными.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; ПомощникСозданияОбменаДанными.ЭтоНастройкаРаспределеннойИнформационнойБазы = Ложь; ПомощникСозданияОбменаДанными.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; - ПомощникСозданияОбменаДанными.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")); + ПомощникСозданияОбменаДанными.ПрефиксИнформационнойБазыИсточникаУстановлен = ?(ПомощникСозданияОбменаДанными.ИспользоватьПрефиксыДляНастройкиОбмена, + ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")), + ЗначениеЗаполнено(ПомощникСозданияОбменаДанными.ИдентификаторИнформационнойБазыИсточника)); // Выполняем создание настройки обмена. ПомощникСозданияОбменаДанными.ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными( diff --git a/SSL/src/WebServices/InterfaceVersion/Module.bsl b/SSL/src/WebServices/InterfaceVersion/Module.bsl index c14b9499e..12a31a47c 100644 --- a/SSL/src/WebServices/InterfaceVersion/Module.bsl +++ b/SSL/src/WebServices/InterfaceVersion/Module.bsl @@ -53,7 +53,7 @@ СтруктураПоддерживаемыхВерсий = Новый Структура; - ИнтеграцияСтандартныхПодсистем.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий); + ИнтеграцияПодсистемБСП.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий); ОбщегоНазначенияПереопределяемый.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий); СтруктураПоддерживаемыхВерсий.Свойство(InterfaceName, МассивВерсий); diff --git a/SSL/src/XDTOPackages/ApdexExport_1_0_0_3/ApdexExport_1_0_0_3.mdo b/SSL/src/XDTOPackages/ApdexExport_1_0_0_3/ApdexExport_1_0_0_3.mdo new file mode 100644 index 000000000..0688547bd --- /dev/null +++ b/SSL/src/XDTOPackages/ApdexExport_1_0_0_3/ApdexExport_1_0_0_3.mdo @@ -0,0 +1,9 @@ + + + ApdexExport_1_0_0_3 + + ru + Apdex export 1 0 0 3 + + www.v8.1c.ru/ssl/performace-assessment/apdexExport/1.0.0.3 + diff --git a/SSL/src/XDTOPackages/ApdexExport_1_0_0_3/Package.xdto b/SSL/src/XDTOPackages/ApdexExport_1_0_0_3/Package.xdto new file mode 100644 index 000000000..ca832613e --- /dev/null +++ b/SSL/src/XDTOPackages/ApdexExport_1_0_0_3/Package.xdto @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_5_2/EnterpriseData_1_5_2.mdo b/SSL/src/XDTOPackages/EnterpriseData_1_5_2/EnterpriseData_1_5_2.mdo new file mode 100644 index 000000000..612571154 --- /dev/null +++ b/SSL/src/XDTOPackages/EnterpriseData_1_5_2/EnterpriseData_1_5_2.mdo @@ -0,0 +1,9 @@ + + + EnterpriseData_1_5_2 + + ru + EnterpriseData 1.5.2 + + http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.5 + diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_5_2/Package.xdto b/SSL/src/XDTOPackages/EnterpriseData_1_5_2/Package.xdto new file mode 100644 index 000000000..5ae4c7018 --- /dev/null +++ b/SSL/src/XDTOPackages/EnterpriseData_1_5_2/Package.xdto @@ -0,0 +1,5795 @@ + + + + (((0[1-9]{1}|[1-2]{1}[0-9]{1})\.(0[1-9]{1}|1[0-2]{1}))|((30)\.(01|0[3-9]{1}|1[0-2]{1}))|((31)\.(01|03|05|07|08|10|12)))\.(18[0-9]{2}|19[0-9]{2}|20[0-9]{2}) + + + + + + + + + 0 + + + + Первая + Вторая + Третья + Четвертая + Пятая + Шестая + Седьмая + Восьмая + Девятая + Десятая + Отдельная + + + ВПользуПоставщика + НаПрочиеДоходы + + + ЗаСчетСтороннейКомпании + ЗаСчетПоставщика + НаПрочиеРасходы + + + Расчетный + Депозитный + Ссудный + ЧековыеКнижки + Аккредитивы + Иной + + + Билеты + Путевки + ПочтовыеМарки + ТалоныНаГСМ + Прочее + + + СПокупателем + СПоставщиком + СКомиссионером + СКомитентом + СКомитентомНаЗакупку + СКомиссионеромНаЗакупку + Прочее + + + ПочтовыйАдрес + ЮридическийАдрес + ФактическийАдрес + Телефон + ТелефонДомашний + ТелефонРабочий + Факс + ВебСтраница + АдресЭлектроннойПочты + ПользовательскаяКИДругое + ПользовательскаяКИТелефон + ПользовательскаяКИАдрес + ПользовательскаяКИАдресЭлектроннойПочты + ПользовательскаяКИВебСтраница + ПользовательскаяКИФакс + + + Пиво + АлкогольнаяПродукция + СпиртосодержащаяПищеваяПродукция + СпиртосодержащаяНеПищеваяПродукция + Спирт + + + НематериальныйАктив + РасходыНаНИОКР + + + ВозвратОтКлиента + ВозвратОтКомиссионера + ВозвратОтРозничногоПокупателя + + + ВозвратПоставщику + ВозвратКомитенту + + + ВыпускПродукцииНаСклад + ВыпускПродукцииВПодразделение + + + СогласованноеИзменение + ИсправлениеОшибки + + + СписаниеЗадолженности + ПереносЗадолженности + ПроведениеВзаимозачета + + + ОплатаОтКлиентаПлатежнойКартой + ВозвратОплатыКлиентуНаПлатежнуюКарту + + + ПокупкаУПоставщика + ПриемНаКомиссию + ЗакупкаПоИмпорту + + + ВзносНаличными + Инкассация + + + РеализацияКлиенту + ПередачаНаКомиссию + ОтгрузкаБезПереходаПравСобственности_ВПути + ОтгрузкаБезПереходаПравСобственности_Реализовано + + + ПрочееСписание + ВнутренняяПередача + + + Сборка + Разборка + + + Руководитель + ГлавныйБухгалтер + РуководительКадровойСлужбы + Кассир + ОтветственныйЗаБухгалтерскиеРегистры + ОтветственныйЗаНалоговыеРегистры + УполномоченныйПредставитель + Исполнитель + Прочее + + + СПоставщиком + СПокупателем + КредитыИЗаймы + Прочее + + + Долг + Аванс + + + КраткосрочныеКредиты + ПроцентыПоКраткосрочнымКредитам + КраткосрочныеЗаймы + ПроцентыПоКраткосрочнымЗаймам + ДолгосрочныеКредиты + ПроцентыПоДолгосрочнымКредитам + ДолгосрочныеЗаймы + ПроцентыПоДолгосрочнымЗаймам + Комиссия + + + Займы + Подотчет + ДоговорПодряда + + + НаТовар + ПодарочнаяКарта + Дисконтная + + + ПринятиеКУчету + ВводВЭксплуатацию + ПринятиеКУчетуСВводомВЭксплуатацию + НачислениеАмортизации + ВнутреннееПеремещение + ТекущийРемонт + СреднийРемонт + КапитальныйРемонт + Переоценка + Реконструкция + Достройка + Дооборудование + ЧастичнаяЛиквидация + Модернизация + ПодготовкаКПередаче + Передача + Списание + Прочее + + + НаРеализацию + Корректировочный + НаАванс + НаАвансКомитента + СуммовыеРазницы + НалоговыйАгент + НаПоступление + + + ТОРГ12 + АктНаПередачуПрав + + + Здания + Сооружения + МашиныИОборудование + ОфисноеОборудование + ТранспортныеСредства + ПроизводственныйИХозяйственныйИнвентарь + РабочийСкот + ПродуктивныйСкот + МноголетниеНасаждения + ЗемельныеУчастки + ОбъектыПриродопользования + КапитальныеВложенияВАрендованноеИмущество + ПрочееИмуществоТребующееГосударственнойРегистрации + ДругиеВидыОсновныхСредств + + + ПродажаОблагаетсяНДС + ПродажаНеОблагаетсяНДС + ПродажаНаЭкспорт + ПродажаОблагаетсяЕНВД + ПоФактическомуИспользованию + НалоговыйАгентПоНДС + + + Мужской + Женский + + + НачислениеАмортизации + ВключениеВРасходыПриПринятииКУчету + СтоимостьНеВключаетсяВРасходы + + + НачислениеАмортизации + НачислениеИзноса + СтоимостьНеПогашается + НачислениеИзносаПоЕНАОФ + СписаниеПриПринятииКУчету + + + НаБумажномНосителе + ВЭлектронномВиде + + + Линейный + УменьшаемогоОстатка + ПропорциональноОбъемуПродукции + + + Линейный + Нелинейный + ПоЕНАОФ + + + Линейный + УменьшаемогоОстатка + ПоСуммеЧиселЛетИспользования + ПропорциональноОбъемуПродукции + ПоЕНАОФ + ПоЕНАОФНа1000кмПробега + + + Автоматически + ПоДокументу + НеПогашать + + + ПриобретениеЗаПлату + Строительство + ВкладВУставныйКапитал + ВОбменНаДругоеИмущество + БезвозмездноеПоступление + ПоДоговоруАренды + ПоступлениеВДоверительноеУправление + ВкладВСовместнуюДеятельность + Иное + + + ПроцентОтСуммыПродажи + ПроцентОтРазницыСуммПродажиИПоступления + НеРассчитывается + + + НДС4 + НДС4_104 + НДС18 + НДС18_118 + НДС2 + НДС2_102 + НДС10 + НДС10_110 + НДС0 + БезНДС + + + НеСогласована + Согласована + КОплате + Отклонена + + + СырьеИМатериалы + ПокупныеПолуфабрикатыИКомплектующие + ВозвратнаяТара + Топливо + ЗапасныеЧасти + ПрочиеМатериалы + СтроительныеМатериалы + ИнвентарьИХозяйственныеПринадлежности + СпецоснасткаИСпецодеждаНаСкладе + СобственныеТовары + ПокупныеИзделия + ГотоваяПродукция + КомиссионныеТовары + ДавальческиеСырьеИМатериалы + + + Товар + Услуга + Работа + МногооборотнаяТара + + + Аккредитив + БанковскийОрдер + ИнкассовоеПоручение + ПлатежныйОрдер + ПлатежноеПоручение + ПлатежноеТребование + + + Оптовый + Розничный + НеавтоматизированнаяТорговаяТочка + + + Собственные + Агентские + + + Наличная + Безналичная + ПлатежнаяКарта + + + ЮридическоеЛицо + ФизическоеЛицо + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ВодительскоеУдостоверение + ВоенныйБилет + ВоенныйБилетОфицераЗапаса + ДипломатическийПаспорт + ЗагранпаспортРФ + ЗагранпаспортСССР + ПаспортРФ + ПаспортСССР + ПаспортМинморфлота + ПаспортМоряка + СвидетельствоОРождении + УдостоверениеОфицера + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + День + Месяц + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Доверенность + Приказ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ОсновнаяСистемаНалогообложения + ОсобыйПорядокНалогообложения + РаспределяемыеЗатраты + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + КредитыПолученные + ЗаймыПолученные + ЗаймыВыданныеСотрудникам + Депозиты + + + + + + + + + + + + + + + + + Проценты + Комиссия + + + + + Краткосрочный + Долгосрочный + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ПолучениеНаличных + Инкассация + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto b/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto index e2b61af53..336e1c224 100644 --- a/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto +++ b/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto @@ -12,8 +12,9 @@ + - + \ No newline at end of file